summaryrefslogtreecommitdiff
path: root/ssl/s3_enc.c
diff options
context:
space:
mode:
authorBodo Möller <bodo@openssl.org>2001-10-22 13:59:36 +0000
committerBodo Möller <bodo@openssl.org>2001-10-22 13:59:36 +0000
commit287973746edec466d6e9cac72e27cf2978da8629 (patch)
treed81a8c8dfdf8f8cf6ffadcebce919a4ac30f98ea /ssl/s3_enc.c
parentf1558bb4243d83781793ed758367bd71d0983a35 (diff)
downloadopenssl-new-287973746edec466d6e9cac72e27cf2978da8629.tar.gz
Fix memory leak.
Diffstat (limited to 'ssl/s3_enc.c')
-rw-r--r--ssl/s3_enc.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/ssl/s3_enc.c b/ssl/s3_enc.c
index 52d389ee0b..6d9f986d58 100644
--- a/ssl/s3_enc.c
+++ b/ssl/s3_enc.c
@@ -147,6 +147,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
const EVP_MD *m;
EVP_MD_CTX md;
int exp,n,i,j,k,cl;
+ int reuse_dd = 0;
exp=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher);
c=s->s3->tmp.new_sym_enc;
@@ -159,9 +160,9 @@ int ssl3_change_cipher_state(SSL *s, int which)
if (which & SSL3_CC_READ)
{
- if ((s->enc_read_ctx == NULL) &&
- ((s->enc_read_ctx=(EVP_CIPHER_CTX *)
- OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL))
+ if (s->enc_read_ctx != NULL)
+ reuse_dd = 1;
+ else if ((s->enc_read_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL)
goto err;
dd= s->enc_read_ctx;
s->read_hash=m;
@@ -190,9 +191,9 @@ int ssl3_change_cipher_state(SSL *s, int which)
}
else
{
- if ((s->enc_write_ctx == NULL) &&
- ((s->enc_write_ctx=(EVP_CIPHER_CTX *)
- OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL))
+ if (s->enc_write_ctx != NULL)
+ reuse_dd = 1;
+ else if ((s->enc_write_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL)
goto err;
dd= s->enc_write_ctx;
s->write_hash=m;
@@ -215,6 +216,8 @@ int ssl3_change_cipher_state(SSL *s, int which)
mac_secret= &(s->s3->write_mac_secret[0]);
}
+ if (reuse_dd)
+ EVP_CIPHER_CTX_cleanup(dd);
EVP_CIPHER_CTX_init(dd);
p=s->s3->tmp.key_block;