mirror of
https://git.proxmox.com/git/proxmox-spamassassin
synced 2025-04-29 04:30:26 +00:00
138 lines
2.5 KiB
Perl
Executable File
138 lines
2.5 KiB
Perl
Executable File
#!/usr/bin/perl -T
|
|
|
|
use lib '.'; use lib 't';
|
|
use SATest; sa_t_init("recursion");
|
|
use Test::More tests => 10;
|
|
use IO::File;
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
%patterns = (
|
|
q{X-Spam-Status: }, 'headerfound',
|
|
);
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
my $msg1 = q{From: foo
|
|
Message-Id: <bar>
|
|
To: baz
|
|
Subject: testing recursion
|
|
Content-Type: multipart/report; report-type=delivery-status;
|
|
boundary="__BOUND__"
|
|
|
|
--__BOUND__
|
|
|
|
This is the report.
|
|
|
|
--__BOUND__
|
|
Content-Type: message/delivery-status
|
|
|
|
Reporting-MTA: dns; example.org
|
|
Diagnostic-Info: hi!
|
|
|
|
--__BOUND__
|
|
Content-Type: message/rfc822
|
|
|
|
__MSG__
|
|
|
|
--__BOUND__--
|
|
|
|
};
|
|
|
|
my $msg2 = q{From: foo
|
|
Message-Id: <bar>
|
|
To: baz
|
|
Subject: testing recursion 2
|
|
Content-Type: multipart/mixed; boundary="__BOUND__"
|
|
|
|
|
|
--__BOUND__
|
|
Content-Type: text/plain; charset="us-ascii"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
|
|
hi!
|
|
|
|
--__BOUND__
|
|
Content-Type: message/rfc822
|
|
MIME-Version: 1.0
|
|
|
|
__MSG__
|
|
|
|
--__BOUND__--
|
|
|
|
};
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
sub create_test_message {
|
|
my $msg = shift;
|
|
|
|
my $boundstr = "AAAAAAAAAAAAAAAAAAA";
|
|
my $bound = $boundstr; $boundstr++;
|
|
my $text = $msg;
|
|
$text =~ s/__BOUND__/${bound}/g;
|
|
|
|
for my $i (1 .. 600) {
|
|
my $newmsg = $msg;
|
|
$bound = $boundstr; $boundstr++;
|
|
$newmsg =~ s/__BOUND__/${bound}/g;
|
|
$newmsg =~ s/__MSG__/${text}/g;
|
|
$text = $newmsg;
|
|
}
|
|
|
|
open (OUT, ">log/recurse.eml") or die;
|
|
print OUT $text;
|
|
close OUT or die;
|
|
}
|
|
|
|
sub create_test_message_3 {
|
|
my $boundstr = "AAAAAAAAAAAAAAAAAAA";
|
|
my $bound = $boundstr; $boundstr++;
|
|
my $text = q{From: foo
|
|
Message-Id: <bar>
|
|
To: baz
|
|
Subject: testing recursion 3
|
|
};
|
|
|
|
for my $i (1 .. 600) {
|
|
$text .= qq{Content-Type: multipart/mixed; boundary="$boundstr"
|
|
|
|
--$boundstr
|
|
};
|
|
$boundstr++;
|
|
}
|
|
|
|
open (OUT, ">log/recurse.eml") or die;
|
|
print OUT $text;
|
|
close OUT or die;
|
|
}
|
|
|
|
sub try_scan {
|
|
my $fh = IO::File->new_tmpfile();
|
|
ok($fh);
|
|
open(STDERR, ">&=".fileno($fh)) || die "Cannot reopen STDERR";
|
|
sarun("-D -L -t < log/recurse.eml",
|
|
\&patterns_run_cb);
|
|
seek($fh, 0, 0);
|
|
my $error = do {
|
|
local $/;
|
|
<$fh>;
|
|
};
|
|
|
|
print "# $error\n";
|
|
if ($error =~ /Deep recursion on subroutine/) { ok(0); }
|
|
else { ok(1); }
|
|
|
|
ok_all_patterns();
|
|
}
|
|
|
|
create_test_message($msg1);
|
|
try_scan();
|
|
create_test_message($msg2);
|
|
try_scan();
|
|
create_test_message_3();
|
|
try_scan();
|
|
|
|
ok(unlink 'log/recurse.eml');
|