summaryrefslogtreecommitdiffstats
path: root/lib/libssl/src/crypto/asn1/a_enum.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libssl/src/crypto/asn1/a_enum.c')
-rw-r--r--lib/libssl/src/crypto/asn1/a_enum.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/libssl/src/crypto/asn1/a_enum.c b/lib/libssl/src/crypto/asn1/a_enum.c
index 8a315fa3714..ad8f0ffd1ab 100644
--- a/lib/libssl/src/crypto/asn1/a_enum.c
+++ b/lib/libssl/src/crypto/asn1/a_enum.c
@@ -151,7 +151,17 @@ ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai)
else ret->type=V_ASN1_ENUMERATED;
j=BN_num_bits(bn);
len=((j == 0)?0:((j/8)+1));
- ret->data=(unsigned char *)OPENSSL_malloc(len+4);
+ if (ret->length < len+4)
+ {
+ unsigned char *new_data=OPENSSL_realloc(ret->data, len+4);
+ if (!new_data)
+ {
+ ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ ret->data=new_data;
+ }
+
ret->length=BN_bn2bin(bn,ret->data);
return(ret);
err: