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:
authorChristopher Faylor <me@cgf.cx>2009-05-30 00:18:50 +0400
committerChristopher Faylor <me@cgf.cx>2009-05-30 00:18:50 +0400
commit992ddba94920e6214cb91f2a5a862ed9019e1878 (patch)
tree3cd2c6d2f5cb1905f81edf0481ccc8c6d68db608
parentdc3c8b01f61b5667d20225af9824f00372f641da (diff)
* path.cc (cwdstuff::set): Rewrite previous change to properly test the end of
the buffer.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/path.cc17
2 files changed, 17 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index a892c0207..ecac502c7 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-29 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * path.cc (cwdstuff::set): Rewrite previous change to properly test the
+ end of the buffer.
+
2009-05-28 Christopher Faylor <me+cygwin@cgf.cx>
* path.cc (cwdstuff::set): Avoid removing a nonexistent trailing slash.
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index d3af3bcc1..dd281c0e4 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),