Module: wine Branch: master Commit: aaed0e81d51678cbb43cdd4c1b774eaf1e4be71b URL: http://source.winehq.org/git/wine.git/?a=commit;h=aaed0e81d51678cbb43cdd4c1b...
Author: Tatyana Fokina tatyana@etersoft.ru Date: Tue Jun 11 17:41:16 2013 +0400
kernel32: Check the size of the string in CompareStringA.
---
dlls/kernel32/locale.c | 6 +++--- dlls/kernel32/tests/locale.c | 1 - 2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index 86720ff..9ddf078 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -2979,7 +2979,7 @@ INT WINAPI CompareStringA(LCID lcid, DWORD flags, WCHAR *buf1W = NtCurrentTeb()->StaticUnicodeBuffer; WCHAR *buf2W = buf1W + 130; LPWSTR str1W, str2W; - INT len1W, len2W, ret; + INT len1W = 0, len2W = 0, ret; UINT locale_cp = CP_ACP;
if (!str1 || !str2) @@ -2994,7 +2994,7 @@ INT WINAPI CompareStringA(LCID lcid, DWORD flags,
if (len1) { - len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, buf1W, 130); + if (len1 <= 130) len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, buf1W, 130); if (len1W) str1W = buf1W; else @@ -3017,7 +3017,7 @@ INT WINAPI CompareStringA(LCID lcid, DWORD flags,
if (len2) { - len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, buf2W, 130); + if (len2 <= 130) len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, buf2W, 130); if (len2W) str2W = buf2W; else diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index b6198d1..772d13b 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -1466,7 +1466,6 @@ static void test_CompareStringA(void) memset(a, 'a', sizeof(a)); SetLastError(0xdeadbeef); ret = CompareStringA(lcid, 0, a, sizeof(a), a, sizeof(a)); - todo_wine ok (GetLastError() == 0xdeadbeef && ret == CSTR_EQUAL, "ret %d, error %d, expected value %d\n", ret, GetLastError(), CSTR_EQUAL); }