diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libcrypto/asn1/a_int.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c index 496704b9a5..edb243c021 100644 --- a/src/lib/libcrypto/asn1/a_int.c +++ b/src/lib/libcrypto/asn1/a_int.c | |||
@@ -397,7 +397,16 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai) | |||
397 | else ret->type=V_ASN1_INTEGER; | 397 | else ret->type=V_ASN1_INTEGER; |
398 | j=BN_num_bits(bn); | 398 | j=BN_num_bits(bn); |
399 | len=((j == 0)?0:((j/8)+1)); | 399 | len=((j == 0)?0:((j/8)+1)); |
400 | ret->data=(unsigned char *)OPENSSL_malloc(len+4); | 400 | if (ret->length < len+4) |
401 | { | ||
402 | unsigned char *new_data=OPENSSL_realloc(ret->data, len+4); | ||
403 | if (!new_data) | ||
404 | { | ||
405 | ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_MALLOC_FAILURE); | ||
406 | goto err; | ||
407 | } | ||
408 | ret->data=new_data; | ||
409 | } | ||
401 | ret->length=BN_bn2bin(bn,ret->data); | 410 | ret->length=BN_bn2bin(bn,ret->data); |
402 | /* Correct zero case */ | 411 | /* Correct zero case */ |
403 | if(!ret->length) | 412 | if(!ret->length) |