From 7d4de5f8ea50048e83bb16309445860fd211bbd4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 14 Dec 2022 09:27:53 +0200 Subject: [PATCH] [SHELL32] Check for valid listview in CDefView::_PidlByItem and CDefView::RemoveObject This fixes failing ATLASSERTs in shell32_winetest:shlview --- dll/win32/shell32/CDefView.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 95ccfa5973e..7cf9160df58 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -867,11 +867,15 @@ BOOL CDefView::_Sort() PCUITEMID_CHILD CDefView::_PidlByItem(int i) { + if (!m_ListView) + return nullptr; return reinterpret_cast(m_ListView.GetItemData(i)); } PCUITEMID_CHILD CDefView::_PidlByItem(LVITEM& lvItem) { + if (!m_ListView) + return nullptr; return reinterpret_cast(lvItem.lParam); } @@ -3112,6 +3116,9 @@ HRESULT STDMETHODCALLTYPE CDefView::RemoveObject(PITEMID_CHILD pidl, UINT *item) TRACE("(%p)->(%p %p)\n", this, pidl, item); + if (!m_ListView) + return E_FAIL; + if (pidl) { *item = LV_FindItemByPidl(ILFindLastID(pidl)); @@ -3154,7 +3161,8 @@ HRESULT STDMETHODCALLTYPE CDefView::RefreshObject(PITEMID_CHILD pidl, UINT *item HRESULT STDMETHODCALLTYPE CDefView::SetRedraw(BOOL redraw) { TRACE("(%p)->(%d)\n", this, redraw); - m_ListView.SetRedraw(redraw); + if (m_ListView) + m_ListView.SetRedraw(redraw); return S_OK; }