about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-10-02 22:19:16 +0000
committerEric Wong <e@80x24.org>2017-10-03 02:26:11 +0000
commit2aa29ee6a35f5be2d76c39ccc50bf7a34075e2bd (patch)
treefdec42427b5096eebc1c0481b147016313dda2f0
parent2a5b77c0cdd9bb1f726fd05b01d3095b029367ac (diff)
downloadpublic-inbox-2aa29ee6a35f5be2d76c39ccc50bf7a34075e2bd.tar.gz
We should not blindly join References and In-Reply-To headers
as a single string, because some messages can have an open
angle brace '<' in References: without a corresponding '>'.
-rw-r--r--lib/PublicInbox/SearchIdx.pm5
-rw-r--r--lib/PublicInbox/View.pm5
2 files changed, 4 insertions, 6 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index 0824db03..cfb9a088 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -414,9 +414,8 @@ sub link_message {
 
         # last References should be IRT, but some mail clients do things
         # out of order, so trust IRT over References iff IRT exists
-        my @refs = ($hdr->header_raw('References'),
-                        $hdr->header_raw('In-Reply-To'));
-        @refs = ((join(' ', @refs)) =~ /<([^>]+)>/g);
+        my @refs = (($hdr->header_raw('References') || '') =~ /<([^>]+)>/g);
+        push(@refs, (($hdr->header_raw('In-Reply-To') || '') =~ /<([^>]+)>/g));
 
         my $tid;
         if (@refs) {
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 7454acbb..b39c8203 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -104,9 +104,8 @@ EOF
 sub in_reply_to {
         my ($hdr) = @_;
         my %mid = map { $_ => 1 } $hdr->header_raw('Message-ID');
-        my @refs = ($hdr->header_raw('References'),
-                        $hdr->header_raw('In-Reply-To'));
-        @refs = ((join(' ', @refs)) =~ /<([^>]+)>/g);
+        my @refs = (($hdr->header_raw('References') || '') =~ /<([^>]+)>/g);
+        push(@refs, (($hdr->header_raw('In-Reply-To') || '') =~ /<([^>]+)>/g));
         while (defined(my $irt = pop @refs)) {
                 next if $mid{"<$irt>"};
                 return $irt;