[WIN32K:NTUSER] Handle realloc failure in IntRemoveMenuItem. CORE-14222

This commit is contained in:
Thomas Faber 2018-02-01 11:06:50 +01:00
parent c464f4f2e3
commit de455c4d50
No known key found for this signature in database
GPG key ID: 076E7C3D44720826

View file

@ -598,6 +598,7 @@ BOOL FASTCALL
IntRemoveMenuItem( PMENU pMenu, UINT nPos, UINT wFlags, BOOL bRecurse )
{
PITEM item;
PITEM newItems;
TRACE("(menu=%p pos=%04x flags=%04x)\n",pMenu, nPos, wFlags);
if (!(item = MENU_FindItem( &pMenu, &nPos, wFlags ))) return FALSE;
@ -617,13 +618,17 @@ IntRemoveMenuItem( PMENU pMenu, UINT nPos, UINT wFlags, BOOL bRecurse )
}
else
{
while(nPos < pMenu->cItems)
{
*item = *(item+1);
item++;
nPos++;
}
pMenu->rgItems = DesktopHeapReAlloc(pMenu->head.rpdesk, pMenu->rgItems, pMenu->cItems * sizeof(ITEM));
while (nPos < pMenu->cItems)
{
*item = *(item+1);
item++;
nPos++;
}
newItems = DesktopHeapReAlloc(pMenu->head.rpdesk, pMenu->rgItems, pMenu->cItems * sizeof(ITEM));
if (newItems)
{
pMenu->rgItems = newItems;
}
}
return TRUE;
}