From fa8bd1cc09125b368d4295c19331bf33e2d0c602 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 27 Feb 2026 00:38:07 +0100 Subject: [PATCH] mprintf: use `_snprintf()` when compiled with VS2013 and older To support floats and doubles when using these old compilers. Before this patch, these tests most likely failed with them: ``` FAIL 557: 'curl_mprintf() testing' printf, unittest FAIL 566: 'HTTP GET with CURLINFO_CONTENT_LENGTH_DOWNLOAD and 0 bytes transfer' HTTP, HTTP GET FAIL 599: 'HTTP GET with progress callback and redirects changing content sizes' HTTP, HTTP POST, chunked Transfer-Encoding FAIL 1148: 'progress-bar' HTTP, progressbar ``` Also: - mention `_snprintf()` in the `_CRT_SECURE_NO_WARNINGS` comment. Follow-up to 7de35515d90d364e851cdde712062b942d6bf36a #20218 Closes #20761 --- lib/curl_setup.h | 2 +- lib/mprintf.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/curl_setup.h b/lib/curl_setup.h index b7c030c006..4629f79fb9 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -90,7 +90,7 @@ /* Disable Visual Studio warnings: 4127 "conditional expression is constant" */ #pragma warning(disable:4127) #ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS /* for getenv(), tests: sscanf() */ +#define _CRT_SECURE_NO_WARNINGS /* for _snprintf(), getenv(), sscanf() */ #endif #endif /* _MSC_VER */ diff --git a/lib/mprintf.c b/lib/mprintf.c index 10cede837c..b00f16e34b 100644 --- a/lib/mprintf.c +++ b/lib/mprintf.c @@ -688,6 +688,9 @@ static bool out_double(void *userp, buffer if it reaches the max size so we do that here. */ work[BUFFSIZE - 1] = 0; #endif +#elif defined(_MSC_VER) && (_MSC_VER < 1900) + _snprintf(work, BUFFSIZE, formatbuf, dnum); + work[BUFFSIZE - 1] = 0; #else /* float and double outputs do not work without snprintf support */ work[0] = 0;