Module: wine Branch: master Commit: 375f60b07af4fec5d16bb5534f52379b61811053 URL: http://source.winehq.org/git/wine.git/?a=commit;h=375f60b07af4fec5d16bb5534f...
Author: Lei Zhang thestig@google.com Date: Tue Mar 11 22:27:35 2008 -0700
comctl32: Add tests for TB_GETSTRING, fix NULL pointer access.
---
dlls/comctl32/tests/toolbar.c | 35 +++++++++++++++++++++++++++++++++++ dlls/comctl32/toolbar.c | 7 +++++-- 2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c index b094a4b..38f14f6 100644 --- a/dlls/comctl32/tests/toolbar.c +++ b/dlls/comctl32/tests/toolbar.c @@ -40,6 +40,8 @@ static BOOL g_fExpectedHotItemOld; static BOOL g_fExpectedHotItemNew; static DWORD g_dwExpectedDispInfoMask;
+#define expect(EXPECTED,GOT) ok((GOT)==(EXPECTED), "Expected %d, got %d\n", (EXPECTED), (GOT)) + #define check_rect(name, val, exp) ok(val.top == exp.top && val.bottom == exp.bottom && \ val.left == exp.left && val.right == exp.right, "invalid rect (" name ") (%d,%d) (%d,%d) - expected (%d,%d) (%d,%d)\n", \ val.left, val.top, val.right, val.bottom, exp.left, exp.top, exp.right, exp.bottom); @@ -1088,6 +1090,38 @@ static void test_setrows(void) DestroyWindow(hToolbar); }
+static void test_getstring(void) +{ + HWND hToolbar = NULL; + char str[10]; + WCHAR strW[10]; + static const char answer[] = "STR"; + static const WCHAR answerW[] = { 'S','T','R',0 }; + INT r; + + hToolbar = CreateWindowExA(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMainWnd, (HMENU)5, GetModuleHandle(NULL), NULL); + ok(hToolbar != NULL, "Toolbar creation problem\n"); + + r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(0, 0), (LPARAM)NULL); + expect(-1, r); + r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(0, 0), (LPARAM)NULL); + expect(-1, r); + r = SendMessage(hToolbar, TB_ADDSTRING, 0, (LPARAM)answer); + expect(0, r); + r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(0, 0), (LPARAM)NULL); + todo_wine expect(strlen(answer), r); + r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(0, 0), (LPARAM)NULL); + todo_wine expect(strlen(answer), r); + r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(sizeof(str), 0), (LPARAM)str); + todo_wine expect(strlen(answer), r); + expect(0, lstrcmp(answer, str)); + r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(sizeof(strW), 0), (LPARAM)strW); + todo_wine expect(strlen(answer), r); + expect(0, lstrcmpW(answerW, strW)); + + DestroyWindow(hToolbar); +} + START_TEST(toolbar) { WNDCLASSA wc; @@ -1122,6 +1156,7 @@ START_TEST(toolbar) test_createtoolbarex(); test_dispinfo(); test_setrows(); + test_getstring();
PostQuitMessage(0); while(GetMessageA(&msg,0,0,0)) { diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index b14b7a7..742e6e7 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -5211,8 +5211,11 @@ TOOLBAR_GetStringW (HWND hwnd, WPARAM wParam, LPARAM lParam) { len = min(len, strlenW(infoPtr->strings[iString])); ret = (len+1)*sizeof(WCHAR); - memcpy(str, infoPtr->strings[iString], ret); - str[len] = '\0'; + if (str) + { + memcpy(str, infoPtr->strings[iString], ret); + str[len] = '\0'; + }
TRACE("returning %s\n", debugstr_w(str)); }