[PATCH] user32: Always release menu item in EnableMenuItem
The menu must be release on all code-paths, else the underlying lock will never be released. Fixes bug 45355. Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de> --- dlls/user32/menu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 8c541cc4f91..0b1133bbc41 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -590,6 +590,7 @@ static POPUPMENU *find_menu_item(HMENU hmenu, UINT id, UINT flags, UINT *pos) POPUPMENU *menu; menu = grab_menu_ptr(hmenu); + if (!menu) return NULL; @@ -3763,6 +3764,8 @@ BOOL WINAPI EnableMenuItem( HMENU hMenu, UINT id, UINT wFlags ) rc.bottom = 0; RedrawWindow(hwnd, &rc, 0, RDW_FRAME | RDW_INVALIDATE | RDW_NOCHILDREN); } + else + release_menu_ptr(menu); } else release_menu_ptr(menu); -- 2.17.1
On 6/20/2018 11:46 PM, Fabian Maurer wrote:
The menu must be release on all code-paths, else the underlying lock will never be released.
Fixes bug 45355.
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de> --- dlls/user32/menu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 8c541cc4f91..0b1133bbc41 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -590,6 +590,7 @@ static POPUPMENU *find_menu_item(HMENU hmenu, UINT id, UINT flags, UINT *pos) POPUPMENU *menu;
menu = grab_menu_ptr(hmenu); + if (!menu) return NULL;
@@ -3763,6 +3764,8 @@ BOOL WINAPI EnableMenuItem( HMENU hMenu, UINT id, UINT wFlags ) rc.bottom = 0; RedrawWindow(hwnd, &rc, 0, RDW_FRAME | RDW_INVALIDATE | RDW_NOCHILDREN); } + else + release_menu_ptr(menu); } else release_menu_ptr(menu);
It looks like it's enough to merge conditions to avoid such repetition.
participants (2)
-
Fabian Maurer -
Nikolay Sivov