From 2104aa89754641efb35d252a6373a426148b52dd Mon Sep 17 00:00:00 2001 From: Constantin Papizh <p.const@bk.ru> Date: Sat, 4 Jul 2020 19:32:00 +0300 Subject: [PATCH] Logger fix to support occasionally unfittable strings --- dap-sdk/core/src/dap_common.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dap-sdk/core/src/dap_common.c b/dap-sdk/core/src/dap_common.c index be8d1ccf87..171bb41bb8 100755 --- a/dap-sdk/core/src/dap_common.c +++ b/dap-sdk/core/src/dap_common.c @@ -332,16 +332,21 @@ void _log_it(const char *a_log_tag, enum dap_log_level a_ll, const char *a_fmt, if ( a_ll < s_dap_log_level || a_ll >= 16 || !a_log_tag ) return; log_str_t *l_log_string = DAP_NEW_Z(log_str_t); - strncpy(l_log_string->str, s_ansi_seq_color[a_ll],sizeof (l_log_string->str)-1); + size_t offset2 = sizeof(l_log_string->str) - 2; + strncpy(l_log_string->str, s_ansi_seq_color[a_ll], offset2); l_log_string->offset = s_ansi_seq_color_len[a_ll]; s_update_log_time(l_log_string->str + l_log_string->offset); size_t offset = strlen(l_log_string->str); - offset += dap_snprintf(l_log_string->str + offset, sizeof (l_log_string->str) -offset, "%s[%s%s", s_log_level_tag[a_ll], a_log_tag, "] "); + offset += dap_snprintf(l_log_string->str + offset, offset2, "%s[%s%s", s_log_level_tag[a_ll], a_log_tag, "] "); + offset2 -= offset; va_list va; va_start( va, a_fmt ); - offset += dap_vsnprintf(l_log_string->str + offset,sizeof (l_log_string->str) -offset, a_fmt, va); + size_t l_offset = dap_vsnprintf(l_log_string->str + offset, offset2, a_fmt, va); + offset = (l_offset < offset2) ? offset + l_offset : offset; + offset2 = (l_offset < offset2) ? offset2 - offset : 0; va_end( va ); - memcpy(&l_log_string->str[offset], "\n", 1); + char *dummy = (offset2 == 0) ? memcpy(&l_log_string->str[sizeof(l_log_string->str) - 6], "...\n\0", 5) + : memcpy(&l_log_string->str[offset], "\n", 1); pthread_mutex_lock(&s_log_mutex); DL_APPEND(s_log_buffer, l_log_string); ++s_log_count; -- GitLab