From 4eadc0762906136bc2f73d1f7e675b6d3b82cf63 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Mon, 3 Feb 2020 13:53:08 +1000 Subject: [PATCH] Common/StringUtil: Fix more incorrect usage of va_list --- src/common/string.cpp | 5 ++++- src/common/string_util.cpp | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/common/string.cpp b/src/common/string.cpp index 2b9682585..8d32c8b73 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -328,7 +328,10 @@ void String::AppendFormattedStringVA(const char* FormatString, va_list ArgPtr) for (;;) { - int ret = std::vsnprintf(pBuffer, currentBufferSize, FormatString, ArgPtr); + va_list ArgPtrCopy; + va_copy(ArgPtrCopy, ArgPtr); + int ret = std::vsnprintf(pBuffer, currentBufferSize, FormatString, ArgPtrCopy); + va_end(ArgPtrCopy); if (ret < 0 || ((u32)ret >= (currentBufferSize - 1))) { currentBufferSize *= 2; diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index 401007007..38f6ad7d5 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -14,11 +14,15 @@ std::string StdStringFromFormat(const char* format, ...) std::string StdStringFromFormatV(const char* format, std::va_list ap) { + std::va_list ap_copy; + va_copy(ap_copy, ap); + #ifdef WIN32 - int len = _vscprintf(format, ap); + int len = _vscprintf(format, ap_copy); #else - int len = std::vsnprintf(nullptr, 0, format, ap); + int len = std::vsnprintf(nullptr, 0, format, ap_copy); #endif + va_end(ap_copy); std::string ret; ret.resize(len);