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