summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-06-16 11:37:30 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-06-16 11:54:14 +0200
commitebee98f68ab4da8ebc3978c81118d77aa44e2ee2 (patch)
treeaf1f42c78873e72239ec24b3c8b7e48c95469fbe
parentcfcdd1c0e532bbd8815a4003311f1cd7ef21156b (diff)
downloadgnutls-ebee98f68ab4da8ebc3978c81118d77aa44e2ee2.tar.gz
dtls: corrected reconstruction of handshake packets received out of order
That is, when the handshake packet is split into multiple different chunks and received out of order, make sure that reconstruction occurs properly. Reported by Guillaume Roguez.
-rw-r--r--lib/gnutls_buffers.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c
index 37d0a89234..9b8286a916 100644
--- a/lib/gnutls_buffers.c
+++ b/lib/gnutls_buffers.c
@@ -992,14 +992,14 @@ static int merge_handshake_packet(gnutls_session_t session,
}
}
- if (exists == 0)
+ if (!exists)
pos = session->internals.handshake_recv_buffer_size;
if (pos >= MAX_HANDSHAKE_MSGS)
return
gnutls_assert_val(GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS);
- if (exists == 0) {
+ if (!exists) {
if (hsk->length > 0 && hsk->end_offset > 0
&& hsk->end_offset - hsk->start_offset + 1 !=
hsk->length) {
@@ -1030,7 +1030,7 @@ static int merge_handshake_packet(gnutls_session_t session,
if (hsk->start_offset <
session->internals.handshake_recv_buffer[pos].
start_offset
- && hsk->end_offset >=
+ && hsk->end_offset + 1 >=
session->internals.handshake_recv_buffer[pos].
start_offset) {
memcpy(&session->internals.
@@ -1187,7 +1187,7 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session)
gnutls_assert_val
(GNUTLS_E_UNEXPECTED_PACKET);
- /* if we have a half received message the complete it.
+ /* if we have a half received message then complete it.
*/
remain = recv_buf[0].length -
recv_buf[0].data.length;