Fixed crash (SIGSEGV) when freeing of ex_data stumbles upon a NULL-pointer.
[openssl.git] / crypto / ex_data.c
index f96a517..25e79dc 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)