about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-04-03 10:48:26 +0000
committerEric Wong <e@80x24.org>2021-04-03 18:38:47 +0000
commitb3e2975029ae938bb232aaa0cbc3dabda55d57d6 (patch)
treebe5e7278753fa9314fded8c64c13d0d1c67e2990 /lib/PublicInbox
parente8ad075ab7d02b260fdf8470e6d851ade4eac6fa (diff)
downloadpublic-inbox-b3e2975029ae938bb232aaa0cbc3dabda55d57d6.tar.gz
We need a stable fallback time for digest2mid in the presence
of messages without Received/Date headers.  Furthermore, we
must avoid using uninitialized smsg->{mid} when parsing
References for draft replies.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/Import.pm6
-rw-r--r--lib/PublicInbox/LeiSearch.pm2
-rw-r--r--lib/PublicInbox/OverIdx.pm6
-rw-r--r--lib/PublicInbox/Smsg.pm2
4 files changed, 9 insertions, 7 deletions
diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm
index 34738279..46f57e27 100644
--- a/lib/PublicInbox/Import.pm
+++ b/lib/PublicInbox/Import.pm
@@ -510,8 +510,8 @@ sub atfork_child {
         }
 }
 
-sub digest2mid ($$) {
-        my ($dig, $hdr) = @_;
+sub digest2mid ($$;$) {
+        my ($dig, $hdr, $fallback_time) = @_;
         my $b64 = $dig->clone->b64digest;
         # Make our own URLs nicer:
         # See "Base 64 Encoding with URL and Filename Safe Alphabet" in RFC4648
@@ -520,7 +520,7 @@ sub digest2mid ($$) {
         # Add a date prefix to prevent a leading '-' in case that trips
         # up some tools (e.g. if a Message-ID were a expected as a
         # command-line arg)
-        my $dt = msg_datestamp($hdr);
+        my $dt = msg_datestamp($hdr, $fallback_time);
         $dt = POSIX::strftime('%Y%m%d%H%M%S', gmtime($dt));
         "$dt.$b64" . '@z';
 }
diff --git a/lib/PublicInbox/LeiSearch.pm b/lib/PublicInbox/LeiSearch.pm
index 69ba8303..148aa185 100644
--- a/lib/PublicInbox/LeiSearch.pm
+++ b/lib/PublicInbox/LeiSearch.pm
@@ -58,7 +58,7 @@ sub content_key ($) {
                         qw(Message-ID X-Alt-Message-ID Resent-Message-ID));
         unless (@$mids) {
                 $eml->{-lei_fake_mid} = $mids->[0] =
-                                PublicInbox::Import::digest2mid($dig, $eml);
+                                PublicInbox::Import::digest2mid($dig, $eml, 0);
         }
         ($chash, $mids);
 }
diff --git a/lib/PublicInbox/OverIdx.pm b/lib/PublicInbox/OverIdx.pm
index e1cd31b9..66dec099 100644
--- a/lib/PublicInbox/OverIdx.pm
+++ b/lib/PublicInbox/OverIdx.pm
@@ -264,8 +264,10 @@ sub add_overview {
         $smsg->{lines} = $eml->body_raw =~ tr!\n!\n!;
         my $mids = mids_for_index($eml);
         my $refs = $smsg->parse_references($eml, $mids);
-        $mids->[0] //= $smsg->{mid} //= $eml->{-lei_fake_mid};
-        $smsg->{mid} //= '';
+        $mids->[0] //= do {
+                $smsg->{mid} //= '';
+                $eml->{-lei_fake_mid};
+        };
         my $subj = $smsg->{subject};
         my $xpath;
         if ($subj ne '') {
diff --git a/lib/PublicInbox/Smsg.pm b/lib/PublicInbox/Smsg.pm
index b4cc2ecb..da8ce590 100644
--- a/lib/PublicInbox/Smsg.pm
+++ b/lib/PublicInbox/Smsg.pm
@@ -76,7 +76,7 @@ sub parse_references ($$$) {
         return $refs if scalar(@$refs) == 0;
 
         # prevent circular references here:
-        my %seen = ( $smsg->{mid} => 1 );
+        my %seen = ( ($smsg->{mid} // '') => 1 );
         my @keep;
         foreach my $ref (@$refs) {
                 if (length($ref) > PublicInbox::MID::MAX_MID_SIZE) {