diff options
author | Martin Willi <martin@strongswan.org> | 2008-11-04 13:01:36 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-11-04 13:01:36 +0000 |
commit | dcbea444eefe7ff50125fe6c326bbf7e34e64a2e (patch) | |
tree | 08d0d95663cdba49ab07daa30ad15908382d4f31 /src/libstrongswan/plugins/openssl | |
parent | 480be6436a1f40ca1157e92b0d0a08442fca88c8 (diff) | |
download | strongswan-dcbea444eefe7ff50125fe6c326bbf7e34e64a2e.tar.bz2 strongswan-dcbea444eefe7ff50125fe6c326bbf7e34e64a2e.tar.xz |
fixed memleak
Diffstat (limited to 'src/libstrongswan/plugins/openssl')
-rw-r--r-- | src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c index 205220a3f..c152b8233 100644 --- a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c +++ b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c @@ -74,9 +74,10 @@ openssl_rsa_public_key_t *openssl_rsa_public_key_create_from_n_e(BIGNUM *n, BIGN * Build an EMPSA PKCS1 signature described in PKCS#1 */ static bool build_emsa_pkcs1_signature(private_openssl_rsa_private_key_t *this, - int type, chunk_t data, chunk_t *signature) + int type, chunk_t data, chunk_t *out) { bool success = FALSE; + u_char *sig = NULL; u_int len; const EVP_MD *hasher = EVP_get_digestbynid(type); if (!hasher) @@ -106,15 +107,17 @@ static bool build_emsa_pkcs1_signature(private_openssl_rsa_private_key_t *this, goto error; } - *signature = chunk_alloc(RSA_size(this->rsa)); - - if (!EVP_SignFinal(ctx, signature->ptr, &len, key)) + sig = malloc(EVP_PKEY_size(key)); + if (EVP_SignFinal(ctx, sig, &len, key)) { - goto error; + out->ptr = sig; + out->len = len; + success = TRUE; + } + else + { + free(sig); } - signature->len = len; - - success = TRUE; error: if (key) |