diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-10 00:56:27 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-10 00:56:27 +0000 |
commit | 445b3f5100bf9bd5899b8cc5eed925e1cf28b5b2 (patch) | |
tree | 45125744e1f40f1dd45ced537a4ed38b83e08b2c | |
parent | 0ea24a45c99c9fd1365aeec509bea7218409d1a1 (diff) | |
download | perl-445b3f5100bf9bd5899b8cc5eed925e1cf28b5b2.tar.gz |
formline() could wipe out readonly-ness, freeing constants
prematurely, or affect cloning of pad constants
p4raw-id: //depot/perl@5056
-rw-r--r-- | pp_ctl.c | 9 | ||||
-rwxr-xr-x | t/op/write.t | 17 |
2 files changed, 21 insertions, 5 deletions
@@ -302,8 +302,13 @@ PP(pp_formline) bool item_is_utf = FALSE; if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) { - SvREADONLY_off(tmpForm); - doparseform(tmpForm); + if (SvREADONLY(tmpForm)) { + SvREADONLY_off(tmpForm); + doparseform(tmpForm); + SvREADONLY_on(tmpForm); + } + else + doparseform(tmpForm); } SvPV_force(PL_formtarget, len); diff --git a/t/op/write.t b/t/op/write.t index 9918b2f57f..87d50429f4 100755 --- a/t/op/write.t +++ b/t/op/write.t @@ -1,8 +1,6 @@ #!./perl -# $RCSfile: write.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:38 $ - -print "1..6\n"; +print "1..8\n"; my $CAT = ($^O eq 'MSWin32') ? 'type' : 'cat'; @@ -190,3 +188,16 @@ if (`$CAT Op_write.tmp` eq $right) else { print "not ok 6\n"; } +# test lexicals and globals +{ + my $this = "ok"; + our $that = 7; + format LEX = +@<<@| +$this,$that +. + open(LEX, ">&STDOUT") or die; + write LEX; + $that = 8; + write LEX; +} |