From 9cffed782fd447445d4de21394815bf944e507f1 Mon Sep 17 00:00:00 2001 From: Christian Faure Date: Sat, 16 May 2015 16:52:18 +0300 Subject: [PATCH] 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 bcdcdbadf62..bf4ace57fca 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 e2ec1528aa7..9920dfc486c 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++) -- 2.11.4.GIT