From 37e19771bbe9ff5e0c5a0c2fedfa356dcbc40627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gr=C3=B6ber?= Date: Wed, 24 Jun 2020 15:29:57 +0200 Subject: src: Handle negative snprintf return values properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently the BUFFER_SIZE macro doesn't take negative 'ret' values into account. A negative return should just be passed through to the caller, snprintf will already have set 'errno' properly. Signed-off-by: Daniel Gröber Signed-off-by: Pablo Neira Ayuso --- src/conntrack/api.c | 6 +++--- src/conntrack/snprintf.c | 3 +++ src/expect/snprintf.c | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/conntrack/api.c b/src/conntrack/api.c index ffa5216..78d7d61 100644 --- a/src/conntrack/api.c +++ b/src/conntrack/api.c @@ -1099,9 +1099,9 @@ int nfct_catch(struct nfct_handle *h) * print the message just after you receive the destroy event. If you want * more accurate timestamping, use NFCT_OF_TIMESTAMP. * - * This function returns the size of the information that _would_ have been - * written to the buffer, even if there was no room for it. Thus, the - * behaviour is similar to snprintf. + * On error, -1 is returned and errno is set appropiately. Otherwise the + * size of what _would_ be written is returned, even if the size of the + * buffer is insufficient. This behaviour is similar to snprintf. */ int nfct_snprintf(char *buf, unsigned int size, diff --git a/src/conntrack/snprintf.c b/src/conntrack/snprintf.c index 17ad885..eb26af4 100644 --- a/src/conntrack/snprintf.c +++ b/src/conntrack/snprintf.c @@ -85,6 +85,9 @@ int __snprintf_conntrack(char *buf, return -1; } + if (size < 0) + return size; + /* NULL terminated string */ buf[size+1 > len ? len-1 : size] = '\0'; diff --git a/src/expect/snprintf.c b/src/expect/snprintf.c index 3a104b5..8c2f3e4 100644 --- a/src/expect/snprintf.c +++ b/src/expect/snprintf.c @@ -30,6 +30,9 @@ int __snprintf_expect(char *buf, return -1; } + if (size < 0) + return size; + /* NULL terminated string */ buf[size+1 > len ? len-1 : size] = '\0'; -- cgit v1.2.3