From: Thomas Faber Date: Wed, 19 Aug 2015 11:45:21 +0000 (+0000) Subject: [SHELL32] X-Git-Tag: ReactOS-0.4.0~1257 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=4436c96a25b739d487f1f75ff0f08b2dd4c79b58;hp=ed56601be6f70918e2c3467fd3f77641dece5bba [SHELL32] - Correctly handle NULL callback in CMenuBand::GetMenuInfo - Add missing error handling in CMenuFocusManager::UpdateFocus Fixes crashes in shell32_apitest:menu CORE-9932 #resolve svn path=/trunk/; revision=68767 --- diff --git a/reactos/dll/win32/shell32/shellmenu/CMenuBand.cpp b/reactos/dll/win32/shell32/shellmenu/CMenuBand.cpp index 5f8fc3b6f6a..323e9a60391 100644 --- a/reactos/dll/win32/shell32/shellmenu/CMenuBand.cpp +++ b/reactos/dll/win32/shell32/shellmenu/CMenuBand.cpp @@ -108,7 +108,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetMenuInfo( if (ppsmc) { - m_psmc->AddRef(); + if (m_psmc) + m_psmc->AddRef(); *ppsmc = m_psmc; } diff --git a/reactos/dll/win32/shell32/shellmenu/CMenuFocusManager.cpp b/reactos/dll/win32/shell32/shellmenu/CMenuFocusManager.cpp index 73b7721d25e..4301f90f2be 100644 --- a/reactos/dll/win32/shell32/shellmenu/CMenuFocusManager.cpp +++ b/reactos/dll/win32/shell32/shellmenu/CMenuFocusManager.cpp @@ -814,14 +814,22 @@ HRESULT CMenuFocusManager::UpdateFocus() CComPtr bandSite; CComPtr deskBar; hr = topMenu->mb->GetSite(IID_PPV_ARG(IServiceProvider, &bandSite)); + if (FAILED(hr)) + goto NoCapture; hr = bandSite->QueryService(SID_SMenuPopup, IID_PPV_ARG(IOleWindow, &deskBar)); + if (FAILED(hr)) + goto NoCapture; CComPtr deskBarSite; hr = IUnknown_GetSite(deskBar, IID_PPV_ARG(IOleWindow, &deskBarSite)); + if (FAILED(hr)) + goto NoCapture; // FIXME: Find the correct place for this HWND hWndOwner; - deskBarSite->GetWindow(&hWndOwner); + hr = deskBarSite->GetWindow(&hWndOwner); + if (FAILED(hr)) + goto NoCapture; m_PreviousForeground = ::GetForegroundWindow(); if (m_PreviousForeground != hWndOwner) @@ -832,9 +840,11 @@ HRESULT CMenuFocusManager::UpdateFocus() // Get the HWND of the top-level window HWND hWndSite; hr = deskBar->GetWindow(&hWndSite); + if (FAILED(hr)) + goto NoCapture; SetMenuCapture(hWndSite); - } +NoCapture: if (!m_parent || m_parent->type == MenuBarEntry) {