buf2hexstr: properly deal with empty string
authorKurt Roeckx <kurt@roeckx.be>
Sun, 19 Jun 2016 12:16:16 +0000 (14:16 +0200)
committerKurt Roeckx <kurt@roeckx.be>
Tue, 21 Jun 2016 18:55:54 +0000 (20:55 +0200)
It wrote before the start of the string

found by afl

Reviewed-by: Richard Levitte <levitte@openssl.org>
MR: #2994

crypto/o_str.c
doc/crypto/OPENSSL_malloc.pod

index 29c324f..beabec0 100644 (file)
@@ -198,7 +198,12 @@ char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len)
     const unsigned char *p;
     int i;
 
-    if ((tmp = OPENSSL_malloc(len * 3 + 1)) == NULL) {
+    if (len == 0)
+    {
+        return OPENSSL_zalloc(1);
+    }
+
+    if ((tmp = OPENSSL_malloc(len * 3)) == NULL) {
         CRYPTOerr(CRYPTO_F_OPENSSL_BUF2HEXSTR, ERR_R_MALLOC_FAILURE);
         return NULL;
     }
index ba50221..5d254f7 100644 (file)
@@ -124,7 +124,7 @@ An odd number of hex digits is an error.
 
 OPENSSL_buf2hexstr() takes the specified buffer and length, and returns
 a hex string for value, or NULL on error.
-B<Buffer> cannot be NULL; if B<len> is NULL an empty string is returned.
+B<Buffer> cannot be NULL; if B<len> is 0 an empty string is returned.
 
 OPENSSL_hexchar2int() converts a character to the hexadecimal equivalent,
 or returns -1 on error.