Skip to content

Commit

Permalink
[perl #114984] Glob.xs: Extend stack when returning
Browse files Browse the repository at this point in the history
If a pattern passed to File::Glob consists of a space-separated list
of patterns, the stack will only be extended by doglob() enough for
the list returned by each subpattern.  So iterate() needs to extend
the stack before copying the list of files from an AV to the stack.

This fixes a regression introduced in 5.16.0.
  • Loading branch information
Father Chrysostomos committed Sep 20, 2012
1 parent a71a1af commit a6636b4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions MANIFEST
Expand Up @@ -3748,6 +3748,7 @@ ext/File-Glob/t/basic.t See if File::Glob works
ext/File-Glob/t/case.t See if File::Glob works
ext/File-Glob/t/global.t See if File::Glob works
ext/File-Glob/TODO File::Glob extension todo list
ext/File-Glob/t/rt114984.t See if File::Glob works
ext/File-Glob/t/taint.t See if File::Glob works
ext/GDBM_File/GDBM_File.pm GDBM extension Perl module
ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines
Expand Down
1 change: 1 addition & 0 deletions ext/File-Glob/Glob.xs
Expand Up @@ -93,6 +93,7 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, SV *patsv))
/* chuck it all out, quick or slow */
if (gimme == G_ARRAY) {
if (!on_stack) {
EXTEND(SP, AvFILLp(entries)+1);
Copy(AvARRAY(entries), SP+1, AvFILLp(entries)+1, SV *);
SP += AvFILLp(entries)+1;
}
Expand Down
25 changes: 25 additions & 0 deletions ext/File-Glob/t/rt114984.t
@@ -0,0 +1,25 @@
use strict;
use warnings;
use v5.16.0;
use File::Temp 'tempdir';
use File::Spec::Functions;
use Test::More tests => 1;

my @md = (1..305);
my @mp = (1000..1205);

my $path = tempdir uc cleanup => 1;

foreach (@md) {
open(my $f, ">", catfile $path, "md_$_.dat");
close $f;
}

foreach (@mp) {
open(my $f, ">", catfile $path, "mp_$_.dat");
close $f;
}
my @b = glob(qq{$path/mp_[0123456789]*.dat
$path/md_[0123456789]*.dat});
is scalar(@b), @md+@mp,
'File::Glob extends the stack when returning a long list';

0 comments on commit a6636b4

Please sign in to comment.