diff options
-rw-r--r-- | op.c | 11 | ||||
-rw-r--r-- | t/op/glob.t | 12 |
2 files changed, 16 insertions, 7 deletions
@@ -7167,11 +7167,12 @@ Perl_ck_glob(pTHX_ OP *o) ENTER; Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvs("File::Glob"), NULL, NULL, NULL); - gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV); - glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV); - GvCV(gv) = GvCV(glob_gv); - SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv))); - GvIMPORTED_CV_on(gv); + if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) { + gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV); + GvCV(gv) = GvCV(glob_gv); + SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv))); + GvIMPORTED_CV_on(gv); + } LEAVE; } #endif /* PERL_EXTERNAL_GLOB */ diff --git a/t/op/glob.t b/t/op/glob.t index 7a42f12b4e..f8725f82ef 100644 --- a/t/op/glob.t +++ b/t/op/glob.t @@ -6,7 +6,7 @@ BEGIN { } require 'test.pl'; -plan( tests => 15 ); +plan( tests => 16 ); @oops = @ops = <op/*>; @@ -51,7 +51,15 @@ for (1..2) { undef %File::Glob::; ++$i; } -cmp_ok($i,'==',2,'remore File::Glob stash'); +cmp_ok($i,'==',2,'remove File::Glob stash'); + +# a more sinister version of the same test (crashes from 5.8 to 5.13.1) +{ + undef %File::Glob::; + local %CORE::GLOBAL::; + eval "<.>"; + ok(!length($@),"remove File::Glob stash *and* CORE::GLOBAL::glob"); +} # ... while ($var = glob(...)) should test definedness not truth |