From 49d14f0d8d9291e3a98c6bfd9005b3c6bb85e6c8 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 15 Jul 2013 00:06:45 +0200 Subject: [PATCH] [base16] Ensure base16_encode() always terminates its result string base16_encode() will fail to generate a terminating NUL if the length of the raw data is zero, since the loop calling sprintf() will never execute. Fix by explicitly terminating the result with a NUL. Reported-by: Marin Hannache Debugged-by: Marin Hannache Tested-by: Marin Hannache Signed-off-by: Michael Brown --- src/core/base16.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/base16.c b/src/core/base16.c index 7fa4b200..2544bd7f 100644 --- a/src/core/base16.c +++ b/src/core/base16.c @@ -51,10 +51,14 @@ void base16_encode ( const uint8_t *raw, size_t len, char *encoded ) { char *encoded_bytes = encoded; size_t remaining = len; + /* Encode each byte */ for ( ; remaining-- ; encoded_bytes += 2 ) { sprintf ( encoded_bytes, "%02x", *(raw_bytes++) ); } + /* Ensure terminating NUL exists even if length was zero */ + *encoded_bytes = '\0'; + DBG ( "Base16-encoded to \"%s\":\n", encoded ); DBG_HDA ( 0, raw, len ); assert ( strlen ( encoded ) == base16_encoded_len ( len ) );