[SHELL32] Handle BYREF variants in CFolderItems::Item.

Fixes crash in shell32_winetest:shelldispatch.

See also:
6634b31520
This commit is contained in:
Thomas Faber 2019-09-08 11:10:29 +02:00
parent 06e886086c
commit faae7e5790
No known key found for this signature in database
GPG key ID: 076E7C3D44720826

View file

@ -247,11 +247,18 @@ HRESULT STDMETHODCALLTYPE CFolderItems::get_Parent(IDispatch **ppid)
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT index, FolderItem **ppid) HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT var, FolderItem **ppid)
{ {
CComVariant index;
HRESULT hr;
if (!m_EnumIDList) if (!m_EnumIDList)
return E_FAIL; return E_FAIL;
hr = VariantCopyInd(&index, &var);
if (FAILED(hr))
return hr;
if (V_VT(&index) == VT_I2) if (V_VT(&index) == VT_I2)
VariantChangeType(&index, &index, 0, VT_I4); VariantChangeType(&index, &index, 0, VT_I4);
@ -259,7 +266,7 @@ HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT index, FolderItem **ppid)
{ {
ULONG count = V_UI4(&index); ULONG count = V_UI4(&index);
HRESULT hr = m_EnumIDList->Reset(); hr = m_EnumIDList->Reset();
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return hr; return hr;
@ -282,7 +289,7 @@ HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT index, FolderItem **ppid)
if (!V_BSTR(&index)) if (!V_BSTR(&index))
return S_FALSE; return S_FALSE;
HRESULT hr = m_Folder->ParseName(V_BSTR(&index), ppid); hr = m_Folder->ParseName(V_BSTR(&index), ppid);
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return hr; return hr;
return hr; return hr;