* path.cc (cwdstuff::set): Make sure drive_length is 0 for virtual
paths. Add comments. * spawn.cc (spawn_guts): Don't allow to start a native Win32 application from a long path or a virtual path. Print an error message to stderr.
This commit is contained in:
parent
becf251f67
commit
6c968f611b
|
@ -1,3 +1,10 @@
|
||||||
|
2008-03-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* path.cc (cwdstuff::set): Make sure drive_length is 0 for virtual
|
||||||
|
paths. Add comments.
|
||||||
|
* spawn.cc (spawn_guts): Don't allow to start a native Win32 application
|
||||||
|
from a long path or a virtual path. Print an error message to stderr.
|
||||||
|
|
||||||
2008-03-11 Corinna Vinschen <corinna@vinschen.de>
|
2008-03-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* environ.cc (parse_options): Use tmp_pathbuf to allocate buffer.
|
* environ.cc (parse_options): Use tmp_pathbuf to allocate buffer.
|
||||||
|
|
|
@ -4630,9 +4630,11 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
|
||||||
}
|
}
|
||||||
/* Make sure it's NUL-termniated. */
|
/* Make sure it's NUL-termniated. */
|
||||||
win32.Buffer[win32.Length / sizeof (WCHAR)] = L'\0';
|
win32.Buffer[win32.Length / sizeof (WCHAR)] = L'\0';
|
||||||
if (win32.Buffer[1] == L':')
|
if (!doit) /* Virtual path */
|
||||||
|
drive_length = 0;
|
||||||
|
else if (win32.Buffer[1] == L':') /* X: */
|
||||||
drive_length = 2;
|
drive_length = 2;
|
||||||
else if (win32.Buffer[1] == L'\\')
|
else if (win32.Buffer[1] == L'\\') /* UNC path */
|
||||||
{
|
{
|
||||||
PWCHAR ptr = wcschr (win32.Buffer + 2, L'\\');
|
PWCHAR ptr = wcschr (win32.Buffer + 2, L'\\');
|
||||||
if (ptr)
|
if (ptr)
|
||||||
|
@ -4642,7 +4644,7 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
|
||||||
else
|
else
|
||||||
drive_length = win32.Length / sizeof (WCHAR);
|
drive_length = win32.Length / sizeof (WCHAR);
|
||||||
}
|
}
|
||||||
else
|
else /* Shouldn't happen */
|
||||||
drive_length = 0;
|
drive_length = 0;
|
||||||
|
|
||||||
tmp_pathbuf tp;
|
tmp_pathbuf tp;
|
||||||
|
|
|
@ -361,6 +361,21 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
||||||
|
|
||||||
wascygexec = real_path.iscygexec ();
|
wascygexec = real_path.iscygexec ();
|
||||||
res = newargv.fixup (prog_arg, real_path, ext);
|
res = newargv.fixup (prog_arg, real_path, ext);
|
||||||
|
|
||||||
|
if (!real_path.iscygexec ()
|
||||||
|
&& (cygheap->cwd.drive_length == 0
|
||||||
|
|| cygheap->cwd.win32.Length >= MAX_PATH * sizeof (WCHAR)))
|
||||||
|
{
|
||||||
|
small_printf ("Error: Current working directory is a %s.\n"
|
||||||
|
"Can't start native Windows application from here.\n\n",
|
||||||
|
cygheap->cwd.drive_length == 0
|
||||||
|
? "virtual Cygwin directory"
|
||||||
|
: "path longer than allowed for a\n"
|
||||||
|
"Win32 working directory");
|
||||||
|
set_errno (ENAMETOOLONG);
|
||||||
|
res = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
Loading…
Reference in New Issue