]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
path: fix directory special case
authorHello71 <alex_y_xu@yahoo.ca>
Sat, 9 Jan 2021 19:16:20 +0000 (19:16 +0000)
committerAlexander Færøy <ahf@torproject.org>
Fri, 22 Jan 2021 13:19:52 +0000 (13:19 +0000)
changes/glob_dir [new file with mode: 0644]
src/lib/fs/path.c
src/test/test_util.c

diff --git a/changes/glob_dir b/changes/glob_dir
new file mode 100644 (file)
index 0000000..cb9907f
--- /dev/null
@@ -0,0 +1,3 @@
+  o Minor bugfixes (config):
+    - Fix globbing directories on all platforms. Fixes compilation on musl.
+      Fixes bug 40141; bugfix on 0.4.5.1-alpha.
index c2fdddb9db6adda598c5e0dd791a01f78809ddf1..39794cb84eae61620ce05b2ca05bd1434406ee59 100644 (file)
@@ -611,11 +611,13 @@ 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
+  // #40141, !249: workaround for glibc bug where patterns ending in path
+  // separator match files and folders instead of folders only.
+  // this could be in #ifdef __GLIBC__ but: 1. it might affect other libcs too,
+  // and 2. it doesn't cost much to stat each match again since libc is already
+  // supposed to do it (otherwise the file may be on slow NFS or something)
   size_t pattern_len = strlen(pattern);
-  bool dir_only = has_glob(pattern) &&
-                  pattern_len > 0 && pattern[pattern_len-1] == *PATH_SEPARATOR;
+  bool dir_only = pattern_len > 0 && pattern[pattern_len-1] == *PATH_SEPARATOR;
 
   result = smartlist_new();
   size_t i;
index b3a1e2cacaf5a35ac804fa392099f2dbd75f7986..546b3c29075c6da45a256093c3a620f8afcbd673 100644 (file)
@@ -4562,15 +4562,8 @@ test_util_glob(void *ptr)
   TEST("file1");
   EXPECT(results_test9);
 
-#if defined(__APPLE__) || defined(__darwin__) || \
-  defined(__FreeBSD__) || defined(__NetBSD__) || defined(OpenBSD)
   TEST("file1"PATH_SEPARATOR);
   EXPECT_EMPTY();
-#else
-  const char *results_test10[] = {"file1"};
-  TEST("file1"PATH_SEPARATOR);
-  EXPECT(results_test10);
-#endif
 
   // test path separator at end - with wildcards and linux path separator
   const char *results_test11[] = {"dir1", "dir2", "forbidden"};