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
