aboutsummaryrefslogtreecommitdiff
path: root/src/engine/cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/cache.cpp')
-rw-r--r--src/engine/cache.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/engine/cache.cpp b/src/engine/cache.cpp
index fcc7f72d..59daf139 100644
--- a/src/engine/cache.cpp
+++ b/src/engine/cache.cpp
@@ -1119,7 +1119,7 @@ extern "C" void CacheCleanup(
1119 LPWSTR sczDelete = NULL; 1119 LPWSTR sczDelete = NULL;
1120 HANDLE hFind = INVALID_HANDLE_VALUE; 1120 HANDLE hFind = INVALID_HANDLE_VALUE;
1121 WIN32_FIND_DATAW wfd = { }; 1121 WIN32_FIND_DATAW wfd = { };
1122 DWORD cFileName = 0; 1122 size_t cchFileName = 0;
1123 1123
1124 hr = CacheGetCompletedPath(fPerMachine, UNVERIFIED_CACHE_FOLDER_NAME, &sczFolder); 1124 hr = CacheGetCompletedPath(fPerMachine, UNVERIFIED_CACHE_FOLDER_NAME, &sczFolder);
1125 if (SUCCEEDED(hr)) 1125 if (SUCCEEDED(hr))
@@ -1146,17 +1146,15 @@ extern "C" void CacheCleanup(
1146 continue; 1146 continue;
1147 } 1147 }
1148 1148
1149 // For extra safety and to silence OACR.
1150 wfd.cFileName[MAX_PATH - 1] = L'\0';
1151
1152 // Skip resume files (they end with ".R"). 1149 // Skip resume files (they end with ".R").
1153 cFileName = lstrlenW(wfd.cFileName); 1150 hr = ::StringCchLengthW(wfd.cFileName, MAX_PATH, &cchFileName);
1154 if (2 < cFileName && L'.' == wfd.cFileName[cFileName - 2] && (L'R' == wfd.cFileName[cFileName - 1] || L'r' == wfd.cFileName[cFileName - 1])) 1151 if (FAILED(hr) ||
1152 2 < cchFileName && L'.' == wfd.cFileName[cchFileName - 2] && (L'R' == wfd.cFileName[cchFileName - 1] || L'r' == wfd.cFileName[cchFileName - 1]))
1155 { 1153 {
1156 continue; 1154 continue;
1157 } 1155 }
1158 1156
1159 hr = PathConcat(sczFolder, wfd.cFileName, &sczDelete); 1157 hr = PathConcatCch(sczFolder, 0, wfd.cFileName, cchFileName, &sczDelete);
1160 if (SUCCEEDED(hr)) 1158 if (SUCCEEDED(hr))
1161 { 1159 {
1162 hr = FileEnsureDelete(sczDelete); 1160 hr = FileEnsureDelete(sczDelete);