summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2014-04-08 11:12:38 +1000
committerTony Cook <tony@develop-help.com>2014-04-14 08:56:37 +1000
commit78beb4ca6d139a7188817b2d3f61702d5cfd5365 (patch)
tree96406bfb8f4f8f9a022b94b7a9b2be1eb6225d31 /t
parent78269f095bc831a3ca7c226f93a5bba93565dfad (diff)
downloadperl-78beb4ca6d139a7188817b2d3f61702d5cfd5365.tar.gz
[perl #120998] avoid caller() crashing on eval '' stack frames
Starting from v5.17.3-150-g19bcb54e caller() on an eval frame would end up calling Perl_sv_grow() with newlen = 0xFFFFFFFF on 32-bit systems. This eventually started segfaulting with v5.19.0-442-gcbcb2a1 which added code to round up allocations to the nearest 0x100, setting newlen to 0, faulting when sv_setpvn() attempted to copy its source string into the zero space provided.
Diffstat (limited to 't')
-rw-r--r--t/op/caller.t14
1 files changed, 13 insertions, 1 deletions
diff --git a/t/op/caller.t b/t/op/caller.t
index 61a3816f54..54a6bac0a7 100644
--- a/t/op/caller.t
+++ b/t/op/caller.t
@@ -5,7 +5,7 @@ BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require './test.pl';
- plan( tests => 94 );
+ plan( tests => 95 );
}
my @c;
@@ -318,6 +318,18 @@ sub doof { caller(0) }
print +(doof())[3];
END
"caller should not SEGV when the current package is undefined";
+
+# caller should not SEGV when the eval entry has been cleared #120998
+fresh_perl_is <<'END', 'main', {},
+$SIG{__DIE__} = \&dbdie;
+eval '/x';
+sub dbdie {
+ @x = caller(1);
+ print $x[0];
+}
+END
+ "caller should not SEGV for eval '' stack frames";
+
$::testing_caller = 1;
do './op/caller.pl' or die $@;