Also check if we have d2i_public_key() function pointer.
Fixes https://github.com/openssl/openssl/pull/18355#issuecomment-
1144893289
Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18462)
return NULL;
}
decoder->base.algodef = algodef;
- decoder->base.parsed_propdef
- = ossl_parse_property(libctx, algodef->property_definition);
+ if ((decoder->base.parsed_propdef
+ = ossl_parse_property(libctx, algodef->property_definition)) == NULL) {
+ OSSL_DECODER_free(decoder);
+ return NULL;
+ }
for (; fns->function_id != 0; fns++) {
switch (fns->function_id) {
return NULL;
}
encoder->base.algodef = algodef;
- encoder->base.parsed_propdef
- = ossl_parse_property(libctx, algodef->property_definition);
+ if ((encoder->base.parsed_propdef
+ = ossl_parse_property(libctx, algodef->property_definition)) == NULL) {
+ OSSL_ENCODER_free(encoder);
+ return NULL;
+ }
for (; fns->function_id != 0; fns++) {
switch (fns->function_id) {
derp = der;
if (ctx->desc->d2i_PUBKEY != NULL)
key = ctx->desc->d2i_PUBKEY(NULL, &derp, der_len);
- else
+ else if (ctx->desc->d2i_public_key != NULL)
key = ctx->desc->d2i_public_key(NULL, &derp, der_len);
if (key == NULL && ctx->selection != 0) {
ERR_clear_last_mark();