From 44c734e95c4242af5ccfd7e5c4653eb196705cb9 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Tue, 6 Oct 2015 22:53:48 +0100 Subject: [PATCH] embed support for CHOICE type Reviewed-by: Rich Salz --- crypto/asn1/tasn_fre.c | 6 ++++-- crypto/asn1/tasn_new.c | 10 +++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/crypto/asn1/tasn_fre.c b/crypto/asn1/tasn_fre.c index bd955d9848..1e778858ac 100644 --- a/crypto/asn1/tasn_fre.c +++ b/crypto/asn1/tasn_fre.c @@ -125,8 +125,10 @@ static void asn1_item_embed_free(ASN1_VALUE **pval, const ASN1_ITEM *it, } if (asn1_cb) asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL); - OPENSSL_free(*pval); - *pval = NULL; + if (embed == 0) { + OPENSSL_free(*pval); + *pval = NULL; + } break; case ASN1_ITYPE_EXTERN: diff --git a/crypto/asn1/tasn_new.c b/crypto/asn1/tasn_new.c index 294912c188..13db8676fc 100644 --- a/crypto/asn1/tasn_new.c +++ b/crypto/asn1/tasn_new.c @@ -142,9 +142,13 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed) return 1; } } - *pval = OPENSSL_zalloc(it->size); - if (!*pval) - goto memerr; + if (embed) { + memset(*pval, 0, it->size); + } else { + *pval = OPENSSL_zalloc(it->size); + if (!*pval) + goto memerr; + } asn1_set_choice_selector(pval, -1, it); if (asn1_cb && !asn1_cb(ASN1_OP_NEW_POST, pval, it, NULL)) goto auxerr; -- 2.34.1