Index: src/ch/DirTreeCtrl.cpp =================================================================== diff -u -N -r90e8a7720fc23cf282e486c7b2bc1dc590b5d74c -r86c2327549cd4fa98972cf9035f9a78451a00f88 --- src/ch/DirTreeCtrl.cpp (.../DirTreeCtrl.cpp) (revision 90e8a7720fc23cf282e486c7b2bc1dc590b5d74c) +++ src/ch/DirTreeCtrl.cpp (.../DirTreeCtrl.cpp) (revision 86c2327549cd4fa98972cf9035f9a78451a00f88) @@ -57,38 +57,33 @@ LPITEMIDLIST CreatePidl(UINT cbSize) { - LPMALLOC lpMalloc; - HRESULT hr; - LPITEMIDLIST pidl=nullptr; + LPMALLOC lpMalloc = nullptr; - hr=SHGetMalloc(&lpMalloc); + HRESULT hr=SHGetMalloc(&lpMalloc); + if (FAILED(hr) || !lpMalloc) + return nullptr; - if (FAILED(hr)) - return 0; - - pidl=(LPITEMIDLIST)lpMalloc->Alloc(cbSize); - + LPITEMIDLIST pidl = (LPITEMIDLIST)lpMalloc->Alloc(cbSize); if (pidl) memset(pidl, 0, cbSize); // zero-init for external task alloc - if (lpMalloc) lpMalloc->Release(); + lpMalloc->Release(); return pidl; } void FreePidl(LPITEMIDLIST lpiidl) { - LPMALLOC lpMalloc; - HRESULT hr; - - hr=SHGetMalloc(&lpMalloc); - - if (FAILED(hr)) + if(!lpiidl) return; - lpMalloc->Free(lpiidl); + LPMALLOC lpMalloc = nullptr; + HRESULT hResult = SHGetMalloc(&lpMalloc); + if(SUCCEEDED(hResult) && lpMalloc) + lpMalloc->Free(lpiidl); - if (lpMalloc) lpMalloc->Release(); + if (lpMalloc) + lpMalloc->Release(); } LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) @@ -409,7 +404,7 @@ tvis.item=tvi; hCurrent=InsertItem(&tvis); - if (hParent == GetRootItem()) + if (hParent == GetRootItem() && lpsfDesktop) { // if this is My computer or net. neigh. - it's better to remember the handles // compare psid->lpiidl and (lpiidlDrives & lpiidlNetwork) Index: src/libchcore/TWin32ErrorFormatter.cpp =================================================================== diff -u -N -ra6fac511b0dd40e1c18cab086e0bc5ff5d2bc8d7 -r86c2327549cd4fa98972cf9035f9a78451a00f88 --- src/libchcore/TWin32ErrorFormatter.cpp (.../TWin32ErrorFormatter.cpp) (revision a6fac511b0dd40e1c18cab086e0bc5ff5d2bc8d7) +++ src/libchcore/TWin32ErrorFormatter.cpp (.../TWin32ErrorFormatter.cpp) (revision 86c2327549cd4fa98972cf9035f9a78451a00f88) @@ -43,17 +43,18 @@ TString strData; wchar_t* pszBuffer = strData.GetBuffer(dwMaxError); - DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM; - if (hModule) - dwFlags |= FORMAT_MESSAGE_FROM_HMODULE; + DWORD dwPos = 0; + if(hModule) + dwPos = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, hModule, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); + else + dwPos = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); - DWORD dwPos = FormatMessage(dwFlags, hModule, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); if (dwPos == 0xffffffff) { int iPos = 0; if (bUseNumberFallback) iPos = _sntprintf_s(pszBuffer, dwMaxError, _TRUNCATE, _T("ErrorCode: 0x%lx"), dwErrorCode); - strData.ReleaseBufferSetLength(iPos); + strData.ReleaseBufferSetLength(iPos < 0 ? 0 : iPos); } else strData.ReleaseBufferSetLength(std::min(dwPos, dwMaxError - 1));