Check if num is 0 before trying to malloc memory. Otherwise for client hellos without...
authordyrock <zeyuany@gmail.com>
Mon, 15 Apr 2019 16:01:58 +0000 (11:01 -0500)
committerMatt Caswell <matt@openssl.org>
Fri, 19 Apr 2019 08:55:47 +0000 (09:55 +0100)
Reviewed-by: Paul Yang <yang.yang@baishancloud.com>
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8756)

(cherry picked from commit 6fda11ae5a06e28fd9463e5afb60735d074904b3)

doc/man3/SSL_CTX_set_client_hello_cb.pod
ssl/ssl_lib.c

index 6824b5b8d1a4c36b36d07b9dccda73c76c82bdd3..585127db1bc9d399f862c6a7aa88b1cef9fb873d 100644 (file)
@@ -65,6 +65,8 @@ both required, and on success the caller must release the storage allocated for
 B<*out> using OPENSSL_free().  The contents of B<*out> is an array of integers
 holding the numerical value of the TLS extension types in the order they appear
 in the ClientHello.  B<*outlen> contains the number of elements in the array.
+In situations when the ClientHello has no extensions, the function will return
+success with B<*out> set to NULL and B<*outlen> set to 0.
 
 =head1 NOTES
 
index 4440a9ffe9beffa5954bc2eb40fd09684636e80c..d7e1f328d60aeeb4bdba03708b484db1c1e581de 100644 (file)
@@ -5070,6 +5070,11 @@ int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
         if (ext->present)
             num++;
     }
+    if (num == 0) {
+        *out = NULL;
+        *outlen = 0;
+        return 1;
+    }
     if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL) {
         SSLerr(SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT,
                ERR_R_MALLOC_FAILURE);