One of the third party Windows software that we support is crashing
when clicking on a popup menu that has separators. The author of the
software send us a snippet of his code. It looks something like this:
MENUITEMINFO mi;
ZeroMemory(&mi, sizeof(mi));
mi.cbSize = sizeof(mi);
mi.fType = MFT_SEPARATOR;
InsertMenuItem(hMenu, index++, TRUE, &mi);
The problem is obviously that mi.fMask does not have the MIIM_TYPE bit
set. This code "works" on Windows; it draws a separator like the
programmer intended, but not like the API would suggest this should
work. I'm not sure what should be wine's behavior, but I don't think
it should crash.
The crash in wine happens when MENU_InitTracking calls MENU_ShowPopup,
which in turn calls MENU_CalcItemSize:
trace:menu:MENU_CalcItemSize dc=0x11ac owner=0x10025 (3,56)
trace:menu:do_debug_print_menuitem MENU_CalcItemSize: menuitem: {
ID=0x4, State=grey, Text=L"Save Preset As..." }
trace:menu:MENU_CalcItemSize (3,56)-(148,74)
trace:menu:MENU_CalcItemSize dc=0x11ac owner=0x10025 (3,74)
trace:menu:do_debug_print_menuitem MENU_CalcItemSize: menuitem: {
ID=0x0, Text=Null }
wine: Unhandled exception (thread 0009), starting debugger...
...
Unhandled exception: page fault on read access to 0x00000000 in 32-bit
code (0x40de985c).
...
0x40de985c (MENU_CalcItemSize+0x13c [menu.c] in USER32.DLL): repne
scasw^I%es:(%edi)
Earlier, I get this trace:
trace:menu:do_debug_print_menuitem MENU_SetItemInfo_common from: {
ID=0x0, Text=Null }
trace:menu:do_debug_print_menuitem SetMenuItemInfo_common to : {
ID=0x4, State=grey, Text=L"Save Preset As..." }
trace:menu:do_debug_print_menuitem MENU_SetItemInfo_common from: {
ID=0x0, Text=Null }
trace:menu:do_debug_print_menuitem SetMenuItemInfo_common to : {
ID=0x0, Text=Null }
I don't understand how this "from" and "to" works, but the ID of the
menu item after "Save Preset As..." should be 0x5.
I have a wine version from 2004-04-08. The author of the Windows
software will fix the problem in his code and that should stop the
crash, but maybe someone should fix this in wine too.
Thanks,
Dan Timis
Muse Research, Inc.