Fix crash in wxMediaCtrl::GetDownloadProgress() with ActiveMovie backend.
IActiveMovie::get_FilterGraph() may return S_FALSE, i.e. succeed, while leaving the output pointer NULL. Check for this and don't dereference the pointer before checking for its validity. Also do it for the other call in this function just in case. And rearrange the code to be slightly more readable. Closes #11894. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63831 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
bd044e27b3
commit
f836fe354b
@ -2092,36 +2092,37 @@ void wxAMMediaBackend::DoGetDownloadProgress(wxLongLong* pLoadProgress,
|
||||
wxLongLong* pLoadTotal)
|
||||
{
|
||||
#ifndef __WXWINCE__
|
||||
LONGLONG loadTotal = 0, loadProgress = 0;
|
||||
IUnknown* pFG;
|
||||
IAMOpenProgress* pOP;
|
||||
HRESULT hr;
|
||||
hr = m_pAM->get_FilterGraph(&pFG);
|
||||
if(SUCCEEDED(hr))
|
||||
IUnknown* pFG = NULL;
|
||||
|
||||
HRESULT hr = m_pAM->get_FilterGraph(&pFG);
|
||||
|
||||
// notice that the call above may return S_FALSE and leave pFG NULL
|
||||
if(SUCCEEDED(hr) && pFG)
|
||||
{
|
||||
IAMOpenProgress* pOP = NULL;
|
||||
hr = pFG->QueryInterface(IID_IAMOpenProgress, (void**)&pOP);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
if(SUCCEEDED(hr) && pOP)
|
||||
{
|
||||
LONGLONG
|
||||
loadTotal = 0,
|
||||
loadProgress = 0;
|
||||
hr = pOP->QueryProgress(&loadTotal, &loadProgress);
|
||||
pOP->Release();
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
*pLoadProgress = loadProgress;
|
||||
*pLoadTotal = loadTotal;
|
||||
pFG->Release();
|
||||
return;
|
||||
}
|
||||
}
|
||||
pFG->Release();
|
||||
}
|
||||
#endif // !__WXWINCE__
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
*pLoadProgress = loadProgress;
|
||||
*pLoadTotal = loadTotal;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// When not loading from a URL QueryProgress will return
|
||||
// E_NOINTERFACE or whatever
|
||||
// wxAMFAIL(hr);
|
||||
*pLoadProgress = 0;
|
||||
*pLoadTotal = 0;
|
||||
}
|
||||
*pLoadProgress = 0;
|
||||
*pLoadTotal = 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user