diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-05-31 19:54:31 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-05-31 19:54:31 +0000 |
commit | b862623f640d051afa35dfa66f03e9a997880b50 (patch) | |
tree | 07f55b52d4deb3f95b42b288e7d3f80d3db2c10f | |
parent | 056a8fbecb5430f5c3c47e7377e5467379e227be (diff) | |
download | perl-b862623f640d051afa35dfa66f03e9a997880b50.tar.gz |
Fix a case of segfault in gv_check(), by making
it ignore non-GV values in stashes.
p4raw-id: //depot/perl@19652
-rw-r--r-- | gv.c | 2 | ||||
-rw-r--r-- | t/op/stash.t | 10 |
2 files changed, 10 insertions, 2 deletions
@@ -1156,7 +1156,7 @@ Perl_gv_check(pTHX_ HV *stash) for (i = 0; i <= (I32) HvMAX(stash); i++) { for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) { if (HeKEY(entry)[HeKLEN(entry)-1] == ':' && - (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv))) + (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv))) { if (hv != PL_defstash && hv != stash) gv_check(hv); /* nested package */ diff --git a/t/op/stash.t b/t/op/stash.t index c8fe0ae14a..0cd7ebf5e7 100644 --- a/t/op/stash.t +++ b/t/op/stash.t @@ -7,7 +7,7 @@ BEGIN { require "./test.pl"; -plan( tests => 1 ); +plan( tests => 2 ); # Used to segfault (bug #15479) fresh_perl_is( @@ -16,3 +16,11 @@ fresh_perl_is( { switches => [ '-w' ] }, 'delete $::{STDERR} and print a warning', ); + +# Used to segfault +fresh_perl_is( + 'BEGIN { $::{"X::"} = 2 }', + '', + { switches => [ '-w' ] }, + q(Insert a non-GV in a stash, under warnings 'once'), +); |