From 9ff4d6af92a2374dfb5715c2b65ba4533148d03e Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sat, 4 Aug 2018 14:04:44 -0400 Subject: [PATCH] * lib/glob.c (glob_in_dir): [SV 53465] Allow symlinks to directories. Fix from Rich Felker on the musl mailing list. * tests/scripts/functions/wildcard: Create a regression test for this. --- lib/glob.c | 2 +- tests/scripts/functions/wildcard | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/glob.c b/lib/glob.c index df2b23e6..f221a531 100644 --- a/lib/glob.c +++ b/lib/glob.c @@ -1335,7 +1335,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob) /* If we shall match only directories use the information provided by the dirent call if possible. */ 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; #endif diff --git a/tests/scripts/functions/wildcard b/tests/scripts/functions/wildcard index f91d9adb..ad96473d 100644 --- a/tests/scripts/functions/wildcard +++ b/tests/scripts/functions/wildcard @@ -100,4 +100,19 @@ unlink('xxx.yyy'); run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, '', "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;