https://git.reactos.org/?p=reactos.git;a=commitdiff;h=62e59652a038f8ffab2d66d4af699ecc6b779a40

commit 62e59652a038f8ffab2d66d4af699ecc6b779a40
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Fri May 15 16:36:13 2020 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Fri May 15 16:36:13 2020 +0900

    [SHELL32] Don't hardcode C: drive again (#2777)
    
    - Avoid buffer overrun.
    - Don't hardcode C: drive.
    CORE-13235
---
 dll/win32/shell32/folders/CRecycleBin.cpp | 32 ++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/dll/win32/shell32/folders/CRecycleBin.cpp 
b/dll/win32/shell32/folders/CRecycleBin.cpp
index a32c42b621f..dbf03672cee 100644
--- a/dll/win32/shell32/folders/CRecycleBin.cpp
+++ b/dll/win32/shell32/folders/CRecycleBin.cpp
@@ -192,10 +192,12 @@ CRecycleBinEnum::~CRecycleBinEnum()
 HRESULT WINAPI CRecycleBinEnum::Initialize(DWORD dwFlags)
 {
     WCHAR szDrive[8];
-    if (GetEnvironmentVariableW(L"SystemDrive", szDrive, _countof(szDrive)))
-        PathAddBackslashW(szDrive);
-    else
-        StringCbCopyW(szDrive, sizeof(szDrive), L"C:\\");
+    if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, _countof(szDrive) - 
1))
+    {
+        ERR("GetEnvironmentVariableW failed\n");
+        return E_FAIL;
+    }
+    PathAddBackslashW(szDrive);
 
     if (dwFlags & SHCONTF_NONFOLDERS)
     {
@@ -367,10 +369,12 @@ HRESULT WINAPI 
CRecycleBinItemContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO l
         Context.pFileDetails = _ILGetRecycleStruct(apidl);
         Context.bFound = FALSE;
 
-        if (GetEnvironmentVariableW(L"SystemDrive", szDrive, 
_countof(szDrive)))
-            PathAddBackslashW(szDrive);
-        else
-            StringCbCopyW(szDrive, sizeof(szDrive), L"C:\\");
+        if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, 
_countof(szDrive) - 1))
+        {
+            ERR("GetEnvironmentVariableW failed\n");
+            return E_FAIL;
+        }
+        PathAddBackslashW(szDrive);
 
         EnumerateRecycleBinW(szDrive, CBSearchRecycleBin, (PVOID)&Context);
         if (!Context.bFound)
@@ -823,14 +827,20 @@ HRESULT WINAPI 
CRecycleBin::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
     HRESULT hr;
     LPSHELLBROWSER lpSB;
     IShellView * lpSV = NULL;
+    WCHAR szDrive[8];
 
     TRACE("%p %p verb %p\n", this, lpcmi, lpcmi->lpVerb);
 
     if (LOWORD(lpcmi->lpVerb) == iIdEmpty)
     {
-        // FIXME
-        // path & flags
-        hr = SHEmptyRecycleBinW(lpcmi->hwnd, L"C:\\", 0);
+        if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, 
_countof(szDrive) - 1))
+        {
+            ERR("GetEnvironmentVariableW failed\n");
+            return E_FAIL;
+        }
+        PathAddBackslashW(szDrive);
+
+        hr = SHEmptyRecycleBinW(lpcmi->hwnd, szDrive, 0);
         TRACE("result %x\n", hr);
         if (hr != S_OK)
             return hr;

Reply via email to