Piotr Caban : msvcrt: Fix parameter validation in _stat64 function.

Alexandre Julliard julliard at winehq.org
Mon Aug 26 13:21:57 CDT 2013


Module: wine
Branch: master
Commit: 024ece50e8a42b62800f899343b8330b5d831e61
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=024ece50e8a42b62800f899343b8330b5d831e61

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Aug 26 13:29:27 2013 +0200

msvcrt: Fix parameter validation in _stat64 function.

---

 dlls/msvcrt/file.c       |    6 ++++--
 dlls/msvcrt/tests/file.c |   10 ++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 0054222..1594c33 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -2684,7 +2684,8 @@ int CDECL MSVCRT_stat64(const char* path, struct MSVCRT__stat64 * buf)
   while (plen && path[plen-1]==' ')
     plen--;
 
-  if (plen && (path[plen-1]=='\\' || path[plen-1]=='/'))
+  if (plen && (plen<2 || path[plen-2]!=':') &&
+          (path[plen-1]==':' || path[plen-1]=='\\' || path[plen-1]=='/'))
   {
     *MSVCRT__errno() = MSVCRT_ENOENT;
     return -1;
@@ -2784,7 +2785,8 @@ int CDECL MSVCRT__wstat64(const MSVCRT_wchar_t* path, struct MSVCRT__stat64 * bu
   while (plen && path[plen-1]==' ')
     plen--;
 
-  if(plen && (path[plen-1]=='\\' || path[plen-1]=='/'))
+  if(plen && (plen<2 || path[plen-2]!=':') &&
+          (path[plen-1]==':' || path[plen-1]=='\\' || path[plen-1]=='/'))
   {
     *MSVCRT__errno() = MSVCRT_ENOENT;
     return -1;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 7a3253a..2d2399a 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -1907,6 +1907,16 @@ static void test_stat(void)
     }
     else
         skip("mkdir failed with errno %d\n", errno);
+
+    errno = 0xdeadbeef;
+    ret = stat("c:", &buf);
+    ok(ret == -1, "stat returned %d\n", ret);
+    ok(errno == ENOENT, "errno = %d\n", errno);
+
+    ret = stat("c:/", &buf);
+    ok(!ret, "stat returned %d\n", ret);
+    ok(buf.st_dev == 2, "st_dev = %d\n", buf.st_dev);
+    ok(buf.st_rdev == 2, "st_rdev = %d\n", buf.st_rdev);
 }
 
 static const char* pipe_string="Hello world";




More information about the wine-cvs mailing list