diff options
author | Matt Caswell <matt@openssl.org> | 2015-01-30 15:38:10 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-03-26 13:53:07 +0000 |
commit | 33d23b87a0d06bc497a13b1998737a1ce469a785 (patch) | |
tree | 10d2754d4689c02156420d9da424adc32a6e502d /ssl/ssl_lib.c | |
parent | 28d59af8740680c89e22ac19304457f2163e4371 (diff) |
Move s->s3->rrec into s->rlayer
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'ssl/ssl_lib.c')
-rw-r--r-- | ssl/ssl_lib.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index bec54eb17a..cb3492a5e4 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -189,6 +189,9 @@ SSL3_ENC_METHOD ssl3_undef_enc_method = { int SSL_clear(SSL *s) { + unsigned char *rp; + size_t rlen; + int read_ahead; if (s->method == NULL) { SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED); @@ -241,6 +244,20 @@ int SSL_clear(SSL *s) return (0); } else s->method->ssl_clear(s); + + read_ahead = RECORD_LAYER_get_read_ahead(&s->rlayer); + rp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_rbuf(&s->rlayer)); + rlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_rbuf(&s->rlayer)); + memset(&s->rlayer, 0, sizeof s->rlayer); + SSL3_BUFFER_set_buf(RECORD_LAYER_get_rbuf(&s->rlayer), rp); + SSL3_BUFFER_set_len(RECORD_LAYER_get_rbuf(&s->rlayer), rlen); + + /* Do I need to do this? As far as I can tell read_ahead did not + * previously get reset by SSL_clear...so I'll keep it that way..but is + * that right? + */ + RECORD_LAYER_set_read_ahead(&s->rlayer, read_ahead); + return (1); } @@ -599,6 +616,9 @@ void SSL_free(SSL *s) if (s->method != NULL) s->method->ssl_free(s); + if (SSL3_BUFFER_is_initialised(RECORD_LAYER_get_rbuf(&s->rlayer))) + ssl3_release_read_buffer(s); + if (s->ctx) SSL_CTX_free(s->ctx); |