Import OpenSSL 1.1.0f
This commit is contained in:
161
external/perl/Text-Template-1.46/t/04-safe.t
vendored
Normal file
161
external/perl/Text-Template-1.46/t/04-safe.t
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
#!perl
|
||||
#
|
||||
# test apparatus for Text::Template module
|
||||
# still incomplete.
|
||||
|
||||
use Text::Template;
|
||||
|
||||
BEGIN {
|
||||
eval "use Safe";
|
||||
if ($@) {
|
||||
print "1..0\n";
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
|
||||
die "This is the test program for Text::Template version 1.46.
|
||||
You are using version $Text::Template::VERSION instead.
|
||||
That does not make sense.\n
|
||||
Aborting"
|
||||
unless $Text::Template::VERSION == 1.46;
|
||||
|
||||
print "1..16\n";
|
||||
|
||||
if ($^O eq 'MacOS') {
|
||||
$BADOP = qq{};
|
||||
$FAILURE = q{};
|
||||
} else {
|
||||
$BADOP = qq{kill 0};
|
||||
$FAILURE = q{Program fragment at line 1 delivered error ``kill trapped by operation mask''};
|
||||
}
|
||||
|
||||
$n=1;
|
||||
$v = $v = 119;
|
||||
|
||||
$c = new Safe or die;
|
||||
|
||||
$goodtemplate = q{This should succeed: { $v }};
|
||||
$goodoutput = q{This should succeed: 119};
|
||||
|
||||
$template1 = new Text::Template ('type' => 'STRING', 'source' => $goodtemplate)
|
||||
or die;
|
||||
$template2 = new Text::Template ('type' => 'STRING', 'source' => $goodtemplate)
|
||||
or die;
|
||||
|
||||
$text1 = $template1->fill_in();
|
||||
$text2 = $template1->fill_in(SAFE => $c);
|
||||
$ERR2 = $@;
|
||||
$text3 = $template2->fill_in(SAFE => $c);
|
||||
$ERR3 = $@;
|
||||
|
||||
# (1)(2)(3) None of these should have failed.
|
||||
print +(defined $text1 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
print +(defined $text2 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
print +(defined $text3 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (4) Safe and non-safe fills of different template objects with the
|
||||
# same template text should yield the same result.
|
||||
# print +($text1 eq $text3 ? '' : 'not '), "ok $n\n";
|
||||
# (4) voided this test: it's not true, because the unsafe fill
|
||||
# uses package main, while the safe fill uses the secret safe package.
|
||||
# We could alias the secret safe package to be identical to main,
|
||||
# but that wouldn't be safe. If you want the aliasing, you have to
|
||||
# request it explicitly with `PACKAGE'.
|
||||
print "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (5) Safe and non-safe fills of the same template object
|
||||
# should yield the same result.
|
||||
# (5) voided this test for the same reason as #4.
|
||||
# print +($text1 eq $text2 ? '' : 'not '), "ok $n\n";
|
||||
print "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (6) Make sure the output was actually correct
|
||||
print +($text1 eq $goodoutput ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
|
||||
$badtemplate = qq{This should fail: { $BADOP; 'NOFAIL' }};
|
||||
$badnosafeoutput = q{This should fail: NOFAIL};
|
||||
$badsafeoutput = q{This should fail: Program fragment delivered error ``kill trapped by operation mask at template line 1.''};
|
||||
|
||||
$template1 = new Text::Template ('type' => 'STRING', 'source' => $badtemplate)
|
||||
or die;
|
||||
$template2 = new Text::Template ('type' => 'STRING', 'source' => $badtemplate)
|
||||
or die;
|
||||
|
||||
$text1 = $template1->fill_in();
|
||||
$text2 = $template1->fill_in(SAFE => $c);
|
||||
$ERR2 = $@;
|
||||
$text3 = $template2->fill_in(SAFE => $c);
|
||||
$ERR3 = $@;
|
||||
$text4 = $template1->fill_in();
|
||||
|
||||
# (7)(8)(9)(10) None of these should have failed.
|
||||
print +(defined $text1 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
print +(defined $text2 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
print +(defined $text3 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
print +(defined $text4 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (11) text1 and text4 should be the same (using safe in between
|
||||
# didn't change anything.)
|
||||
print +($text1 eq $text4 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (12) text2 and text3 should be the same (same template text in different
|
||||
# objects
|
||||
print +($text2 eq $text3 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (13) text1 should yield badnosafeoutput
|
||||
print +($text1 eq $badnosafeoutput ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (14) text2 should yield badsafeoutput
|
||||
$text2 =~ s/'kill'/kill/; # 5.8.1 added quote marks around the op name
|
||||
print "# expected: <$badsafeoutput>\n# got : <$text2>\n";
|
||||
print +($text2 eq $badsafeoutput ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
|
||||
$template = q{{$x=1}{$x+1}};
|
||||
|
||||
$template1 = new Text::Template ('type' => 'STRING', 'source' => $template)
|
||||
or die;
|
||||
$template2 = new Text::Template ('type' => 'STRING', 'source' => $template)
|
||||
or die;
|
||||
|
||||
$text1 = $template1->fill_in();
|
||||
$text2 = $template1->fill_in(SAFE => new Safe);
|
||||
|
||||
# (15) Do effects persist in safe compartments?
|
||||
print +($text1 eq $text2 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
# (16) Try the BROKEN routine in safe compartments
|
||||
sub my_broken {
|
||||
my %a = @_; $a{error} =~ s/ at.*//s;
|
||||
"OK! text:$a{text} error:$a{error} lineno:$a{lineno} arg:$a{arg}" ;
|
||||
}
|
||||
$templateB = new Text::Template (TYPE => 'STRING', SOURCE => '{die}')
|
||||
or die;
|
||||
$text1 = $templateB->fill_in(BROKEN => \&my_broken,
|
||||
BROKEN_ARG => 'barg',
|
||||
SAFE => new Safe,
|
||||
);
|
||||
$result1 = qq{OK! text:die error:Died lineno:1 arg:barg};
|
||||
print +($text1 eq $result1 ? '' : 'not '), "ok $n\n";
|
||||
$n++;
|
||||
|
||||
|
||||
|
||||
exit;
|
||||
|
||||
Reference in New Issue
Block a user