From: Thomas Faber Date: Thu, 1 Feb 2018 10:06:50 +0000 (+0100) Subject: [WIN32K:NTUSER] Handle realloc failure in IntRemoveMenuItem. CORE-14222 X-Git-Tag: 0.4.9-RC~794 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=de455c4d50e6ba3b1d6b2897618feadb54a5e37f [WIN32K:NTUSER] Handle realloc failure in IntRemoveMenuItem. CORE-14222 --- diff --git a/win32ss/user/ntuser/menu.c b/win32ss/user/ntuser/menu.c index 8432f3a83fd..5ecffbb8e37 100644 --- a/win32ss/user/ntuser/menu.c +++ b/win32ss/user/ntuser/menu.c @@ -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; }