commit 2ceea131406b3f88e4a6a9c6bfc9f47f4940ca47
parent d41025312aa46675e44d93358a84d6777c404e8d
Author: Nick Mathewson <nickm@torproject.org>
Date: Wed, 7 Oct 2020 09:42:37 -0400
Merge remote-tracking branch 'tor-gitlab/mr/164'
Diffstat:
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