From: Viktor Szakats Date: Thu, 26 Feb 2026 23:38:07 +0000 (+0100) Subject: mprintf: use `_snprintf()` when compiled with VS2013 and older X-Git-Tag: curl-8_19_0~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa8bd1cc09125b368d4295c19331bf33e2d0c602;p=thirdparty%2Fcurl.git 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 --- 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;