X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fasn1%2Fasn_pack.c;h=1f5be531896f6056cedb8cd36a23f7c4f672d72e;hp=7c302028c87321abaabddf9c8fb9f8d088a0844d;hb=69e2bd32efb756b59cea75af22d869679c448e91;hpb=fe71bb3ad97ed01ccf92812891cc2bc3ef3dce76 diff --git a/crypto/asn1/asn_pack.c b/crypto/asn1/asn_pack.c index 7c302028c8..1f5be53189 100644 --- a/crypto/asn1/asn_pack.c +++ b/crypto/asn1/asn_pack.c @@ -17,28 +17,35 @@ ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct) { ASN1_STRING *octmp; - if (oct == NULL|| *oct== NULL) { + if (oct == NULL || *oct == NULL) { if ((octmp = ASN1_STRING_new()) == NULL) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE); return NULL; } - if (oct) - *oct = octmp; - } else + } else { octmp = *oct; + } OPENSSL_free(octmp->data); octmp->data = NULL; if ((octmp->length = ASN1_item_i2d(obj, &octmp->data, it)) == 0) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ASN1_R_ENCODE_ERROR); - return NULL; + goto err; } - if (!octmp->data) { + if (octmp->data == NULL) { ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } + + if (oct != NULL && *oct == NULL) + *oct = octmp; + return octmp; + err: + if (oct == NULL || *oct == NULL) + ASN1_STRING_free(octmp); + return NULL; } /* Extract an ASN1 object from an ASN1_STRING */