ExtUtils::Constant fix "panic: failed to extend arg stack"
authorDaniel Dragan <bulk88@hotmail.com>
Wed, 14 Mar 2018 03:38:23 +0000 (23:38 -0400)
committerNicholas Clark <nick@ccl4.org>
Wed, 18 Apr 2018 05:56:00 +0000 (07:56 +0200)
"$XS_Constant{$type}" is almost always a 2nd PUSH on stack, but EU::C
only extended by 1, not 2. This mistake didn't become visible until
the panic assert was added 5.27.2

panic: XSUB Compress::Raw::Bzip2::constant (Bzip2.c) failed to extend arg
stack: base=1b13010, sp=1b13020, hwm=1b13018

Numbers in message are from my 64bit perl, so 0x1b13020-0x1b13018=0x8
which is one 64 bit pointer stack slot, which is exactly the mistake that
this patch fixes in EU::C. See RT ticket associated with this commit for
details.

cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm

index 9ac977d..7fe819d 100644 (file)
@@ -272,7 +272,7 @@ EOT
     $xs .= "        case PERL_constant_IS$type:\n";
     if (length $XS_Constant{$type}) {
       $xs .= << "EOT";
-          EXTEND(SP, 1);
+          EXTEND(SP, 2);
           PUSHs(&PL_sv_undef);
           $XS_Constant{$type};
 EOT