Fixed crash (SIGSEGV) when freeing of ex_data stumbles upon a NULL-pointer.
authorMouse <mouse008@gmail.com>
Sat, 2 Jan 2016 04:30:02 +0000 (23:30 -0500)
committerRichard Levitte <levitte@openssl.org>
Wed, 13 Jan 2016 00:23:34 +0000 (01:23 +0100)
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/ex_data.c

index f96a51781ab065549a42dc8ece88aeaf551e836d..25e79dc2aa7bbdf3649516bf6f19858824be95cc 100644 (file)
@@ -522,8 +522,9 @@ static void int_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad)
     for (i = 0; i < mx; i++) {
         if (storage[i] && storage[i]->free_func) {
             ptr = CRYPTO_get_ex_data(ad, i);
-            storage[i]->free_func(obj, ptr, ad, i,
-                                  storage[i]->argl, storage[i]->argp);
+           if (ptr)
+               storage[i]->free_func(obj, ptr, ad, i,
+                                      storage[i]->argl, storage[i]->argp);
         }
     }
     if (storage)