[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] Fix %include bug with pattern with */ on glibc < 2.19 #40141



commit 304ae473cac9e15d5a893d3d95e0479649758bbd
Author: Daniel Pinto <danielpinto52@xxxxxxxxx>
Date:   Sat Oct 3 04:10:52 2020 +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.
---
 changes/bug40141  |  4 ++++
 src/lib/fs/path.c | 13 ++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/changes/bug40141 b/changes/bug40141
new file mode 100644
index 0000000000..a766993b32
--- /dev/null
+++ 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
index 1a15969419..2eef4bded7 100644
--- 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



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits