From cf1a4c9d667e2abccf0203def27ee5401f95f13c Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 26 Feb 2019 08:06:02 +0000 Subject: [PATCH] Fix #8754: Crash when downloading objects due to race condition Use stack allocated buffer for string format arguments instead of the global argument buffer as this is performed on a background thread. --- src/openrct2-ui/windows/ObjectLoadError.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/openrct2-ui/windows/ObjectLoadError.cpp b/src/openrct2-ui/windows/ObjectLoadError.cpp index 407292bbf4..9b5e6a0dfe 100644 --- a/src/openrct2-ui/windows/ObjectLoadError.cpp +++ b/src/openrct2-ui/windows/ObjectLoadError.cpp @@ -61,12 +61,13 @@ public: private: void UpdateProgress(const std::string& name, size_t count, size_t total) { - char str_downloading_objects[256]; - set_format_arg(0, int16_t, count); - set_format_arg(2, int16_t, total); - set_format_arg(4, char*, name.c_str()); + char str_downloading_objects[256]{}; + uint8_t args[32]{}; + set_format_arg_on(args, 0, int16_t, count); + set_format_arg_on(args, 2, int16_t, total); + set_format_arg_on(args, 4, char*, name.c_str()); - format_string(str_downloading_objects, sizeof(str_downloading_objects), STR_DOWNLOADING_OBJECTS, gCommonFormatArgs); + format_string(str_downloading_objects, sizeof(str_downloading_objects), STR_DOWNLOADING_OBJECTS, args); auto intent = Intent(WC_NETWORK_STATUS); intent.putExtra(INTENT_EXTRA_MESSAGE, std::string(str_downloading_objects));