This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
offset PL_savestack_max by SS_MAXPUSH
[perl5.git] / perl.c
diff --git a/perl.c b/perl.c
index c86daa9..55afb6a 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2779,7 +2779,7 @@ Perl_call_sv(pTHX_ SV *sv, VOL I32 flags)
        myop.op_other = (OP*)&myop;
        (void)POPMARK;
         old_cxix = cxstack_ix;
-       create_eval_scope(flags|G_FAKINGEVAL);
+       create_eval_scope(NULL, flags|G_FAKINGEVAL);
        (void)INCMARK;
 
        JMPENV_PUSH(ret);
@@ -2893,7 +2893,7 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags)
        myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING);
 
     /* fail now; otherwise we could fail after the JMPENV_PUSH but
-     * before a PUSHEVAL, which corrupts the stack after a croak */
+     * before a CX_PUSHEVAL, which corrupts the stack after a croak */
     TAINT_PROPER("eval_sv()");
 
     JMPENV_PUSH(ret);
@@ -4078,6 +4078,8 @@ Perl_init_debugger(pTHX)
 void
 Perl_init_stacks(pTHX)
 {
+    SSize_t size;
+
     /* start with 128-item stack and 8K cxstack */
     PL_curstackinfo = new_stackinfo(REASONABLE(128),
                                 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
@@ -4107,9 +4109,11 @@ Perl_init_stacks(pTHX)
     PL_scopestack_ix = 0;
     PL_scopestack_max = REASONABLE(32);
 
-    Newx(PL_savestack,REASONABLE_but_at_least(128,SS_MAXPUSH),ANY);
+    size = REASONABLE_but_at_least(128,SS_MAXPUSH);
+    Newx(PL_savestack, size, ANY);
     PL_savestack_ix = 0;
-    PL_savestack_max = REASONABLE_but_at_least(128,SS_MAXPUSH);
+    /*PL_savestack_max lies: it always has SS_MAXPUSH more than it claims */
+    PL_savestack_max = size - SS_MAXPUSH;
 }
 
 #undef REASONABLE