user32: Cope with null LPMENUITEMINFO in SetMenuItemInfo
Bruno Jesus
00cpxxx at gmail.com
Sat Jan 18 08:59:01 CST 2014
Fixes bug http://bugs.winehq.org/show_bug.cgi?id=20493
-------------- next part --------------
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 50545ee..bbaa5f3 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -4795,8 +4795,8 @@ static BOOL MENU_NormalizeMenuItemInfoStruct( const MENUITEMINFOW *pmii_in,
MENUITEMINFOW *pmii_out )
{
/* do we recognize the size? */
- if( pmii_in->cbSize != sizeof( MENUITEMINFOW) &&
- pmii_in->cbSize != sizeof( MENUITEMINFOW) - sizeof( pmii_in->hbmpItem)) {
+ if( !pmii_in || (pmii_in->cbSize != sizeof( MENUITEMINFOW) &&
+ pmii_in->cbSize != sizeof( MENUITEMINFOW) - sizeof( pmii_in->hbmpItem)) ) {
SetLastError( ERROR_INVALID_PARAMETER);
return FALSE;
}
diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c
index 20126d4..d02eb91 100644
--- a/dlls/user32/tests/menu.c
+++ b/dlls/user32/tests/menu.c
@@ -948,6 +948,19 @@ static void test_menu_add_string( void )
ok (!lstrcmpW( strbackW, expectedString ), "Menu text from Unicode version incorrect\n");
}
+ /* Just try some invalid parameter tests */
+ SetLastError(0xdeadbeef);
+ rc = SetMenuItemInfoA( hmenu, 0, TRUE, NULL );
+ ret = GetLastError();
+ ok (!rc, "SetMenuItemInfoA succeeded unexpectedly\n");
+ ok (ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret);
+
+ SetLastError(0xdeadbeef);
+ rc = SetMenuItemInfoA( hmenu, 0, FALSE, NULL );
+ ret = GetLastError();
+ ok (!rc, "SetMenuItemInfoA succeeded unexpectedly\n");
+ ok (ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret);
+
/* Just change ftype to string and see what text is stored */
memset(&info, 0x00, sizeof(info));
info.cbSize= sizeof(MENUITEMINFOA);
More information about the wine-patches
mailing list