From 0ae98e7b46f13d415e051a7acdfd7d703c5c25f9 Mon Sep 17 00:00:00 2001 From: Felix Herrmann Date: Tue, 14 Jan 2020 17:18:46 +0100 Subject: snprintf ret > 0 is not always an error snprintf returns the size the resulting string would take. In order to detect truncation, this size needs to be checked against the buffer size. Signed-off-by: Felix Herrmann Signed-off-by: KHANH LUONG HONG DUY --- src/daemon/dlt-daemon.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index fd46795..e4039a2 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -243,6 +243,7 @@ int option_file_parser(DltDaemonLocal *daemon_local) char value[value_length]; char *pch; const char *filename; + ssize_t n; /* set default values for configuration */ daemon_local->flags.sharedMemorySize = DLT_SHM_SIZE; @@ -254,11 +255,12 @@ int option_file_parser(DltDaemonLocal *daemon_local) daemon_local->flags.loggingMode = DLT_LOG_TO_CONSOLE; daemon_local->flags.loggingLevel = LOG_INFO; - if (snprintf(daemon_local->flags.loggingFilename, + n = snprintf(daemon_local->flags.loggingFilename, sizeof(daemon_local->flags.loggingFilename), - "%s/dlt.log", dltFifoBaseDir) != 0) { - dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error %s\n", __func__, - daemon_local->flags.loggingFilename); + "%s/dlt.log", dltFifoBaseDir); + if (n < 0 || (size_t)n > sizeof(daemon_local->flags.loggingFilename)) { + dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error(%d) %s\n", + __func__, n, daemon_local->flags.loggingFilename); } daemon_local->timeoutOnSend = 4; @@ -1500,9 +1502,13 @@ void dlt_daemon_exit_trigger() { char tmp[DLT_PATH_MAX] = { 0 }; - if (snprintf(tmp, DLT_PATH_MAX, "%s/dlt", dltFifoBaseDir) != 0) { - dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error %s\n", __func__, tmp); + ssize_t n; + n = snprintf(tmp, DLT_PATH_MAX, "%s/dlt", dltFifoBaseDir); + if (n < 0 || (size_t)n > DLT_PATH_MAX) { + dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error(%d) %s\n", + __func__, n, tmp); } + (void)unlink(tmp); /* stop event loop */ -- cgit v1.2.1