From 67bbc6eeb245a75d3f8b9aa7d881504c06d93034 Mon Sep 17 00:00:00 2001 From: olegobolenskiy Date: Sun, 7 Jan 2024 21:04:22 +0300 Subject: [PATCH] fix vPrint crashes on platforms where vsnprintf invalidates va_list, in particular on epoxyduino --- src/Arduino_DebugUtils.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Arduino_DebugUtils.cpp b/src/Arduino_DebugUtils.cpp index 3ffde7b..270927b 100644 --- a/src/Arduino_DebugUtils.cpp +++ b/src/Arduino_DebugUtils.cpp @@ -130,6 +130,10 @@ void Arduino_DebugUtils::print(int const debug_level, const __FlashStringHelper ******************************************************************************/ void Arduino_DebugUtils::vPrint(char const * fmt, va_list args) { + + va_list args_copy; + va_copy(args_copy, args); + // calculate required buffer length int msg_buf_size = vsnprintf(nullptr, 0, fmt, args) + 1; // add one for null terminator #if __STDC_NO_VLA__ == 1 @@ -139,7 +143,8 @@ void Arduino_DebugUtils::vPrint(char const * fmt, va_list args) { char msg_buf[msg_buf_size]; #endif - vsnprintf(msg_buf, msg_buf_size, fmt, args); + vsnprintf(msg_buf, msg_buf_size, fmt, args_copy); + va_end(args_copy); if (_newline_on) { _debug_output_stream->println(msg_buf);