tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 304ae473cac9e15d5a893d3d95e0479649758bbd
parent f2968c3aac07425a6b4c188aa770b208f8e962b8
Author: Daniel Pinto <danielpinto52@gmail.com>
Date:   Sat,  3 Oct 2020 04:10:52 +0100

Fix %include bug with pattern with */ on glibc < 2.19 #40141

Fix bug where %including a pattern ending in */ would include
files and folders (instead of folders only) in versions of
glibc < 2.19.

Diffstat:
Achanges/bug40141 | 4++++
Msrc/lib/fs/path.c | 13++++++++++++-
2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/changes/bug40141 b/changes/bug40141 @@ -0,0 +1,4 @@ + o Minor bugfixes (configuration): + - Fix bug where %including a pattern ending with */ would include files + and folders (instead of folders only) in versions of glibc < 2.19. + Fixes bug 40141; bugfix on 0.4.5.0-alpha-dev. Patch by Daniel Pinto. diff --git a/src/lib/fs/path.c b/src/lib/fs/path.c @@ -598,6 +598,12 @@ tor_glob(const char *pattern) return NULL; } + // #40141: workaround for bug in glibc < 2.19 where patterns ending in path + // separator match files and folders instead of folders only + size_t pattern_len = strlen(pattern); + bool dir_only = has_glob(pattern) && + pattern_len > 0 && pattern[pattern_len-1] == *PATH_SEPARATOR; + result = smartlist_new(); size_t i; for (i = 0; i < matches.gl_pathc; i++) { @@ -606,7 +612,12 @@ tor_glob(const char *pattern) if (len > 0 && match[len-1] == *PATH_SEPARATOR) { match[len-1] = '\0'; } - smartlist_add(result, match); + + if (!dir_only || (dir_only && is_dir(file_status(match)))) { + smartlist_add(result, match); + } else { + tor_free(match); + } } globfree(&matches); #else