]> Sergey Matveev's repositories - public-inbox.git/commitdiff
threading: deal with improperly-terminated References headers
authorEric Wong <e@80x24.org>
Mon, 2 Oct 2017 22:19:16 +0000 (22:19 +0000)
committerEric Wong <e@80x24.org>
Tue, 3 Oct 2017 02:26:11 +0000 (02:26 +0000)
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 '>'.

lib/PublicInbox/SearchIdx.pm
lib/PublicInbox/View.pm

index 0824db03c113a5d001b846b3f4c115ae1a3d7de2..cfb9a0880f622d351ad043dcae1142f5b8a3901a 100644 (file)
@@ -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) {
index 7454acbba153bc80f86ae09f4c931c36bb007a5b..b39c820338993801e511a63e6291baf4443e4fc0 100644 (file)
@@ -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;