Christian Faure : kernel32: Fix a crash in GetStringTypeW() on NULL input string.

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 18 07:57:33 CDT 2015


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

Author: Christian Faure <christian.faurebouvard at gmail.com>
Date:   Sat May 16 16:52:18 2015 +0300

kernel32: Fix a crash in GetStringTypeW() on NULL input string.

---

 dlls/kernel32/locale.c       |  6 ++++++
 dlls/kernel32/tests/locale.c | 17 +++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index bcdcdba..bf4ace5 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -2732,6 +2732,12 @@ BOOL WINAPI GetStringTypeW( DWORD type, LPCWSTR src, INT count, LPWORD chartype
         C2_OTHERNEUTRAL        /* LRE, LRO, RLE, RLO, PDF */
     };
 
+    if (!src)
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return FALSE;
+    }
+
     if (count == -1) count = strlenW(src) + 1;
     switch(type)
     {
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index e2ec152..9920dfc 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -3582,9 +3582,26 @@ static void test_GetStringTypeW(void)
     static const WCHAR space_special[] = {0x09, 0x0d, 0x85};
 
     WORD types[20];
+    BOOL ret;
     WCHAR ch;
     int i;
 
+    /* NULL src */
+    SetLastError(0xdeadbeef);
+    ret = GetStringTypeW(CT_CTYPE1, NULL, 0, NULL);
+    ok(!ret, "got %d\n", ret);
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = GetStringTypeW(CT_CTYPE1, NULL, 0, types);
+    ok(!ret, "got %d\n", ret);
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = GetStringTypeW(CT_CTYPE1, NULL, 5, types);
+    ok(!ret, "got %d\n", ret);
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %d\n", GetLastError());
+
     memset(types,0,sizeof(types));
     GetStringTypeW(CT_CTYPE1, blanks, 5, types);
     for (i = 0; i < 5; i++)




More information about the wine-cvs mailing list