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