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:37:30 +0200
commitddb5a53cbd6e570d745fa7f61f57ae2ebe63891b (patch)
tree7f48d4e6c634b34677d971a0671d9108742b8e99
parent2804b7333595e25a4a7ce732eaf3f4ce3302b088 (diff)
downloadgnutls-ddb5a53cbd6e570d745fa7f61f57ae2ebe63891b.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/buffers.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/buffers.c b/lib/buffers.c
index f0faa709ae..756969903e 100644
--- a/lib/buffers.c
+++ b/lib/buffers.c
@@ -995,14 +995,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) {
@@ -1033,7 +1033,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.
@@ -1193,7 +1193,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;