The issue here is that TCITEM is not enough to hold lparam over sizeof(LPARAM).
From: Bernhard Übelacker bernhardu@mailbox.org
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/tab.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-)
diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c index 2e6767a06d5..68f5f8129fc 100644 --- a/dlls/comctl32/tests/tab.c +++ b/dlls/comctl32/tests/tab.c @@ -1379,9 +1379,12 @@ static void test_TCM_SETITEMEXTRA(void)
static void test_TCS_OWNERDRAWFIXED(void) { - LPARAM lparam; - ULONG_PTR itemdata, itemdata2; - TCITEMA item; + struct + { + TCITEMHEADERA h; + BYTE lparam[sizeof(LPARAM)+1]; + } item; + ULONG_PTR itemdata; HWND hTab; BOOL ret;
@@ -1390,11 +1393,8 @@ static void test_TCS_OWNERDRAWFIXED(void)
ok(GetParent(hTab) == NULL, "got %p, expected null parent\n", GetParent(hTab));
- /* set some item data */ - memset(&lparam, 0xde, sizeof(LPARAM)); - - item.mask = TCIF_PARAM; - item.lParam = lparam; + item.h.mask = TCIF_PARAM; + memset(item.lparam, 0xde, sizeof(LPARAM)); ret = SendMessageA(hTab, TCM_SETITEMA, 0, (LPARAM)&item); ok(ret == TRUE, "got %d\n", ret);
@@ -1423,9 +1423,8 @@ static void test_TCS_OWNERDRAWFIXED(void) ok(ret == TRUE, "got %d\n", ret);
/* set some item data */ - memset(&lparam, 0xde, sizeof(LPARAM)); - item.mask = TCIF_PARAM; - item.lParam = lparam; + item.h.mask = TCIF_PARAM; + memset(item.lparam, 0xde, sizeof(item.lparam));
ret = SendMessageA(hTab, TCM_INSERTITEMA, 0, (LPARAM)&item); ok(ret == 0, "got %d\n", ret); @@ -1453,9 +1452,8 @@ static void test_TCS_OWNERDRAWFIXED(void) ret = SendMessageA(hTab, TCM_SETITEMEXTRA, sizeof(LPARAM)-1, 0); ok(ret == TRUE, "got %d\n", ret);
- memset(&lparam, 0xde, sizeof(lparam)); - item.mask = TCIF_PARAM; - item.lParam = lparam; + item.h.mask = TCIF_PARAM; + memset(item.lparam, 0xde, sizeof(LPARAM));
ret = SendMessageA(hTab, TCM_INSERTITEMA, 0, (LPARAM)&item); ok(ret == 0, "got %d\n", ret); @@ -1465,11 +1463,9 @@ static void test_TCS_OWNERDRAWFIXED(void) ShowWindow(hTab, SW_SHOW); RedrawWindow(hTab, NULL, 0, RDW_UPDATENOW);
- itemdata = itemdata2 = 0; + itemdata = 0; memset(&itemdata, 0xde, 4); - memset(&itemdata2, 0xde, sizeof(LPARAM)-1); - ok(g_drawitem.itemData == itemdata || broken(g_drawitem.itemData == itemdata2) /* win98 */, - "got 0x%Ix, expected 0x%Ix\n", g_drawitem.itemData, itemdata); + ok(g_drawitem.itemData == itemdata, "got 0x%Ix, expected 0x%Ix\n", g_drawitem.itemData, itemdata);
DestroyWindow(hTab); }
This merge request was approved by Nikolay Sivov.