While glibc gracefully ignores calling closedir() on a null pointer,
musl will instead segfault, which causes programs that rely on
dirtree_recurse or dirtree_flagread (cp, du, find, tar...) to segfault
if it encounters a directory it isn't able to open. This patch
prevents that from happening.
diff --git a/lib/dirtree.c b/lib/dirtree.c
index 2d120890..2c02a1f0 100644
--- a/lib/dirtree.c
+++ b/lib/dirtree.c
@@ -166,7 +166,7 @@ int dirtree_recurse(struct dirtree *node,
       perror_msg_raw(path);
       free(path);
     }
-    goto done;
+    goto donenoclose;
   }
 
   // Iterate through stored entries, if any
@@ -202,6 +202,7 @@ int dirtree_recurse(struct dirtree *node,
 
 done:
   closedir(dir);
+donenoclose:
   node->dirfd = -1;
 
   return (new == DIRTREE_ABORTVAL) ? DIRTREE_ABORT : flags;
_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to