ENGINE_pkey_asn1_find_str(): don't assume an engine implements ASN1 method
authorRichard Levitte <levitte@openssl.org>
Thu, 31 May 2018 09:12:34 +0000 (11:12 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 31 May 2018 09:15:26 +0000 (11:15 +0200)
Just because an engine implements algorithm methods, that doesn't mean
it also implements the ASN1 method.  Therefore, be careful when looking
for an ASN1 method among all engines, don't try to use one that doesn't
exist.

Fixes #6381

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6383)

crypto/engine/tb_asnmth.c

index a1a9b88c43c8375dd147a17c4ed587502315ec32..59e4ebf762c8c31762acb9d9fc80ddac682255a7 100644 (file)
@@ -215,7 +215,7 @@ static void look_str_cb(int nid, STACK_OF(ENGINE) *sk, ENGINE *def, void *arg)
         ENGINE *e = sk_ENGINE_value(sk, i);
         EVP_PKEY_ASN1_METHOD *ameth;
         e->pkey_asn1_meths(e, &ameth, NULL, nid);
-        if (((int)strlen(ameth->pem_str) == lk->len) &&
+        if (ameth != NULL && ((int)strlen(ameth->pem_str) == lk->len) &&
             !strncasecmp(ameth->pem_str, lk->str, lk->len)) {
             lk->e = e;
             lk->ameth = ameth;