[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 <git@mareo.fr> Debugged-by: Marin Hannache <git@mareo.fr> Tested-by: Marin Hannache <git@mareo.fr> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
6ad05aa319
commit
49d14f0d8d
|
@ -51,10 +51,14 @@ void base16_encode ( const uint8_t *raw, size_t len, char *encoded ) {
|
||||||
char *encoded_bytes = encoded;
|
char *encoded_bytes = encoded;
|
||||||
size_t remaining = len;
|
size_t remaining = len;
|
||||||
|
|
||||||
|
/* Encode each byte */
|
||||||
for ( ; remaining-- ; encoded_bytes += 2 ) {
|
for ( ; remaining-- ; encoded_bytes += 2 ) {
|
||||||
sprintf ( encoded_bytes, "%02x", *(raw_bytes++) );
|
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 ( "Base16-encoded to \"%s\":\n", encoded );
|
||||||
DBG_HDA ( 0, raw, len );
|
DBG_HDA ( 0, raw, len );
|
||||||
assert ( strlen ( encoded ) == base16_encoded_len ( len ) );
|
assert ( strlen ( encoded ) == base16_encoded_len ( len ) );
|
||||||
|
|
Reference in New Issue