]> Sergey Matveev's repositories - public-inbox.git/commitdiff
msgtime: assume +0000 if TZ missing when using Date::Parse
authorEric Wong <e@yhbt.net>
Tue, 25 Feb 2020 09:23:03 +0000 (09:23 +0000)
committerEric Wong <e@yhbt.net>
Sun, 1 Mar 2020 23:24:16 +0000 (23:24 +0000)
Some old emails don't have timezone offsets, since our
Date::Parse code path takes a liberal interpretation of dates,
fallback to using "+0000" as the timezone offset since it's
closer to the actual date of the message than whatever the
current date is.

Reported-by: Leah Neukirchen <leah@vuxu.org>
Link: https://public-inbox.org/meta/87h7zfemur.fsf@vuxu.org/
Fixes: ae80a3fdb53d7014 ("MsgTime.pm: Use strptime to compute the time zone")
lib/PublicInbox/MsgTime.pm
t/msgtime.t

index 8eee9a7586922c0fb302421c4c195b4540793fd2..8703d7bc0a78293dbe4735e34c5a339ad8cffb6c 100644 (file)
@@ -104,7 +104,8 @@ sub str2date_zone ($) {
                # off is the time zone offset in seconds from GMT
                my ($ss,$mm,$hh,$day,$month,$year,$off) =
                                        Date::Parse::strptime($date);
-               return undef unless(defined $off);
+               return unless defined($year);
+               $off //= 0;
 
                # Compute the time zone from offset
                my $sign = ($off < 0) ? '-' : '+';
index 5c4636a2da73894b344d80714451e7ea20be6dbe..7c95e547d5bf98dcb877737d73a2c32c1339eef3 100644 (file)
@@ -5,6 +5,8 @@ use warnings;
 use Test::More;
 use PublicInbox::MIME;
 use PublicInbox::MsgTime;
+use PublicInbox::TestCommon;
+
 our $received_date = 'Mon, 22 Jan 2007 13:16:24 -0500';
 sub datestamp ($) {
        my ($date) = @_;
@@ -102,6 +104,11 @@ is_datestamp('Thu, 14 Dec 2006 00:20:24 +0480', [1166036424, '+0520']);
 is_datestamp('Thu, 14 Dec 2006 00:20:24 -0480', [1166074824, '-0520']);
 is_datestamp('Mon, 14 Apr 2014 07:59:01 -0007', [1397462761, '-0007']);
 
+SKIP: {
+       require_mods('Date::Parse', 1);
+       is_datestamp('Sat, 27 Sep 1997 10:02:32', [875354552, '+0000']);
+}
+
 # obsolete formats described in RFC2822
 for (qw(UT GMT Z)) {
        is_datestamp('Fri, 02 Oct 1993 00:00:00 '.$_, [ 749520000, '+0000']);