projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix DTLS1.2 buffers
[openssl.git]
/
ssl
/
record
/
ssl3_buffer.c
diff --git
a/ssl/record/ssl3_buffer.c
b/ssl/record/ssl3_buffer.c
index 65dcd8a2923e08a5e1e4e974b256d4d9ebac1c2b..7685e69262b56c1571fdf2711a3d75e82e9a50a4 100644
(file)
--- a/
ssl/record/ssl3_buffer.c
+++ b/
ssl/record/ssl3_buffer.c
@@
-110,19
+110,32
@@
*/
#include "../ssl_locl.h"
*/
#include "../ssl_locl.h"
+#include "record_locl.h"
-void SSL3_BUFFER_set_data(SSL3_BUFFER *b, unsigned char *d, int n)
+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;
}
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)
{
void SSL3_BUFFER_release(SSL3_BUFFER *b)
{
- if (b->buf != NULL)
- OPENSSL_free(b->buf);
+ OPENSSL_free(b->buf);
b->buf = NULL;
}
b->buf = NULL;
}
@@
-134,7
+147,7
@@
int ssl3_setup_read_buffer(SSL *s)
b = RECORD_LAYER_get_rbuf(&s->rlayer);
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;
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;
}
b->len = len;
}
-
s->packet = &(b->buf[0]
);
+
RECORD_LAYER_set_packet(&s->rlayer, &(b->buf[0])
);
return 1;
err:
return 1;
err:
@@
-176,7
+189,7
@@
int ssl3_setup_write_buffer(SSL *s)
wb = RECORD_LAYER_get_wbuf(&s->rlayer);
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;
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);
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;
}
return 1;
}
@@
-235,9
+246,7
@@
int ssl3_release_read_buffer(SSL *s)
SSL3_BUFFER *b;
b = RECORD_LAYER_get_rbuf(&s->rlayer);
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;
}
return 1;
}