From: Michael Brown Date: Sun, 14 Jul 2013 22:06:45 +0000 (+0200) Subject: [base16] Ensure base16_encode() always terminates its result string X-Git-Tag: v1.20.1~1477 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49d14f0d8d9291e3a98c6bfd9005b3c6bb85e6c8;p=thirdparty%2Fipxe.git [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 --- diff --git a/src/core/base16.c b/src/core/base16.c index 7fa4b2009..2544bd7fb 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 ) );