From 2d356aa64444355382d06f0cd106a10cac8b3c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 6 Oct 2024 09:29:54 +0800 Subject: [PATCH] IO: don't reuse va_list Fix #1321 --- src/common/io/io_unix.c | 6 +++++- src/common/io/io_windows.c | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/io/io_unix.c b/src/common/io/io_unix.c index c29b43a9f..54689ffae 100644 --- a/src/common/io/io_unix.c +++ b/src/common/io/io_unix.c @@ -216,7 +216,11 @@ const char* ffGetTerminalResponse(const char* request, int nParams, const char* bytesRead += (size_t) nRead; buffer[bytesRead] = '\0'; - int ret = vsscanf(buffer, format, args); + va_list cargs; + va_copy(cargs, args); + int ret = vsscanf(buffer, format, cargs); + va_end(cargs); + if (ret <= 0) { va_end(args); diff --git a/src/common/io/io_windows.c b/src/common/io/io_windows.c index 742d564ff..632530ccc 100644 --- a/src/common/io/io_windows.c +++ b/src/common/io/io_windows.c @@ -274,7 +274,11 @@ const char* ffGetTerminalResponse(const char* request, int nParams, const char* bytesRead += bytes; buffer[bytesRead] = '\0'; + va_list cargs; + va_copy(cargs, args); int ret = vsscanf(buffer, format, args); + va_end(cargs); + if (ret <= 0) { va_end(args);