Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-06-22 19:40:59 +0400
committerCorinna Vinschen <corinna@vinschen.de>2009-06-22 19:40:59 +0400
commitd6bb3f330dfc6c522531f1e227184feb31425a77 (patch)
treee1bbfb0c46df97738572ef0b50b0933383d9b51f
parente20afc07b08dc461fcaf71caa4cd1eda99af44bc (diff)
* spawn.cc (spawn_guts): Don't run additional check for Win32
incompatible CWD if newargv.fixup bailed out already. (av::fixup): Check shell scripts for executability.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/spawn.cc11
2 files changed, 14 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 3bee988c1..ea3ab2ade 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-22 Corinna Vinschen <corinna@vinschen.de>
+
+ * spawn.cc (spawn_guts): Don't run additional check for Win32
+ incompatible CWD if newargv.fixup bailed out already.
+ (av::fixup): Check shell scripts for executability.
+
2009-06-18 Corinna Vinschen <corinna@vinschen.de>
* path.cc (chdir): Check error conditions first.
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index a95727880..be3c66a6a 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -357,6 +357,9 @@ spawn_guts (const char *prog_arg, const char *const *argv,
wascygexec = real_path.iscygexec ();
res = newargv.fixup (prog_arg, real_path, ext);
+ if (res)
+ goto out;
+
if (!real_path.iscygexec ()
&& (cygheap->cwd.drive_length == 0
|| cygheap->cwd.win32.Length >= MAX_PATH * sizeof (WCHAR)))
@@ -372,9 +375,6 @@ spawn_guts (const char *prog_arg, const char *const *argv,
goto out;
}
- if (res)
- goto out;
-
if (ac == 3 && argv[1][0] == '/' && argv[1][1] == 'c' &&
(iscmd (argv[0], "command.com") || iscmd (argv[0], "cmd.exe")))
{
@@ -1078,6 +1078,11 @@ just_shell:
arg1 = NULL;
}
+ /* Check if script is executable. Otherwise we start non-executable
+ scripts successfully, which is incorrect behaviour. */
+ if (check_file_access (real_path, X_OK) < 0)
+ return -1; /* errno is already set. */
+
/* Replace argv[0] with the full path to the script if this is the
first time through the loop. */
replace0_maybe (prog_arg);