In perl.git, the branch maint-5.12 has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/ef9df64588b8411fd2db343c2123797448e756a8?hp=b85be81e3471288c8c432533cfaf3713e28157e9>

- Log -----------------------------------------------------------------
commit ef9df64588b8411fd2db343c2123797448e756a8
Author: Father Chrysostomos <[email protected]>
Date:   Mon Jun 7 12:07:11 2010 +0200

    glob crashes when %File::Glob:: is empty
    
    In 5.6.2, a failure to find a CORE::GLOBAL::glob after loading
    File::Glob would result in a fallback to external glob via pp_glob.
    Now it crashes.
    
    The attached patch should fix this.
-----------------------------------------------------------------------

Summary of changes:
 op.c        |   11 ++++++-----
 t/op/glob.t |   12 ++++++++++--
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/op.c b/op.c
index 76eb16f..e94f158 100644
--- a/op.c
+++ b/op.c
@@ -7161,11 +7161,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 7a42f12..f8725f8 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
 

--
Perl5 Master Repository

Reply via email to