From b61dc22adaf82114eee3edce91cc3433bcd27fe5 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Wed, 9 Oct 2019 20:06:02 +0000 Subject: [PATCH] Cygwin: spawnvp, spawnvpe: fail if executable is not in $PATH Call find_exec with the FE_NNF flag to enforce a NULL return when the executable isn't found in $PATH. Convert NULL to "". This aligns spawnvp and spawnvpe with execvp and execvpe. --- winsup/cygwin/release/3.1.0 | 3 +++ winsup/cygwin/spawn.cc | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/release/3.1.0 b/winsup/cygwin/release/3.1.0 index 3f2f3c86b..fb0e37215 100644 --- a/winsup/cygwin/release/3.1.0 +++ b/winsup/cygwin/release/3.1.0 @@ -91,3 +91,6 @@ Bug Fixes - If the argument to mkdir(2) or rmdir(2) is 'x:\', don't strip the trailing backslash. Addresses: https://cygwin.com/ml/cygwin/2019-08/msg00334.html + +- Make spawnvp, spawnvpe fail if the executable is not in $PATH. + Addresses: https://cygwin.com/ml/cygwin/2019-10/msg00032.html diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index f8090a6a4..f82860e72 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -1081,8 +1081,9 @@ extern "C" int spawnvp (int mode, const char *file, const char * const *argv) { path_conv buf; - return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf), argv, - cur_environ ()); + return spawnve (mode | _P_PATH_TYPE_EXEC, + find_exec (file, buf, "PATH", FE_NNF) ?: "", + argv, cur_environ ()); } extern "C" int @@ -1090,7 +1091,9 @@ spawnvpe (int mode, const char *file, const char * const *argv, const char * const *envp) { path_conv buf; - return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf), argv, envp); + return spawnve (mode | _P_PATH_TYPE_EXEC, + find_exec (file, buf, "PATH", FE_NNF) ?: "", + argv, envp); } int