[WIN32K:NTUSER] Reference menus owned by a popup menu. CORE-15504

This commit is contained in:
Thomas Faber 2018-12-28 13:39:23 +01:00
parent a9b88efa7c
commit e3c8002dfc
No known key found for this signature in database
GPG key ID: 076E7C3D44720826

View file

@ -4512,6 +4512,10 @@ PopupMenuWndProc(
{ {
CREATESTRUCTW *cs = (CREATESTRUCTW *) lParam; CREATESTRUCTW *cs = (CREATESTRUCTW *) lParam;
pPopupMenu->spmenu = UserGetMenuObject(cs->lpCreateParams); pPopupMenu->spmenu = UserGetMenuObject(cs->lpCreateParams);
if (pPopupMenu->spmenu)
{
UserReferenceObject(pPopupMenu->spmenu);
}
break; break;
} }
@ -4556,6 +4560,10 @@ PopupMenuWndProc(
case WM_NCDESTROY: case WM_NCDESTROY:
{ {
if (pPopupMenu->spmenu)
{
IntReleaseMenuObject(pPopupMenu->spmenu);
}
DesktopHeapFree(Wnd->head.rpdesk, pPopupMenu ); DesktopHeapFree(Wnd->head.rpdesk, pPopupMenu );
((PMENUWND)Wnd)->ppopupmenu = 0; ((PMENUWND)Wnd)->ppopupmenu = 0;
Wnd->fnid = FNID_DESTROY; Wnd->fnid = FNID_DESTROY;
@ -4571,6 +4579,11 @@ PopupMenuWndProc(
ERR("Bad Menu Handle\n"); ERR("Bad Menu Handle\n");
break; break;
} }
UserReferenceObject(pmenu);
if (pPopupMenu->spmenu)
{
IntReleaseMenuObject(pPopupMenu->spmenu);
}
pPopupMenu->spmenu = pmenu; pPopupMenu->spmenu = pmenu;
break; break;
} }