* lib/glob.c (glob_in_dir): [SV 53465] Allow symlinks to directories.

Fix from Rich Felker <bugdal@aerifal.cx> on the musl mailing list.
* tests/scripts/functions/wildcard: Create a regression test for this.
This commit is contained in:
Paul Smith 2018-08-04 14:04:44 -04:00
parent a370268739
commit 9ff4d6af92
2 changed files with 16 additions and 1 deletions

View file

@ -1335,7 +1335,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
/* If we shall match only directories use the information /* If we shall match only directories use the information
provided by the dirent call if possible. */ provided by the dirent call if possible. */
if ((flags & GLOB_ONLYDIR) if ((flags & GLOB_ONLYDIR)
&& d->d_type != DT_UNKNOWN && d->d_type != DT_DIR) && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR && d->d_type != DT_LNK)
continue; continue;
#endif #endif

View file

@ -100,4 +100,19 @@ unlink('xxx.yyy');
run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!,
'', "file=\n"); '', "file=\n");
# TEST #6: check for wildcards matching directories
# See SV 53465
if ($port_type ne 'W32' && eval { symlink("",""); 1 }) {
my $dir = '__rdir';
my $lnk = '__ldir';
mkdir($dir, 0777);
symlink($dir, $lnk);
run_make_test(qq!all: ; \@echo \$(wildcard $lnk*/.)!, '', "$lnk/.");
unlink($lnk);
rmdir($dir);
}
1; 1;