From 7396c211be75da3bce74cf8d2661a481a5c10fff Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 31 Aug 2022 20:51:21 -0700 Subject: [PATCH] UI/updater: Fix files with similar hashes clashing Do to multithreading the update process, files of the same hash can sometimes collide due to race. Ensure the filenames are all unique by appending an incremented value for each file. --- UI/win-update/updater/updater.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 129b3eee0..934a39b8d 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -885,12 +885,16 @@ static void UpdateWithPatchIfAvailable(const char *name, const char *hash, update.fileSize = size; update.patchable = true; + /* ensure the filename is unique */ + static long increment = 0; + /* Since the patch depends on the previous version, we can * no longer rely on the temp name being unique to the * new file's hash */ update.tempPath = tempPath; update.tempPath += L"\\"; update.tempPath += patchHashStr; + update.tempPath += std::to_wstring(increment++); break; } }