summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Src/StringUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Src/StringUtil.cpp')
-rw-r--r--Source/Core/Common/Src/StringUtil.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/Source/Core/Common/Src/StringUtil.cpp b/Source/Core/Common/Src/StringUtil.cpp
index 590b20fc4a..638c301f24 100644
--- a/Source/Core/Common/Src/StringUtil.cpp
+++ b/Source/Core/Common/Src/StringUtil.cpp
@@ -165,6 +165,11 @@ void StringFromFormatV(std::string* out, const char* format, va_list args)
delete [] buf;
buf = new char[newSize + 1];
writtenCount = vsnprintf(buf, newSize, format, args);
+ // ARGH! vsnprintf does no longer return -1 on truncation in newer libc!
+ // WORKAROUND! let's fake the old behaviour (even though it's less efficient).
+ // TODO: figure out why the fix causes an invalid read in strlen called from vsnprintf :(
+ if (writtenCount >= (int)newSize)
+ writtenCount = -1;
newSize *= 2;
}