From 8ab5fff91446ef48cb6d952f9eab0b553900b79b Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 28 Mar 2020 22:56:48 +0100 Subject: [PATCH] Fix audioMasterSpecific related segfaults Not initializing our buffer is fine if something is going to write to it, but in this case the default way to handle `audioMasterSpecific` (and any other opcode without specific behaviour) would be to treat it as a writable string. Since the host wasn't actually writing to it we would just send some old data from the stack back which obviously would cause some plugins to crash. --- README.md | 1 - src/common/events.h | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 37444a8e..080d6b9f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ There are a few things that should be done before releasing this, including: XEmbed messages or skip reparenting altogether, but that's of course not ideal. - Fix implementation bugs: - - KiloHearts plugins fail during initialization. - Serum crashes when closing bitwig (but otherwise exits just fine). - Melda plugins crash when opening their GUI. - Add missing details if any to the architecture section. diff --git a/src/common/events.h b/src/common/events.h index 150158c7..f43731d3 100644 --- a/src/common/events.h +++ b/src/common/events.h @@ -196,7 +196,10 @@ void passthrough_event(boost::asio::local::stream_protocol::socket& socket, event.payload, event.option); } - std::array string_buffer; + // This buffer is used to write strings and small objects to. We'll + // initialize it with a single null to prevent it from being read as some + // arbitrary C-style string. + std::array string_buffer{0}; void* data = std::visit( overload{ [&](const std::nullptr_t&) -> void* { return nullptr; },