diff options
author | Bodo Möller <bodo@openssl.org> | 2001-10-22 13:59:36 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 2001-10-22 13:59:36 +0000 |
commit | 287973746edec466d6e9cac72e27cf2978da8629 (patch) | |
tree | d81a8c8dfdf8f8cf6ffadcebce919a4ac30f98ea /ssl/s3_enc.c | |
parent | f1558bb4243d83781793ed758367bd71d0983a35 (diff) | |
download | openssl-new-287973746edec466d6e9cac72e27cf2978da8629.tar.gz |
Fix memory leak.
Diffstat (limited to 'ssl/s3_enc.c')
-rw-r--r-- | ssl/s3_enc.c | 15 |
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; |