diff options
-rw-r--r-- | perl.c | 5 | ||||
-rw-r--r-- | pp_sys.c | 5 | ||||
-rwxr-xr-x | t/op/magic.t | 4 | ||||
-rw-r--r-- | util.c | 5 |
4 files changed, 15 insertions, 4 deletions
@@ -3565,8 +3565,11 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register #endif /* USE_ENVIRON_ARRAY */ } TAINT_NOT; - if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } } STATIC void @@ -3923,8 +3923,11 @@ PP(pp_fork) RETSETUNDEF; if (!childpid) { /*SUPPRESS 560*/ - if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */ } PUSHi(childpid); diff --git a/t/op/magic.t b/t/op/magic.t index 4e47414ae0..4f386231fc 100755 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -36,7 +36,7 @@ sub skip { return 1; } -print "1..43\n"; +print "1..44\n"; $Is_MSWin32 = $^O eq 'MSWin32'; $Is_NetWare = $^O eq 'NetWare'; @@ -143,6 +143,8 @@ eval { die "foo\n" }; ok $@ eq "foo\n", $@; ok $$ > 0, $$; +eval { $$++ }; +ok $@ =~ /^Modification of a read-only value attempted/; # $^X and $0 { @@ -2057,8 +2057,11 @@ Perl_my_popen(pTHX_ char *cmd, char *mode) } #endif /* defined OS2 */ /*SUPPRESS 560*/ - if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } PL_forkprocess = 0; hv_clear(PL_pidstatus); /* we have no children */ return Nullfp; |