From ebee98f68ab4da8ebc3978c81118d77aa44e2ee2 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Thu, 16 Jun 2016 11:37:30 +0200 Subject: 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. --- lib/gnutls_buffers.c | 8 ++++---- 1 file 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; -- cgit v1.2.1