Module: wine Branch: master Commit: 9cffed782fd447445d4de21394815bf944e507f1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9cffed782fd447445d4de21394...
Author: Christian Faure christian.faurebouvard@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++)