summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-06-24 11:14:29 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-06-24 11:14:29 -0700
commit0a5f3363e275bb35c4f20083e44a319e37d56898 (patch)
treea425cbe153822000d2b471488a0cc1de4fd51b8f /pp.c
parent61a3fb803c3babf0e3e750430415338e6506a241 (diff)
downloadperl-0a5f3363e275bb35c4f20083e44a319e37d56898.tar.gz
Don’t crash with ()=&CORE::srand
Ops that don’t allow arbitrarily long argument lists are flagged at compile-time with the number of children. Coresubs have to call the same op with differing numbers of arguments, so they push nulls on to the stack to make up the number of items the pp function expects to pop. Commit f914a6829 stopped popping the null of the stack. Before: $ ./perl -le 'print &CORE::srand' 1240765685 After: $ ./perl -le 'print &CORE::srand' Bus error List assignment does the same thing, and makes it easier to write a test.
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/pp.c b/pp.c
index 1fcc885442..156a500a87 100644
--- a/pp.c
+++ b/pp.c
@@ -2660,7 +2660,7 @@ PP(pp_srand)
dVAR; dSP; dTARGET;
UV anum;
- if (MAXARG >= 1 && TOPs) {
+ if (MAXARG >= 1 && (TOPs || POPs)) {
SV *top;
char *pv;
STRLEN len;