mirror of
https://github.com/reactos/reactos.git
synced 2025-06-15 19:18:32 +00:00
[SHELL32] Fix some NULL-pointers validation.
- In the exported SHCreateDefaultContextMenu() and IDataObject_Constructor() functions (called amongst others by the exported CIDLData_CreateFromIDArray() function). - In the exported SHCreateShellFolderView() function. - In CDefView::GetItemObject(), where data was written to *ppvOut before ppvOut was being checked for NULL.
This commit is contained in:
parent
47d76db311
commit
ae2a85d003
3 changed files with 14 additions and 6 deletions
|
@ -2419,6 +2419,9 @@ HRESULT WINAPI CDefView::GetItemObject(UINT uItem, REFIID riid, LPVOID *ppvOut)
|
||||||
|
|
||||||
TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
|
TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
|
||||||
|
|
||||||
|
if (!ppvOut)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
*ppvOut = NULL;
|
*ppvOut = NULL;
|
||||||
|
|
||||||
switch (uItem)
|
switch (uItem)
|
||||||
|
@ -2426,9 +2429,6 @@ HRESULT WINAPI CDefView::GetItemObject(UINT uItem, REFIID riid, LPVOID *ppvOut)
|
||||||
case SVGIO_BACKGROUND:
|
case SVGIO_BACKGROUND:
|
||||||
if (IsEqualIID(riid, IID_IContextMenu))
|
if (IsEqualIID(riid, IID_IContextMenu))
|
||||||
{
|
{
|
||||||
if (!ppvOut)
|
|
||||||
hr = E_OUTOFMEMORY;
|
|
||||||
|
|
||||||
hr = CDefViewBckgrndMenu_CreateInstance(m_pSF2Parent, riid, ppvOut);
|
hr = CDefViewBckgrndMenu_CreateInstance(m_pSF2Parent, riid, ppvOut);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -3449,13 +3449,14 @@ HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv,
|
||||||
CComPtr<IShellView> psv;
|
CComPtr<IShellView> psv;
|
||||||
HRESULT hRes;
|
HRESULT hRes;
|
||||||
|
|
||||||
*ppsv = NULL;
|
if (!ppsv || !pcsfv || pcsfv->cbSize != sizeof(*pcsfv))
|
||||||
if (!pcsfv || pcsfv->cbSize != sizeof(*pcsfv))
|
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
TRACE("sf=%p outer=%p callback=%p\n",
|
TRACE("sf=%p outer=%p callback=%p\n",
|
||||||
pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
|
pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
|
||||||
|
|
||||||
|
*ppsv = NULL;
|
||||||
|
|
||||||
hRes = CDefView_CreateInstance(pcsfv->pshf, IID_PPV_ARG(IShellView, &psv));
|
hRes = CDefView_CreateInstance(pcsfv->pshf, IID_PPV_ARG(IShellView, &psv));
|
||||||
if (FAILED(hRes))
|
if (FAILED(hRes))
|
||||||
return hRes;
|
return hRes;
|
||||||
|
|
|
@ -1472,7 +1472,12 @@ HRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv)
|
SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
HRESULT hr = CDefaultContextMenu_CreateInstance(pdcm, NULL, riid, ppv);
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (!ppv)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
hr = CDefaultContextMenu_CreateInstance(pdcm, NULL, riid, ppv);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
|
|
@ -410,6 +410,8 @@ HRESULT WINAPI CIDLDataObj::EndOperation(HRESULT hResult, IBindCtx *pbcReserved,
|
||||||
*/
|
*/
|
||||||
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, IDataObject **dataObject)
|
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, IDataObject **dataObject)
|
||||||
{
|
{
|
||||||
|
if (!dataObject)
|
||||||
|
return E_INVALIDARG;
|
||||||
return ShellObjectCreatorInit<CIDLDataObj>(hwndOwner, pMyPidl, apidl, cidl, IID_PPV_ARG(IDataObject, dataObject));
|
return ShellObjectCreatorInit<CIDLDataObj>(hwndOwner, pMyPidl, apidl, cidl, IID_PPV_ARG(IDataObject, dataObject));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue