lib/PublicInbox/ContentHash.pm | 7 +++---- t/content_hash.t | 14 +++++++++++++- diff --git a/lib/PublicInbox/ContentHash.pm b/lib/PublicInbox/ContentHash.pm index 838fdd6fcf654907af59ee1c451aebdaaa9b89b2..4dbe7b5049d57290f56d20e6f5a52d50612ed73b 100644 --- a/lib/PublicInbox/ContentHash.pm +++ b/lib/PublicInbox/ContentHash.pm @@ -68,10 +68,9 @@ } # Only use Sender: if From is not present foreach my $h (qw(From Sender)) { - my @v = $eml->header($h); - if (@v) { - digest_addr($dig, $h, $_) foreach @v; - } + my @v = $eml->header($h) or next; + digest_addr($dig, $h, $_) foreach @v; + last; } foreach my $h (qw(Subject Date)) { my @v = $eml->header($h); diff --git a/t/content_hash.t b/t/content_hash.t index 3f02b1b34a9a87dba7e794747fe78196a7b7332a..060665f629eedef9c0e45b568adb577d379157a2 100644 --- a/t/content_hash.t +++ b/t/content_hash.t @@ -1,7 +1,8 @@ +#!perl -w # Copyright (C) 2018-2021 all contributors # License: AGPL-3.0+ use strict; -use warnings; +use v5.10.1; use Test::More; use PublicInbox::ContentHash qw(content_hash); use PublicInbox::Eml; @@ -19,6 +20,17 @@ my $orig = content_hash($mime); my $reload = content_hash(PublicInbox::Eml->new($mime->as_string)); is($orig, $reload, 'content_hash matches after serialization'); +{ + my $s1 = PublicInbox::Eml->new($mime->as_string); + $s1->header_set('Sender', 's@example.com'); + is(content_hash($s1), $orig, "Sender ignored when 'From' present"); + my $s2 = PublicInbox::Eml->new($s1->as_string); + $s1->header_set('Sender', 'sender@example.com'); + is(content_hash($s2), $orig, "Sender really ignored 'From'"); + $_->header_set('From') for ($s1, $s2); + isnt(content_hash($s1), content_hash($s2), + 'sender accounted when From missing'); +} foreach my $h (qw(From To Cc)) { my $n = q("Quoted N'Ame" );