X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=ssl%2Frecord%2Fssl3_buffer.c;h=7685e69262b56c1571fdf2711a3d75e82e9a50a4;hp=2ea55c8ba48dd77dbe3e1c9f40473bf0fabd96c0;hb=246b52f39aac36d1f4bc705c27c6354cb67041f4;hpb=bbcd6d7fe263361f18060c40cac676d6a6193ead diff --git a/ssl/record/ssl3_buffer.c b/ssl/record/ssl3_buffer.c index 2ea55c8ba4..7685e69262 100644 --- a/ssl/record/ssl3_buffer.c +++ b/ssl/record/ssl3_buffer.c @@ -110,19 +110,32 @@ */ #include "../ssl_locl.h" +#include "record_locl.h" void SSL3_BUFFER_set_data(SSL3_BUFFER *b, const unsigned char *d, int n) { - if(d != NULL) + if (d != NULL) memcpy(b->buf, d, n); b->left = n; b->offset = 0; } +/* + * Clear the contents of an SSL3_BUFFER but retain any memory allocated + */ +void SSL3_BUFFER_clear(SSL3_BUFFER *b) +{ + unsigned char *buf = b->buf; + size_t len = b->len; + + memset(b, 0, sizeof(*b)); + b->buf = buf; + b->len = len; +} + void SSL3_BUFFER_release(SSL3_BUFFER *b) { - if (b->buf != NULL) - OPENSSL_free(b->buf); + OPENSSL_free(b->buf); b->buf = NULL; } @@ -134,7 +147,7 @@ int ssl3_setup_read_buffer(SSL *s) b = RECORD_LAYER_get_rbuf(&s->rlayer); - if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) + if (SSL_IS_DTLS(s)) headerlen = DTLS1_RT_HEADER_LENGTH; else headerlen = SSL3_RT_HEADER_LENGTH; @@ -160,7 +173,7 @@ int ssl3_setup_read_buffer(SSL *s) b->len = len; } - s->packet = &(b->buf[0]); + RECORD_LAYER_set_packet(&s->rlayer, &(b->buf[0])); return 1; err: @@ -176,7 +189,7 @@ int ssl3_setup_write_buffer(SSL *s) wb = RECORD_LAYER_get_wbuf(&s->rlayer); - if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) + if (SSL_IS_DTLS(s)) headerlen = DTLS1_RT_HEADER_LENGTH + 1; else headerlen = SSL3_RT_HEADER_LENGTH; @@ -223,10 +236,8 @@ int ssl3_release_write_buffer(SSL *s) wb = RECORD_LAYER_get_wbuf(&s->rlayer); - if (wb->buf != NULL) { - OPENSSL_free(wb->buf); - wb->buf = NULL; - } + OPENSSL_free(wb->buf); + wb->buf = NULL; return 1; } @@ -235,9 +246,7 @@ int ssl3_release_read_buffer(SSL *s) SSL3_BUFFER *b; b = RECORD_LAYER_get_rbuf(&s->rlayer); - if (b->buf != NULL) { - OPENSSL_free(b->buf); - b->buf = NULL; - } + OPENSSL_free(b->buf); + b->buf = NULL; return 1; }