From 29fbea2e18cbec5fb149889c6522788c52b20ca2 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Thu, 17 Sep 2020 22:00:00 -0500 Subject: [PATCH] Use snprintf() to format SSID in patty_ax25_ntop() --- src/ax25.c | 43 ++++++++----------------------------------- 1 file changed, 8 insertions(+), 35 deletions(-) diff --git a/src/ax25.c b/src/ax25.c index 8e0f8b1..ac9a5b8 100644 --- a/src/ax25.c +++ b/src/ax25.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -77,22 +78,6 @@ error_invalid_callsign: return -1; } -static inline int expt(int base, int e) { - int ret; - - if (e == 0) { - return 1; - } - - ret = base; - - while (--e) { - ret *= ret; - } - - return ret; -} - int patty_ax25_ntop(const patty_ax25_addr *addr, char *dest, size_t len) { @@ -118,29 +103,16 @@ int patty_ax25_ntop(const patty_ax25_addr *addr, } if (ssid) { - int place = 2; + int formatted; - if (o == len) { - goto error_overflow; - } - - dest[o++] = '-'; - - while (place--) { - int div = expt(10, place), - num = ssid / div; - - if (num) { - if (o == len) { - goto error_overflow; - } - - dest[o++] = '0' + num; - } + if ((formatted = snprintf(&dest[o], 1 + len - o, "-%d", ssid)) < 0) { + goto error_format_ssid; + } else { + o += formatted; } } - if (o == len) { + if (o > len) { goto error_overflow; } @@ -148,6 +120,7 @@ int patty_ax25_ntop(const patty_ax25_addr *addr, return 0; +error_format_ssid: error_overflow: errno = EOVERFLOW;