diff --git a/ChangeLog b/ChangeLog index a2c338ce8c..704ce57498 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon May 26 17:23:49 2008 NAKAMURA Usaku + + * file.c (file_expand_path): add more space for '/'. + + * file.c (file_expand_path): should reset address of p after calling + rb_str_resize(). [ruby-dev:34800] + Mon May 26 16:49:55 2008 Yukihiro Matsumoto * misc/ruby-mode.el (ruby-mode): use run-hooks if run-mode-hook is diff --git a/file.c b/file.c index d5f39c7979..86e51c871a 100644 --- a/file.c +++ b/file.c @@ -2730,8 +2730,10 @@ file_expand_path(VALUE fname, VALUE dname, VALUE result) } if (p > buf && p[-1] == '/') --p; - else + else { + BUFCHECK(bdiff >= ++buflen); *p = '/'; + } p[1] = 0; root = skipprefix(buf); @@ -2864,6 +2866,7 @@ file_expand_path(VALUE fname, VALUE dname, VALUE result) #endif HANDLE h = FindFirstFile(b, &wfd); if (h != INVALID_HANDLE_VALUE) { + long bdiff; FindClose(h); p = strrdirsep(buf); len = strlen(wfd.cFileName); @@ -2875,7 +2878,9 @@ file_expand_path(VALUE fname, VALUE dname, VALUE result) #endif if (!p) p = buf; buflen = ++p - buf + len; + bdiff = p - buf; rb_str_resize(result, buflen); + p = RSTRING_PTR(result) + bdiff; memcpy(p, wfd.cFileName, len + 1); } }