https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7d4de5f8ea50048e83bb16309445860fd211bbd4

commit 7d4de5f8ea50048e83bb16309445860fd211bbd4
Author:     Timo Kreuzer <[email protected]>
AuthorDate: Wed Dec 14 09:27:53 2022 +0200
Commit:     Timo Kreuzer <[email protected]>
CommitDate: Wed Jan 4 10:32:28 2023 +0100

    [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<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
 }
 
 PCUITEMID_CHILD CDefView::_PidlByItem(LVITEM& lvItem)
 {
+    if (!m_ListView)
+        return nullptr;
     return reinterpret_cast<PCUITEMID_CHILD>(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;
 }
 

Reply via email to