diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 3f199f918..ebf7b32cd 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +2001-11-17 Nick Duffek + + * path.cc (conv_path_list): Copy source paths before modifying them. + 2001-11-17 Corinna Vinschen * fhandler_raw.cc (fhandler_dev_raw::clear): Don't reset unit. diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 41ea4d4ec..f724a47e6 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1234,17 +1234,22 @@ conv_path_list (const char *src, char *dst, int to_posix_p) int (*conv_fn) (const char *, char *) = (to_posix_p ? cygwin_conv_to_posix_path : cygwin_conv_to_win32_path); + char srcbuf[MAX_PATH]; + int len; do { s = strchr (src, src_delim); if (s) { - *s = 0; - (*conv_fn) (src[0] != 0 ? src : ".", d); + len = s - src; + if (len >= MAX_PATH) + len = MAX_PATH - 1; + memcpy (srcbuf, src, len); + srcbuf[len] = 0; + (*conv_fn) (len ? srcbuf : ".", d); d += strlen (d); *d++ = dst_delim; - *s = src_delim; src = s + 1; } else