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
--
Mike Hearn <m.hearn(a)signal.qinetiq.com>
QinetiQ - Malvern Technology Center