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" );