int SSL_clear(SSL *s)
{
- unsigned char *rp;
- size_t rlen;
+ unsigned char *rp, *wp;
+ size_t rlen, wlen;
int read_ahead;
if (s->method == NULL) {
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));
+ wp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_wbuf(&s->rlayer));
+ wlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_wbuf(&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);
+ SSL3_BUFFER_set_buf(RECORD_LAYER_get_wbuf(&s->rlayer), wp);
+ SSL3_BUFFER_set_len(RECORD_LAYER_get_wbuf(&s->rlayer), wlen);
/* 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
memset(s, 0, sizeof(SSL));
RECORD_LAYER_set_ssl(&s->rlayer, s);
+ SSL3_RECORD_clear(RECORD_LAYER_get_rrec(&s->rlayer));
+ SSL3_RECORD_clear(RECORD_LAYER_get_wrec(&s->rlayer));
#ifndef OPENSSL_NO_KRB5
s->kssl_ctx = kssl_ctx_new();
if (SSL3_BUFFER_is_initialised(RECORD_LAYER_get_rbuf(&s->rlayer)))
ssl3_release_read_buffer(s);
+ if (SSL3_BUFFER_is_initialised(RECORD_LAYER_get_wbuf(&s->rlayer)))
+ ssl3_release_write_buffer(s);
+ SSL3_RECORD_release(RECORD_LAYER_get_rrec(&s->rlayer));
if (s->ctx)
SSL_CTX_free(s->ctx);