Don't crash if we fail to find a serializer for the current provider
authorMatt Caswell <matt@openssl.org>
Fri, 6 Mar 2020 18:02:46 +0000 (18:02 +0000)
committerMatt Caswell <matt@openssl.org>
Wed, 11 Mar 2020 15:06:50 +0000 (15:06 +0000)
The code was assuming that a serializer would always be found - but this
may not be the case.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/11271)

crypto/serializer/serializer_pkey.c

index 1b6df1d..3f1eb58 100644 (file)
@@ -338,12 +338,14 @@ OSSL_SERIALIZER_CTX *OSSL_SERIALIZER_CTX_new_by_EVP_PKEY(const EVP_PKEY *pkey,
         OSSL_SERIALIZER_free(sel_data.first);
         OSSL_SERIALIZER_free(sel_data.desired);
 
         OSSL_SERIALIZER_free(sel_data.first);
         OSSL_SERIALIZER_free(sel_data.desired);
 
-        current_props =
-            ossl_parse_property(libctx, OSSL_SERIALIZER_properties(ser));
-        if (ossl_property_match_count(check, current_props) > 0)
-            selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+        if (ser != NULL) {
+            current_props =
+                ossl_parse_property(libctx, OSSL_SERIALIZER_properties(ser));
+            if (ossl_property_match_count(check, current_props) > 0)
+                selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+            ossl_property_free(current_props);
+        }
 
 
-        ossl_property_free(current_props);
         ossl_property_free(check);
     }
 
         ossl_property_free(check);
     }