diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-07-07 06:51:05 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-07-07 06:51:05 -0700 |
commit | a10a8241f40f24d965e6fdd866d1ee07da4cb4f0 (patch) | |
tree | ee2aa4780b1508c7ea599a2d37ec628e95a381d1 /winsup/cygwin/spawn.cc | |
parent | 1e0f183f2146d0be7802db02a85e15cb84f20aca (diff) | |
download | cygnal-a10a8241f40f24d965e6fdd866d1ee07da4cb4f0.tar.gz cygnal-a10a8241f40f24d965e6fdd866d1ee07da4cb4f0.tar.bz2 cygnal-a10a8241f40f24d965e6fdd866d1ee07da4cb4f0.zip |
Use COMSPEC env var, not hard-coded CMD.EXE path.
It is with some reluctance I make this change, due to the security
implications of relying on environment variables. But we can't have a
hard-coded path.
* winsup/cygwin/include/paths.h (_PATH_CMDEXE): Macro removed.
* winsup/cygwin/spawn.cc (av::setup): Use COMSPEC environment
variable instead of hard-coded path. If missing, bail with
errno set to EOPNOTSUPP.
* winsup/cygwin/syscalls.cc (system): Use COMSPEC environment
variable. If missing, return -1.
(getusershell): Eliminate static array of shell names. If
shell_index is zero, return value of COMSPEC env var,
if it exists, and increment shell_index to 1.
(popen): Use COMSPEC and if that is missing, set errno to
EOPNOTSUPP and return NULL.
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 87cfb3a69..ec0272739 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -1178,7 +1178,10 @@ av::setup (const char *prog_arg, path_conv& real_path, const char *ext, } if (ascii_strcasematch (ext, ".com")) break; - pgm = (char *) _PATH_CMDEXE; + if ((pgm = getenv("COMSPEC")) == NULL) { + set_errno (EOPNOTSUPP); + return -1; + } arg1 = NULL; } |