Hi,
Debugging a crash in IE in the menus, I traced it to this check in SetMenuItemInfoA, apparently trying to stop apps passing in bad data.
if ((lpmii->fType & (MF_HILITE|MF_POPUP)) || (lpmii->fState)) { /* QuickTime does pass invalid data into SetMenuItemInfo. * do some of the checks Windows does. */ WARN("Bad masks for type (0x%08x) or state (0x%08x)\n", lpmii->fType,lpmii->fState ); return FALSE; }
In particular, it seems to check for a couple of bits set that aren't by IE, this is the function trace in Windows:
SetMenuItemInfoW( 0x000B032B 0 TRUE [0x0013E070] -> 44 , MIIM_ID | MIIM_SUBMENU , MFT_BITMAP | MFT_RIGHTORDER , MFS_CHECKED , 3169 , NULL , 0x003C7FC8 , 0x40000064 , 0x003C806C , NULL , 2012758772 , 0x003B0000 ) -> TRUE
So as you can see it sets MFT_BITMAP, MFT_RIGHTORDER and MFT_CHECKED, but not HILITE or POPUP.
This is where I got stuck. I can't see what this check should actually be, but it's clearly incomplete at the moment, as Windows doesn't return false with this input.
Has anybody got any advice? thanks -mike