summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--win32/win32.c9
2 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index ff5bfd0d9b..334fffdbe2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 14 16:03:31 2012 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (check_valid_dir): reject "..." as directory name.
+ [Bug #6851]
+
Tue Aug 14 16:02:51 2012 NAKAMURA Usaku <usa@ruby-lang.org>
* test/ruby/test_file_exhaustive.rb
diff --git a/win32/win32.c b/win32/win32.c
index de655df8b3..7eaf1fc788 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -4556,11 +4556,18 @@ check_valid_dir(const WCHAR *path)
HANDLE fh;
WCHAR full[MAX_PATH];
WCHAR *dmy;
+ WCHAR *p, *q;
/* GetFileAttributes() determines "..." as directory. */
/* We recheck it by FindFirstFile(). */
- if (wcsstr(path, L"...") == NULL)
+ if (!(p = wcsstr(path, L"...")))
return 0;
+ q = p + wcsspn(p, L".");
+ if ((p == path || wcschr(L":/\\", *(p - 1))) &&
+ (!*q || wcschr(L":/\\", *q))) {
+ errno = ENOENT;
+ return -1;
+ }
/* if the specified path is the root of a drive and the drive is empty, */
/* FindFirstFile() returns INVALID_HANDLE_VALUE. */