save_re_context() could reset PL_curcop to freed memory, causing core
Gurusamy Sarathy [Sun, 8 Oct 2000 04:15:29 +0000 (04:15 +0000)]
dumps in code such as C<use CGI::Carp; use something_that_calls_die;>

p4raw-id: //depot/perl@7165

pp_ctl.c

index c949e78..d69aaa8 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1417,6 +1417,12 @@ Perl_die_where(pTHX_ char *message, STRLEN msglen)
 
            LEAVE;
 
+           /* LEAVE could clobber PL_curcop (see save_re_context())
+            * XXX it might be better to find a way to avoid messing with
+            * PL_curcop in save_re_context() instead, but this is a more
+            * minimal fix --GSAR */
+           PL_curcop = cx->blk_oldcop;
+
            if (optype == OP_REQUIRE) {
                char* msg = SvPVx(ERRSV, n_a);
                DIE(aTHX_ "%sCompilation failed in require",