Module: wine Branch: master Commit: ebe35f6f0a629b49524aa03eebbbdac7e948f387 URL: https://gitlab.winehq.org/wine/wine/-/commit/ebe35f6f0a629b49524aa03eebbbdac...
Author: Piotr Caban piotr@codeweavers.com Date: Mon Sep 26 17:23:21 2022 +0200
comctl32: Add support for adding extra data in CreatePropertySheetPage.
---
dlls/comctl32/propsheet.c | 9 +++++---- dlls/comctl32/tests/propsheet.c | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index 10361d280e1..43192771300 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -103,6 +103,7 @@ struct _PSP { PROPSHEETPAGEA pspA; PROPSHEETPAGEW pspW; + BYTE data[1]; }; };
@@ -3076,10 +3077,10 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA( if (lpPropSheetPage->dwSize < PROPSHEETPAGEA_V1_SIZE) return NULL;
- ret = Alloc(sizeof(*ret)); + ret = Alloc(FIELD_OFFSET(struct _PSP, data[lpPropSheetPage->dwSize])); ret->magic = HPROPSHEETPAGE_MAGIC; ppsp = &ret->pspA; - memcpy(ppsp, lpPropSheetPage, min(lpPropSheetPage->dwSize, sizeof(PROPSHEETPAGEA))); + memcpy(ppsp, lpPropSheetPage, lpPropSheetPage->dwSize);
if ( !(ppsp->dwFlags & PSP_DLGINDIRECT) ) { @@ -3131,11 +3132,11 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage if (lpPropSheetPage->dwSize < PROPSHEETPAGEW_V1_SIZE) return NULL;
- ret = Alloc(sizeof(*ret)); + ret = Alloc(FIELD_OFFSET(struct _PSP, data[lpPropSheetPage->dwSize])); ret->magic = HPROPSHEETPAGE_MAGIC; ret->unicode = TRUE; ppsp = &ret->pspW; - memcpy(ppsp, lpPropSheetPage, min(lpPropSheetPage->dwSize, sizeof(PROPSHEETPAGEW))); + memcpy(ppsp, lpPropSheetPage, lpPropSheetPage->dwSize);
if ( !(ppsp->dwFlags & PSP_DLGINDIRECT) ) { diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c index 70f46c83d85..7c0d5f81642 100644 --- a/dlls/comctl32/tests/propsheet.c +++ b/dlls/comctl32/tests/propsheet.c @@ -1058,7 +1058,7 @@ static UINT CALLBACK proppage_callback_a(HWND hwnd, UINT msg, PROPSHEETPAGEA *ps if (psp->dwSize >= FIELD_OFFSET(struct custom_proppage, addref_called)) { struct custom_proppage *extra_data = (struct custom_proppage *)psp; - todo_wine ok(extra_data->extra_data == 0x1234, "Expected extra_data to be preserved, got %lx\n", + ok(extra_data->extra_data == 0x1234, "Expected extra_data to be preserved, got %lx\n", extra_data->extra_data); }
@@ -1092,7 +1092,7 @@ static UINT CALLBACK proppage_callback_w(HWND hwnd, UINT msg, PROPSHEETPAGEW *ps if (psp->dwSize >= FIELD_OFFSET(struct custom_proppage, addref_called)) { struct custom_proppage *extra_data = (struct custom_proppage *)psp; - todo_wine ok(extra_data->extra_data == 0x4321, "Expected extra_data to be preserved, got %lx\n", + ok(extra_data->extra_data == 0x4321, "Expected extra_data to be preserved, got %lx\n", extra_data->extra_data); }