projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't leak memory on error in b2i_rsa
[openssl.git]
/
crypto
/
pem
/
pvkfmt.c
diff --git
a/crypto/pem/pvkfmt.c
b/crypto/pem/pvkfmt.c
index 634cc5924d8bab63c84cbad1215f206813271e49..85ab677a21b8956ed6cb7899d69716b0423f406d 100644
(file)
--- a/
crypto/pem/pvkfmt.c
+++ b/
crypto/pem/pvkfmt.c
@@
-356,6
+356,7
@@
static EVP_PKEY *b2i_rsa(const unsigned char **in,
const unsigned char *pin = *in;
EVP_PKEY *ret = NULL;
BIGNUM *e = NULL, *n = NULL, *d = NULL;
const unsigned char *pin = *in;
EVP_PKEY *ret = NULL;
BIGNUM *e = NULL, *n = NULL, *d = NULL;
+ BIGNUM *p = NULL, *q = NULL, *dmp1 = NULL, *dmq1 = NULL, *iqmp = NULL;
RSA *rsa = NULL;
unsigned int nbyte, hnbyte;
nbyte = (bitlen + 7) >> 3;
RSA *rsa = NULL;
unsigned int nbyte, hnbyte;
nbyte = (bitlen + 7) >> 3;
@@
-372,7
+373,6
@@
static EVP_PKEY *b2i_rsa(const unsigned char **in,
if (!read_lebn(&pin, nbyte, &n))
goto memerr;
if (!ispub) {
if (!read_lebn(&pin, nbyte, &n))
goto memerr;
if (!ispub) {
- BIGNUM *p = NULL, *q = NULL, *dmp1 = NULL, *dmq1 = NULL, *iqmp = NULL;
if (!read_lebn(&pin, hnbyte, &p))
goto memerr;
if (!read_lebn(&pin, hnbyte, &q))
if (!read_lebn(&pin, hnbyte, &p))
goto memerr;
if (!read_lebn(&pin, hnbyte, &q))
@@
-396,6
+396,14
@@
static EVP_PKEY *b2i_rsa(const unsigned char **in,
return ret;
memerr:
PEMerr(PEM_F_B2I_RSA, ERR_R_MALLOC_FAILURE);
return ret;
memerr:
PEMerr(PEM_F_B2I_RSA, ERR_R_MALLOC_FAILURE);
+ BN_free(e);
+ BN_free(n);
+ BN_free(p);
+ BN_free(q);
+ BN_free(dmp1);
+ BN_free(dmq1);
+ BN_free(iqmp);
+ BN_free(d);
RSA_free(rsa);
EVP_PKEY_free(ret);
return NULL;
RSA_free(rsa);
EVP_PKEY_free(ret);
return NULL;