From 90c8b5b2890a227088b5a67a21bdc24028b156d5 Mon Sep 17 00:00:00 2001 From: Phong Tran Date: Thu, 29 Mar 2018 13:51:29 +0700 Subject: minor compiler warning gcc 7.x (#30) * Fix -Wpointer-compare of compare with null char Signed-off-by: Phong Tran * dlt_common: fix -Wformat-truncation of snprintf Avoid snprintf output truncation by handling return value Signed-off-by: Phong Tran * dlt_offline_trace: Fix Wformat-truncation of snprintf Compile with Gcc 7.x has the warning of snprintf buffer length size. Check return value of snprintf() for avoiding the warning. Signed-off-by: Phong Tran * dlt_common_test: Fix memleak t_dlt_message_read some resources were not free after using. Detected by running valgrind --leak-check=full ./gtest_dlt_common Signed-off-by: Phong Tran --- src/daemon/dlt_daemon_common.c | 2 +- src/lib/dlt_user.c | 4 ++-- src/shared/dlt_common.c | 12 ++++++++++-- src/shared/dlt_offline_trace.c | 16 ++++++++++++++-- tests/gtest_dlt_common.cpp | 17 +++++++++++++++-- 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c index 096708c..11be6e6 100644 --- a/src/daemon/dlt_daemon_common.c +++ b/src/daemon/dlt_daemon_common.c @@ -596,7 +596,7 @@ int dlt_daemon_applications_save(DltDaemon *daemon, const char *filename, int ve dlt_set_id(apid,daemon->applications[i].apid); if ((daemon->applications[i].application_description) && - (daemon->applications[i].application_description!='\0')) + (daemon->applications[i].application_description[0] != '\0')) { fprintf(fd,"%s:%s:\n",apid, daemon->applications[i].application_description); } diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index eba6189..8d1aec1 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -3817,7 +3817,7 @@ DltReturnValue dlt_user_log_send_register_context(DltContextData *log) return DLT_RETURN_ERROR; } - if (log->handle->contextID=='\0') + if (log->handle->contextID[0] == '\0') { return DLT_RETURN_ERROR; } @@ -3900,7 +3900,7 @@ DltReturnValue dlt_user_log_send_unregister_context(DltContextData *log) return DLT_RETURN_WRONG_PARAMETER; } - if (log->handle->contextID=='\0') + if (log->handle->contextID[0] == '\0') { return DLT_RETURN_ERROR; } diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c index b98c7fa..818f3ef 100644 --- a/src/shared/dlt_common.c +++ b/src/shared/dlt_common.c @@ -186,8 +186,11 @@ DltReturnValue dlt_print_mixed_string(char *text, int textlength ,uint8_t *ptr, /* print full lines */ for (lines=0; lines< (size / DLT_COMMON_HEX_CHARS); lines++) { + int ret = 0; /* Line number */ - snprintf(text,DLT_COMMON_HEX_LINELEN+1,"%.6x: ",lines * DLT_COMMON_HEX_CHARS); + ret = snprintf(text,DLT_COMMON_HEX_LINELEN+1,"%.6x: ",lines * DLT_COMMON_HEX_CHARS); + if ((ret < 0 ) || (ret >= (DLT_COMMON_HEX_LINELEN + 1))) + dlt_log(LOG_WARNING, "line was truncated\n"); text+=DLT_COMMON_HEX_LINELEN; /* 'XXXXXX: ' */ /* Hex-Output */ @@ -222,7 +225,12 @@ DltReturnValue dlt_print_mixed_string(char *text, int textlength ,uint8_t *ptr, if (rest>0) { /* Line number */ - snprintf(text,9,"%.6x: ", (size / DLT_COMMON_HEX_CHARS) * DLT_COMMON_HEX_CHARS); + int ret = 0; + ret = snprintf(text,9,"%.6x: ", (size / DLT_COMMON_HEX_CHARS) * DLT_COMMON_HEX_CHARS); + if ((ret < 0) || (ret >= 9)) + { + dlt_log(LOG_WARNING, "line number was truncated"); + } text+=DLT_COMMON_HEX_LINELEN; /* 'XXXXXX: ' */ /* Hex-Output */ diff --git a/src/shared/dlt_offline_trace.c b/src/shared/dlt_offline_trace.c index 32b5253..6b7a10a 100644 --- a/src/shared/dlt_offline_trace.c +++ b/src/shared/dlt_offline_trace.c @@ -216,6 +216,7 @@ DltReturnValue dlt_offline_trace_create_new_file(DltOfflineTrace *trace) { /* set filename */ if(trace->filenameTimestampBased) { + int ret = 0; t = time(NULL); tmp = localtime(&t); if (NULL == tmp) { @@ -224,16 +225,27 @@ DltReturnValue dlt_offline_trace_create_new_file(DltOfflineTrace *trace) { } if (strftime(outstr, sizeof(outstr),"%Y%m%d_%H%M%S", tmp) == 0) { } - snprintf(trace->filename, NAME_MAX + 1, "%s/dlt_offlinetrace_%s.dlt", trace->directory, outstr); + ret = snprintf(trace->filename, NAME_MAX , "%s/dlt_offlinetrace_%s.dlt", trace->directory, outstr); + if ((ret < 0) || (ret >= NAME_MAX)) + { + printf("dlt_offlinetrace filename cannot be concatenated\n"); + return DLT_RETURN_ERROR; + } } else { + int ret = 0; /* targeting newest file, ignoring number of files in dir returned */ dlt_offline_trace_storage_dir_info(trace->directory, DLT_OFFLINETRACE_FILENAME_BASE, newest, oldest); idx = dlt_offline_trace_get_idx_of_log_file(newest) + 1; dlt_offline_trace_file_name(outstr, DLT_OFFLINETRACE_FILENAME_BASE, idx); - snprintf(trace->filename, NAME_MAX + 1, "%s/%s", trace->directory, outstr); + ret = snprintf(trace->filename, NAME_MAX, "%s/%s", trace->directory, outstr); + if ((ret < 0) || (ret >= NAME_MAX)) + { + printf("filename cannot be concatenated\n"); + return DLT_RETURN_ERROR; + } } diff --git a/tests/gtest_dlt_common.cpp b/tests/gtest_dlt_common.cpp index df3b6d2..d7c6d9c 100644 --- a/tests/gtest_dlt_common.cpp +++ b/tests/gtest_dlt_common.cpp @@ -261,7 +261,7 @@ TEST(t_dlt_buffer_reset, normal) // Normal Use-Case. expect 0 EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(0, dlt_buffer_reset(&buf)); - + EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_reset, abnormal) { @@ -1238,6 +1238,7 @@ TEST(t_dlt_buffer_info, normal) // Normal Use-Case EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_info(&buf)); + EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_info, abnormal) { @@ -1262,6 +1263,7 @@ TEST(t_dlt_buffer_status, normal) // Normal Use-Case EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_status(&buf)); + EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_status, abnormal) { @@ -3092,7 +3094,8 @@ TEST(t_dlt_message_read, normal) EXPECT_LE(DLT_RETURN_ERROR, dlt_message_read(&file.msg,(unsigned char*) buffer,255,0,1)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); - + EXPECT_LE(DLT_RETURN_OK, dlt_file_close(&file, 0)); + EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); @@ -3103,6 +3106,8 @@ TEST(t_dlt_message_read, normal) EXPECT_LE(DLT_RETURN_ERROR, dlt_message_read(&file.msg,(unsigned char *) buffer,255,1,1)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); + EXPECT_LE(DLT_RETURN_OK, dlt_file_close(&file, 0)); + EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_read, abnormal) { @@ -3335,11 +3340,16 @@ TEST(t_dlt_log_init, normal) // Normal Use-Case, exptect 0-3 EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_CONSOLE)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_SYSLOG)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_set_filename("/tmp/dlt.log")); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_FILE)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_FILE)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_DROPPED)); + EXPECT_NO_THROW(dlt_log_free()); } TEST(t_dlt_log_init, abnormal) { @@ -3367,8 +3377,11 @@ TEST(t_dlt_log_free, normal) // Normal Use-Case, expected 0 EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_CONSOLE)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_TO_SYSLOG)); + EXPECT_NO_THROW(dlt_log_free()); EXPECT_NO_THROW(dlt_log_init(DLT_LOG_DROPPED)); + EXPECT_NO_THROW(dlt_log_free()); } TEST(t_dlt_log_free, abnormal) { -- cgit v1.2.1