From caee20b1ad052f778972e5296302bd978a1f843c Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 19 Feb 2016 15:15:46 +0100 Subject: [PATCH] nhttpd/yhttpd_core/helper.cpp: avoid buffer overload Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/7ebd9f8fdffffde4350295c17e65b9287050af08 Author: Jacek Jendrzej Date: 2016-02-19 (Fri, 19 Feb 2016) --- src/nhttpd/yhttpd_core/helper.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/nhttpd/yhttpd_core/helper.cpp b/src/nhttpd/yhttpd_core/helper.cpp index b09bb13e0..1a4e98aff 100644 --- a/src/nhttpd/yhttpd_core/helper.cpp +++ b/src/nhttpd/yhttpd_core/helper.cpp @@ -76,10 +76,17 @@ std::string timeString(time_t time) { // Printf and return formatet String. Buffer-save! // max length up to bufferlen -> then snip //------------------------------------------------------------------------- -#define bufferlen 4*1024 std::string string_printf(const char *fmt, ...) { - char buffer[bufferlen]; va_list arglist; + va_start (arglist, fmt); + int len = vsnprintf (NULL, 0, fmt, arglist); + va_end (arglist); + const int bufferlen = 4*1024; + if(len >= bufferlen){ + printf("string_printf: error: buffer overflow : len %i line %i\n",len,__LINE__); + return "error"; + } + char buffer[bufferlen] = {0}; va_start(arglist, fmt); vsnprintf(buffer, bufferlen, fmt, arglist); va_end(arglist);