svn commit: r1933139 - in spamassassin/trunk: lib/Mail/SpamAssassin t
[email protected] Fri, 17 Apr 2026 18:38:39 -0000
| Newsgroups | gmane.mail.spam.spamassassin.cvs |
|---|---|
| Message-ID | <177645111989.3893360.17101372827839419389@svn03-he-fi> |
Author: fkento
Date: Fri Apr 17 18:38:39 2026
New Revision: 1933139
Log:
Text with 'transform: scale(0)' should be treated as invisible
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm
spamassassin/trunk/t/html_visibility.t
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm Fri Apr 17 15:59:12 2026 (r1933138)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm Fri Apr 17 18:38:39 2026 (r1933139)
@@ -814,6 +814,7 @@ sub html_font_invisible {
my $font_size = $self->{text_style}[-1]->{'font_size'};
my $display = $self->{text_style}[-1]->{style_display};
my $visibility = $self->{text_style}[-1]->{style_visibility};
+ my $transform = $self->{text_style}[-1]->{style_transform};
# size too small
if ($font_size < 8) {
@@ -830,6 +831,14 @@ sub html_font_invisible {
return 1;
}
+ # <span style="transform: scale(0)"> — any axis scaled to 0 collapses the element
+ if ($transform && $transform =~ /\bscale[xy]?\(\s*0(?:\.0+)?(?:%|[a-z]+)?\s*(?:[,\s]\s*[^)]*)?\)/i) {
+ return 1;
+ }
+ if ($transform && $transform =~ /\bscale\(\s*[^,)]+,\s*0(?:\.0+)?(?:%|[a-z]+)?\s*\)/i) {
+ return 1;
+ }
+
# low-contrast text
# the text is very difficult to read if the distance is under 12,
# a limit of 14 to 16 might be okay if the usage significantly
Modified: spamassassin/trunk/t/html_visibility.t
==============================================================================
--- spamassassin/trunk/t/html_visibility.t Fri Apr 17 15:59:12 2026 (r1933138)
+++ spamassassin/trunk/t/html_visibility.t Fri Apr 17 18:38:39 2026 (r1933139)
@@ -192,6 +192,51 @@ my @tests = (
visibility => 'invisible',
font_invalid_color => 0,
},
+ {
+ html => '<div style="transform: scale(0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scale(0, 1)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scale(1, 0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scaleX(0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scaleY(0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="TRANSFORM: SCALE(0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scale(0.0)">X</div>',
+ visibility => 'invisible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scale(1)">X</div>',
+ visibility => 'visible',
+ font_invalid_color => 0,
+ },
+ {
+ html => '<div style="transform: scale(0.5)">X</div>',
+ visibility => 'visible',
+ font_invalid_color => 0,
+ },
);
plan tests => scalar @tests * 2;