diff --git a/src/webserver.cpp b/src/webserver.cpp index 5a1f4324..b065f76b 100644 --- a/src/webserver.cpp +++ b/src/webserver.cpp @@ -429,11 +429,25 @@ void* uri_log(void* cls, const char* uri) { } void error_log(void* cls, const char* fmt, va_list ap) { - // Parameter needed to respect MHD interface, but not needed here. - std::ignore = ap; - webserver* dws = static_cast(cls); - if (dws->log_error != nullptr) dws->log_error(fmt); + + std::string msg; + msg.resize(80); // Asssume one line will be enought most of the time. + + va_list va; + va_copy(va, ap); // Stash a copy in case we need to try again. + + size_t r = vsnprintf(&*msg.begin(), msg.size(), fmt, ap); + va_end(ap); + + if (msg.size() < r) { + msg.resize(r); + r = vsnprintf(&*msg.begin(), msg.size(), fmt, va); + } + va_end(va); + msg.resize(r); + + if (dws->log_error != nullptr) dws->log_error(msg); } void access_log(webserver* dws, string uri) {