summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op.c11
-rw-r--r--t/op/glob.t12
2 files changed, 16 insertions, 7 deletions
diff --git a/op.c b/op.c
index f66716421c..c50111c794 100644
--- a/op.c
+++ b/op.c
@@ -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