From d44ee74466a2b4aaa72c273e35f441f25f65c09e Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Wed, 30 Mar 2016 11:35:22 +0000 Subject: [PATCH] [SHELL32] - Correctly handle desktop pidls in CDesktopFolder::CompareIDs. Based on a patch by Sylvain Deverre. CORE-10747 CORE-10801 #resolve svn path=/trunk/; revision=71081 --- reactos/dll/win32/shell32/folders/CDesktopFolder.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp index 119ec62c31f..737c75f98b1 100644 --- a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -463,12 +463,19 @@ HRESULT WINAPI CDesktopFolder::BindToStorage( */ HRESULT WINAPI CDesktopFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) { + bool bIsDesktopFolder1, bIsDesktopFolder2; + if (!pidl1 || !pidl2) { ERR("Got null pidl pointer (%Ix %p %p)!\n", lParam, pidl1, pidl2); return E_INVALIDARG; } + bIsDesktopFolder1 = _ILIsDesktop(pidl1); + bIsDesktopFolder2 = _ILIsDesktop(pidl2); + if (bIsDesktopFolder1 || bIsDesktopFolder2) + return MAKE_COMPARE_HRESULT(bIsDesktopFolder1 - bIsDesktopFolder2); + if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2)) return SHELL32_CompareGuidItems(this, lParam, pidl1, pidl2);