[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
This commit is contained in:
Thomas Faber 2015-08-19 11:45:21 +00:00
parent ed56601be6
commit 4436c96a25
2 changed files with 14 additions and 3 deletions

View file

@ -108,7 +108,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetMenuInfo(
if (ppsmc)
{
m_psmc->AddRef();
if (m_psmc)
m_psmc->AddRef();
*ppsmc = m_psmc;
}

View file

@ -814,14 +814,22 @@ HRESULT CMenuFocusManager::UpdateFocus()
CComPtr<IServiceProvider> bandSite;
CComPtr<IOleWindow> 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<IOleWindow> 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)
{