From a5a91a2a0e794aa80b73e1c8f5b1c59489889804 Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Tue, 27 Jun 2017 15:05:08 -0400 Subject: [PATCH] log: fix crash with DHT log Commit [0eb462a86f: change win32 logger for better readability] has a regression with DHT logs causing crashes. DHT logs don't have the '|' character in format string and this was not checked by the incriminated commit. Change-Id: Icffc89a2bf178292f183106f0139e0ded9535398 Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> --- src/logger.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/logger.cpp b/src/logger.cpp index 6025a3b1ae..0e811876dd 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -201,10 +201,16 @@ vlogger(const int level, const char *format, va_list ap) SetConsoleTextAttribute(hConsole, color_header); #endif - auto sep = strchr(format, '|'); // must exist, check LOG_FORMAT - std::string ctx(format, sep - format); - format = sep + 2; - fputs(getHeader(ctx.c_str()).c_str(), stderr); + std::string ctx; + + // WARNING : the '|' exists only with ring logs, not other logs like thus from OpenDHT + // WARNING : PLEASE DO NOT DROP THIS TEST !!!! (or die) + auto sep = strchr(format, '|'); + if (sep) { + ctx = std::string(format, sep - format); + format = sep + 2; + fputs(getHeader(ctx.c_str()).c_str(), stderr); + } #ifdef RING_UWP char tmp[4096]; vsprintf(tmp, format, ap); @@ -220,6 +226,10 @@ vlogger(const int level, const char *format, va_list ap) vfprintf(stderr, format, ap); + // WARING: this one also! see above + if (not sep) + fputs(ENDL, stderr); + #ifndef _WIN32 fputs(END_COLOR, stderr); #elif !defined(RING_UWP) -- GitLab