From 8b44e99ec009508d7e050ee44d34a1cf0f111dd5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 10 May 2020 06:21:05 +0000 Subject: [PATCH] eml: rename limits to match postfix names They're still part of our internal API at this point, but reusing the same names as those used by postfix makes sense for now to reduce cognitive overheads of learning new things. There's no "mime_parts_limit", but the name is consistent with "mime_nesting_limit". --- lib/PublicInbox/Eml.pm | 18 +++++++++++------- t/eml.t | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/PublicInbox/Eml.pm b/lib/PublicInbox/Eml.pm index 2ccbb659..ef401141 100644 --- a/lib/PublicInbox/Eml.pm +++ b/lib/PublicInbox/Eml.pm @@ -38,9 +38,11 @@ my $MIME_Header = find_encoding('MIME-Header'); use PublicInbox::EmlContentFoo qw(parse_content_type parse_content_disposition); $PublicInbox::EmlContentFoo::STRICT_PARAMS = 0; -our $MAXPARTS = 1000; # same as SpamAssassin -our $MAXDEPTH = 20; # seems enough, Perl sucks, here -our $MAXBOUNDLEN = 2048; # same as postfix +our $mime_parts_limit = 1000; # same as SpamAssassin (not in postfix AFAIK) + +# the rest of the limit names are taken from postfix: +our $mime_nesting_limit = 20; # seems enough, Perl sucks, here +our $mime_boundary_length_limit = 2048; # same as postfix our $header_size_limit = 102400; # same as postfix my %MIME_ENC = (qp => \&enc_qp, base64 => \&encode_base64); @@ -151,7 +153,7 @@ sub ct ($) { sub mp_descend ($$) { my ($self, $nr) = @_; # or $once for top-level my $bnd = ct($self)->{attributes}->{boundary} // return; # single-part - return if $bnd eq '' || length($bnd) >= $MAXBOUNDLEN; + return if $bnd eq '' || length($bnd) >= $mime_boundary_length_limit; $bnd = quotemeta($bnd); # "multipart" messages can exist w/o a body @@ -179,7 +181,7 @@ sub mp_descend ($$) { # + 3 since we don't want the last part # processed to include any other excluded # parts ($nr starts at 1, and I suck at math) - $MAXPARTS + 3 - $nr); + $mime_parts_limit + 3 - $nr); if (@parts) { # the usual path if we got this far: undef $bdy; # release memory ASAP if $nr > 0 @@ -218,13 +220,15 @@ sub each_part { $p = [ $p, 0 ]; my @s; # our virtual stack my $nr = 0; - while ((scalar(@{$p->[0]}) || ($p = pop @s)) && ++$nr <= $MAXPARTS) { + while ((scalar(@{$p->[0]}) || ($p = pop @s)) && + ++$nr <= $mime_parts_limit) { ++$p->[-1]; # bump index my (undef, @idx) = @$p; @idx = (join('.', @idx)); my $depth = ($idx[0] =~ tr/././) + 1; my $sub = new_sub(undef, \(shift @{$p->[0]})); - if ($depth < $MAXDEPTH && (my $nxt = mp_descend($sub, $nr))) { + if ($depth < $mime_nesting_limit && + (my $nxt = mp_descend($sub, $nr))) { push(@s, $p) if scalar @{$p->[0]}; $p = [ $nxt, @idx, 0 ]; } else { # a leaf node diff --git a/t/eml.t b/t/eml.t index d5e8cbcb..c91deb3a 100644 --- a/t/eml.t +++ b/t/eml.t @@ -282,7 +282,7 @@ if ('maxparts is a feature unique to us') { my @orig; $eml->each_part(sub { push @orig, $_[0]->[0] }); - local $PublicInbox::Eml::MAXPARTS = scalar(@orig); + local $PublicInbox::Eml::mime_parts_limit = scalar(@orig); my $i = 0; $eml->each_part(sub { my $cur = $_[0]->[0]; @@ -290,7 +290,7 @@ if ('maxparts is a feature unique to us') { is($cur->body_raw, $prv->body_raw, "part #$i matches"); }); is($i, scalar(@orig), 'maxparts honored'); - $PublicInbox::Eml::MAXPARTS--; + $PublicInbox::Eml::mime_parts_limit--; my @ltd; $eml->each_part(sub { push @ltd, $_[0]->[0] }); for ($i = 0; $i <= $#ltd; $i++) { -- 2.44.0