This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Perl_call_sv move EXTEND into branch that needs it
authorDaniel Dragan <bulk88@hotmail.com>
Fri, 25 Sep 2015 20:52:56 +0000 (16:52 -0400)
committerTony Cook <tony@develop-help.com>
Mon, 12 Oct 2015 23:10:23 +0000 (10:10 +1100)
If we aren't manipulating the stack, dont fetch it, check and possibly
extend it. There is a slight chance this EXTEND was covering up missing
EXTENDs somewhere else in Perl core or CPAN C code, if future bisects or
valgrind reports show that this EXTEND by 1 must always be done, this
patch can be reverted. pp_method_named contains a EXTEND/XPUSH* call,
pp_entersub requires 1 arg on stack so, both sides of the
"if (!(flags & G_METHOD_NAMED))" test will in theory make sure there is
1 free slot on the stack on entry to a SUB or XSUB.

See also
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231329.html

perl.c

diff --git a/perl.c b/perl.c
index bf4d549..b16c87e 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2729,13 +2729,11 @@ Perl_call_sv(pTHX_ SV *sv, VOL I32 flags)
     SAVEOP();
     PL_op = (OP*)&myop;
 
-    {
+    if (!(flags & G_METHOD_NAMED)) {
        dSP;
        EXTEND(SP, 1);
-       if (!(flags & G_METHOD_NAMED)) {
-           PUSHs(sv);
-           PUTBACK;
-       }
+       PUSHs(sv);
+       PUTBACK;
     }
     oldmark = TOPMARK;
     oldscope = PL_scopestack_ix;