https://git.reactos.org/?p=reactos.git;a=commitdiff;h=630405972140642e054eb3cb16fc8be64ab777d9

commit 630405972140642e054eb3cb16fc8be64ab777d9
Author:     Mark Jansen <[email protected]>
AuthorDate: Tue Feb 22 19:43:05 2022 +0100
Commit:     Mark Jansen <[email protected]>
CommitDate: Tue Feb 22 19:43:05 2022 +0100

    [SHELL32] Add extra information when encountering an unexpected pidl
    
    In addition, make pdump slightly less unusable
---
 dll/win32/shell32/debughlp.cpp                  | 17 +++++++++++++++--
 dll/win32/shell32/debughlp.h                    |  1 +
 dll/win32/shell32/droptargets/CFSDropTarget.cpp |  3 ++-
 dll/win32/shell32/folders/CFSFolder.cpp         |  4 +++-
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/dll/win32/shell32/debughlp.cpp b/dll/win32/shell32/debughlp.cpp
index 47cc2cea525..6778418c7a8 100644
--- a/dll/win32/shell32/debughlp.cpp
+++ b/dll/win32/shell32/debughlp.cpp
@@ -245,11 +245,10 @@ void _dbg_ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR 
szOut, UINT uOutSize)
 
 
 
-void pdump (LPCITEMIDLIST pidl)
+static void pdump_impl (LPCITEMIDLIST pidl)
 {
     LPCITEMIDLIST pidltemp = pidl;
 
-    if (!TRACE_ON(pidl)) return;
 
     if (! pidltemp)
     {
@@ -309,6 +308,20 @@ void pdump (LPCITEMIDLIST pidl)
     }
 }
 
+void pdump(LPCITEMIDLIST pidl)
+{
+    if (!TRACE_ON(pidl)) return;
+
+    return pdump_impl(pidl);
+}
+
+
+void pdump_always(LPCITEMIDLIST pidl)
+{
+    pdump_impl(pidl);
+}
+
+
 static void dump_pidl_hex( LPCITEMIDLIST pidl )
 {
     const unsigned char *p = (const unsigned char *)pidl;
diff --git a/dll/win32/shell32/debughlp.h b/dll/win32/shell32/debughlp.h
index 547bf4985db..170650c946c 100644
--- a/dll/win32/shell32/debughlp.h
+++ b/dll/win32/shell32/debughlp.h
@@ -22,6 +22,7 @@
 #define __WINE_SHELL32_DEBUGHLP_H
 
 extern void pdump (LPCITEMIDLIST pidl);
+extern void pdump_always (LPCITEMIDLIST pidl);
 extern BOOL pcheck (LPCITEMIDLIST pidl);
 #ifdef __cplusplus
 extern "C"
diff --git a/dll/win32/shell32/droptargets/CFSDropTarget.cpp 
b/dll/win32/shell32/droptargets/CFSDropTarget.cpp
index 14d1d20a67d..19438fa51dd 100644
--- a/dll/win32/shell32/droptargets/CFSDropTarget.cpp
+++ b/dll/win32/shell32/droptargets/CFSDropTarget.cpp
@@ -40,7 +40,8 @@ static WCHAR* BuildPathsList(LPCWSTR wszBasePath, int cidl, 
LPCITEMIDLIST *pidls
         FileStructW* pDataW = _ILGetFileStructW(pidls[i]);
         if (!pDataW)
         {
-            ERR("Got garbage pidl\n");
+            ERR("Mistreating a pidl:\n");
+            pdump_always(pidls[i]);
             continue;
         }
 
diff --git a/dll/win32/shell32/folders/CFSFolder.cpp 
b/dll/win32/shell32/folders/CFSFolder.cpp
index c332d812d3a..f6aaa4efce2 100644
--- a/dll/win32/shell32/folders/CFSFolder.cpp
+++ b/dll/win32/shell32/folders/CFSFolder.cpp
@@ -1410,7 +1410,8 @@ HRESULT WINAPI CFSFolder::SetNameOf(
     FileStructW* pDataW = _ILGetFileStructW(pidl);
     if (!pDataW)
     {
-        ERR("Got garbage pidl\n");
+        ERR("Got garbage pidl:\n");
+        pdump_always(pidl);
         return E_INVALIDARG;
     }
 
@@ -1778,6 +1779,7 @@ HRESULT CFSFolder::_CreateShellExtInstance(const CLSID 
*pclsid, LPCITEMIDLIST pi
     if (!pDataW)
     {
         ERR("Got garbage pidl\n");
+        pdump_always(pidl);
         return E_INVALIDARG;
     }
 

Reply via email to