asn1_item_embed_new(): if locking failed, don't call asn1_item_embed_free()
asn1_item_embed_free() will try unlocking and fail in this case, and since the new item was just allocated on the heap, free it directly with OPENSSL_free() instead. Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de> (Merged from https://github.com/openssl/openssl/pull/4579)
This commit is contained in:
parent
03996c19c3
commit
fe6fcd3154
1 changed files with 7 additions and 2 deletions
|
@ -124,8 +124,13 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
|
||||||
goto memerr;
|
goto memerr;
|
||||||
}
|
}
|
||||||
/* 0 : init. lock */
|
/* 0 : init. lock */
|
||||||
if (asn1_do_lock(pval, 0, it) < 0)
|
if (asn1_do_lock(pval, 0, it) < 0) {
|
||||||
goto memerr2;
|
if (!embed) {
|
||||||
|
OPENSSL_free(*pval);
|
||||||
|
*pval = NULL;
|
||||||
|
}
|
||||||
|
goto memerr;
|
||||||
|
}
|
||||||
asn1_enc_init(pval, it);
|
asn1_enc_init(pval, it);
|
||||||
for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
|
for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
|
||||||
pseqval = asn1_get_field_ptr(pval, tt);
|
pseqval = asn1_get_field_ptr(pval, tt);
|
||||||
|
|
Loading…
Reference in a new issue