]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[base16] Ensure base16_encode() always terminates its result string
authorMichael Brown <mcb30@ipxe.org>
Sun, 14 Jul 2013 22:06:45 +0000 (00:06 +0200)
committerMichael Brown <mcb30@ipxe.org>
Sun, 14 Jul 2013 22:06:45 +0000 (00:06 +0200)
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>
src/core/base16.c

index 7fa4b20094406e4cae1847b9b68a21724525c703..2544bd7fbd7ce1566601bec6ac1788107aba90ad 100644 (file)
@@ -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 ) );