]> Sergey Matveev's repositories - public-inbox.git/commitdiff
msgtime: avoid obviously out-of-range dates (for now)
authorEric Wong <e@80x24.org>
Sun, 1 Dec 2019 22:04:25 +0000 (22:04 +0000)
committerEric Wong <e@80x24.org>
Thu, 12 Dec 2019 03:51:45 +0000 (03:51 +0000)
Wacky dates show up in lore for valid messages.  Lets ignore
them and let future generations deal with Y10K and time-travel
problems.

lib/PublicInbox/MsgTime.pm
t/msgtime.t

index 479aaa4ecf132f5176d49ce54db6171769872666..9f4326442dd110d12a40f96595d3b2b2da7461aa 100644 (file)
@@ -38,7 +38,7 @@ sub str2date_zone ($) {
        if ($date =~ /(?:[A-Za-z]+,?\s+)? # day-of-week
                        ([0-9]+),?\s+  # dd
                        ([A-Za-z]+)\s+ # mon
-                       ([0-9]{2,})\s+ # YYYY or YY (or YYY :P)
+                       ([0-9]{2,4})\s+ # YYYY or YY (or YYY :P)
                        ([0-9]+)[:\.] # HH:
                                ((?:[0-9]{2})|(?:\s?[0-9])) # MM
                                (?:[:\.]((?:[0-9]{2})|(?:\s?[0-9])))? # :SS
@@ -67,6 +67,10 @@ sub str2date_zone ($) {
 
                $ts = timegm($ss // 0, $mm, $hh, $dd, $mon, $yyyy);
 
+               # 4-digit dates in non-spam from 1900s and 1910s exist in
+               # lore archives
+               return if $ts < 0;
+
                # Compute the time offset from [+-]HHMM
                $tz //= 0;
                my ($tz_hh, $tz_mm);
index 1452dc97d5b0bc4d2f338a40d7ea1f3945c5135c..98cf66e6426c4feee883b3dcf1433352b33b7e9b 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Test::More;
 use PublicInbox::MIME;
 use PublicInbox::MsgTime;
-
+our $received_date = 'Mon, 22 Jan 2007 13:16:24 -0500';
 sub datestamp ($) {
        my ($date) = @_;
        local $SIG{__WARN__} = sub {};  # Suppress warnings
@@ -17,7 +17,11 @@ sub datestamp ($) {
                        Subject => 'this is a subject',
                        'Message-ID' => '<a@example.com>',
                        Date => $date,
-                       'Received' => '(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S932173AbXAVSQY (ORCPT <rfc822;w@1wt.eu>);\n\tMon, 22 Jan 2007 13:16:24 -0500',
+                       'Received' => <<EOF,
+(majordomo\@vger.kernel.org) by vger.kernel.org via listexpand
+\tid S932173AbXAVSQY (ORCPT <rfc822;w\@1wt.eu>);
+\t$received_date
+EOF
                ],
                body => "hello world\n",
            );
@@ -104,4 +108,10 @@ for (qw(UT GMT Z)) {
 }
 is_datestamp('Fri, 02 Oct 1993 00:00:00 EDT', [ 749534400, '-0400']);
 
+# fallback to Received: header if Date: is out-of-range:
+is_datestamp('Fri, 1 Jan 1904 10:12:31 +0100',
+       PublicInbox::MsgTime::str2date_zone($received_date));
+is_datestamp('Fri, 9 Mar 71685 18:45:56 +0000', # Y10K is not my problem :P
+       PublicInbox::MsgTime::str2date_zone($received_date));
+
 done_testing();