From 23a21b33b1607430972f7a9ed930c18c3e9cd19b Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sat, 7 Dec 2013 09:39:39 -0800 Subject: [PATCH] Use a fixed-size buffer for log messages libc++'s implementation of ostrstream seems to have incorrect range-checking and does some out-of-bounds reads and writes whenever a resize is needed, which results in crashes on 10.7 (but not 10.9 for unknown reasons). --- aegisub/libaegisub/common/log.cpp | 4 +++- aegisub/libaegisub/include/libaegisub/log.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/aegisub/libaegisub/common/log.cpp b/aegisub/libaegisub/common/log.cpp index 34b400b92..46aace6b1 100644 --- a/aegisub/libaegisub/common/log.cpp +++ b/aegisub/libaegisub/common/log.cpp @@ -84,7 +84,9 @@ decltype(LogSink::messages) LogSink::GetMessages() const { return ret; } -Message::Message(const char *section, Severity severity, const char *file, const char *func, int line) { +Message::Message(const char *section, Severity severity, const char *file, const char *func, int line) +: msg(buffer, sizeof buffer) +{ sm.section = section; sm.severity = severity; sm.file = file; diff --git a/aegisub/libaegisub/include/libaegisub/log.h b/aegisub/libaegisub/include/libaegisub/log.h index b87fd6032..3d6e72304 100644 --- a/aegisub/libaegisub/include/libaegisub/log.h +++ b/aegisub/libaegisub/include/libaegisub/log.h @@ -139,6 +139,7 @@ public: class Message { std::ostrstream msg; SinkMessage sm; + char buffer[2048]; public: Message(const char *section, Severity severity, const char *file, const char *func, int line);