From 793fdf71d0bcd2ecdcb42f2396a525f53a51ea1a Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 27 Jul 2026 13:39:25 -0400 Subject: [PATCH] MT#55283 add snprintf wrapper This returns the length of the resulting string regardless of whether it was truncated or not Change-Id: I72f8b6194483e60705dee5dd3b9b9a69611325e8 --- daemon/redis.c | 6 +++--- daemon/stun.c | 3 +-- lib/auxlib.h | 5 +++++ recording-daemon/log.c | 6 +++--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/daemon/redis.c b/daemon/redis.c index 39ff58b70..c4547afe4 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -2421,14 +2421,14 @@ err: } #define JSON_ADD_LIST_STRING(f,...) do { \ - int len = snprintf(tmp,sizeof(tmp), f, __VA_ARGS__); \ + size_t len = rtpe_snprintf(tmp,sizeof(tmp), f, __VA_ARGS__); \ char enc[len * 3 + 1]; \ str encstr = parser->escape(enc, tmp, len); \ parser->list_add_str_dup(inner, &encstr); \ } while (0) #define JSON_SET_NSTRING(a,b,c,...) do { \ char tmp1[128]; \ - int len = snprintf(tmp1, sizeof(tmp1), c, __VA_ARGS__); \ + size_t len = rtpe_snprintf(tmp1, sizeof(tmp1), c, __VA_ARGS__); \ char enc[len * 3 + 1]; \ str encstr = parser->escape(enc, tmp1, len); \ char tmp2[256]; \ @@ -2445,7 +2445,7 @@ err: } while (0) #define JSON_SET_SIMPLE(a,c,...) do { \ char tbuf[128]; \ - int len = snprintf(tbuf, sizeof(tbuf), c, __VA_ARGS__); \ + size_t len = rtpe_snprintf(tbuf, sizeof(tbuf), c, __VA_ARGS__); \ char enc[len * 3 + 1]; \ str encstr = parser->escape(enc, tbuf, len); \ parser->dict_add_str_dup(inner, a, &encstr); \ diff --git a/daemon/stun.c b/daemon/stun.c index c23a7fc76..6b065e300 100644 --- a/daemon/stun.c +++ b/daemon/stun.c @@ -314,8 +314,7 @@ static void output_finish_src(struct msghdr *mh) { } static void software(struct msghdr *mh, struct software *sw) { - int i; - i = snprintf(sw->str, sizeof(sw->str), "%s", rtpe_config.software_id); + size_t i = rtpe_snprintf(sw->str, sizeof(sw->str), "%s", rtpe_config.software_id); output_add_data_len_pad(mh, sw, STUN_SOFTWARE, sw->str, i); } diff --git a/lib/auxlib.h b/lib/auxlib.h index 72f0f5f3e..6d7c546c1 100644 --- a/lib/auxlib.h +++ b/lib/auxlib.h @@ -154,6 +154,11 @@ INLINE void add_c_str_to_ht(const char *key, char *value, charp_ht ht) { t_hash_table_insert(ht, g_strdup(key), value); // hash table takes ownership of both } +#define rtpe_snprintf(o, l, f, ...) ({ \ + ssize_t __r = snprintf(o, l, f, ##__VA_ARGS__); \ + __r >= 0 ? MIN((l) - 1, __r) : (l) - 1; \ +}) + /*** MUTEX ABSTRACTION ***/ typedef pthread_mutex_t mutex_t; diff --git a/recording-daemon/log.c b/recording-daemon/log.c index db9e398e6..1aefb78ed 100644 --- a/recording-daemon/log.c +++ b/recording-daemon/log.c @@ -30,11 +30,11 @@ void __ilog(int prio, const char *fmt, ...) { char *endp = prefix + sizeof(prefix); if (log_info_call) - pp += snprintf(pp, endp - pp, "[C %s%s%s] ", FMT_M(log_info_call)); + pp += rtpe_snprintf(pp, endp - pp, "[C %s%s%s] ", FMT_M(log_info_call)); if (log_info_stream) - pp += snprintf(pp, endp - pp, "[S %s%s%s] ", FMT_M(log_info_stream)); + pp += rtpe_snprintf(pp, endp - pp, "[S %s%s%s] ", FMT_M(log_info_stream)); if (log_info_ssrc) - pp += snprintf(pp, endp - pp, "[%s0x%lx%s] ", FMT_M(log_info_ssrc)); + pp += rtpe_snprintf(pp, endp - pp, "[%s0x%lx%s] ", FMT_M(log_info_ssrc)); va_start(ap, fmt); __vpilog(prio, prefix, fmt, ap);