From: cgf Date: Fri, 29 May 2009 20:18:49 +0000 (+0000) Subject: * path.cc (cwdstuff::set): Rewrite previous change to properly test the end of X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e92d8b000162da34fdedab6d2be61c46a2cee05f;p=pf3gnuchains%2Fpf3gnuchains3x.git * path.cc (cwdstuff::set): Rewrite previous change to properly test the end of the buffer. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index a892c02074..ecac502c78 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2009-05-29 Christopher Faylor + + * path.cc (cwdstuff::set): Rewrite previous change to properly test the + end of the buffer. + 2009-05-28 Christopher Faylor * path.cc (cwdstuff::set): Avoid removing a nonexistent trailing slash. diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index d3af3bcc1a..dd281c0e4d 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -3180,10 +3180,13 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit) pdir->Length + 2); RtlCopyUnicodeString (&win32, pdir); RtlReleasePebLock (); + + PWSTR eoBuffer = win32.Buffer + (win32.Length / sizeof (WCHAR)); /* Remove trailing slash if one exists. FIXME: Is there a better way to do this? */ - if (win32.Length > 3 * sizeof (WCHAR) && win32.Buffer[win32.Length - 1] == L'\\') + if ((eoBuffer - win32.Buffer) > 3 && eoBuffer[-1] == L'\\') win32.Length -= sizeof (WCHAR); + posix_cwd = NULL; } else @@ -3198,10 +3201,14 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit) upath.Buffer[0] = L'\\'; upath.Length = len * sizeof (WCHAR); } - /* Remove trailing slash if one exists. FIXME: Is there a better way to - do this? */ - else if (upath.Length > 3 * sizeof (WCHAR) && upath.Buffer[upath.Length] == L'\\') - upath.Length -= sizeof (WCHAR); + else + { + PWSTR eoBuffer = upath.Buffer + (upath.Length / sizeof (WCHAR)); + /* Remove trailing slash if one exists. FIXME: Is there a better way to + do this? */ + if ((eoBuffer - upath.Buffer) > 3 && eoBuffer[-1] == L'\\') + upath.Length -= sizeof (WCHAR); + } RtlInitEmptyUnicodeString (&win32, (PWCHAR) crealloc_abort (win32.Buffer, upath.Length + 2),