Module: wine Branch: master Commit: a3aa217f030cbc77614c56948615fdba1624fbdc URL: http://source.winehq.org/git/wine.git/?a=commit;h=a3aa217f030cbc77614c569486...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Mar 1 22:47:20 2017 +0300
comctl32/propsheet: Enforce minimal PROPSHEETPAGE structure size when creating a page.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/comctl32/propsheet.c | 12 ++++++++++-- dlls/comctl32/tests/propsheet.c | 2 -- 2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index a3a6a5c..88a44cd 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -2957,8 +2957,12 @@ static LPWSTR load_string( HINSTANCE instance, LPCWSTR str ) HPROPSHEETPAGE WINAPI CreatePropertySheetPageA( LPCPROPSHEETPAGEA lpPropSheetPage) { - PROPSHEETPAGEW* ppsp = Alloc(sizeof(PROPSHEETPAGEW)); + PROPSHEETPAGEW *ppsp;
+ if (lpPropSheetPage->dwSize < PROPSHEETPAGEA_V1_SIZE) + return NULL; + + ppsp = Alloc(sizeof(PROPSHEETPAGEW)); memcpy(ppsp,lpPropSheetPage,min(lpPropSheetPage->dwSize,sizeof(PROPSHEETPAGEA)));
ppsp->dwFlags &= ~ PSP_INTERNAL_UNICODE; @@ -3023,8 +3027,12 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA( */ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage) { - PROPSHEETPAGEW* ppsp = Alloc(sizeof(PROPSHEETPAGEW)); + PROPSHEETPAGEW *ppsp; + + if (lpPropSheetPage->dwSize < PROPSHEETPAGEW_V1_SIZE) + return NULL;
+ ppsp = Alloc(sizeof(PROPSHEETPAGEW)); memcpy(ppsp,lpPropSheetPage,min(lpPropSheetPage->dwSize,sizeof(PROPSHEETPAGEW)));
ppsp->dwFlags |= PSP_INTERNAL_UNICODE; diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c index 0b1c45c..8a4e6d1 100644 --- a/dlls/comctl32/tests/propsheet.c +++ b/dlls/comctl32/tests/propsheet.c @@ -1076,7 +1076,6 @@ static void test_CreatePropertySheetPage(void) hpsp = CreatePropertySheetPageA(&page.u.pageA);
if (page.u.pageA.dwSize < PROPSHEETPAGEA_V1_SIZE) - todo_wine ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageA.dwSize); else { @@ -1108,7 +1107,6 @@ static void test_CreatePropertySheetPage(void) hpsp = CreatePropertySheetPageW(&page.u.pageW);
if (page.u.pageW.dwSize < PROPSHEETPAGEW_V1_SIZE) - todo_wine ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageW.dwSize); else {