fix execvp failing on not-dir entries in PATH.
authorPrzemyslaw Pawelczyk <przemoc@gmail.com>
Sun, 22 Oct 2017 22:07:42 +0000 (00:07 +0200)
committerRich Felker <dalias@aerifal.cx>
Wed, 21 Feb 2018 16:54:59 +0000 (11:54 -0500)
It's better to make execvp continue PATH search on ENOTDIR rather than
issuing an error. Bogus entries should not render rest of PATH invalid.

Maintainer's note: POSIX seems to require the search to continue like
this as part of XBD 8.3 Other Environment Variables. Only errors that
conclusively determine non-existence are candidates for continuing;
otherwise for consistency we have to report the error.

src/process/execvp.c

index 3a8bbe83295ab3e76abcec90c30c3dee0378f75a..480a85e9383ef1054e6633dd22a45fd9f6506287 100644 (file)
@@ -40,7 +40,7 @@ int __execvpe(const char *file, char *const argv[], char *const envp[])
                memcpy(b+(z-p)+(z>p), file, k+1);
                execve(b, argv, envp);
                if (errno == EACCES) seen_eacces = 1;
-               else if (errno != ENOENT) return -1;
+               else if (errno != ENOENT && errno != ENOTDIR) return -1;
                if (!*z++) break;
        }
        if (seen_eacces) errno = EACCES;