diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-14 17:59:12 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-14 17:59:12 +0100 |
commit | 00ed0bf0e75462f52633cf85884968976162cd7b (patch) | |
tree | b088bb33cff66ae7ce71972eeb2b778c6b67e0fe | |
parent | ae7358b70a21324ca4f02365269dea4548a6224c (diff) | |
download | gnutls-00ed0bf0e75462f52633cf85884968976162cd7b.tar.gz |
discard unexpected buffered changecipherspec
-rw-r--r-- | lib/gnutls_buffers.c | 9 | ||||
-rw-r--r-- | lib/gnutls_record.c | 7 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index 80b5b22039..83a4232670 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -115,7 +115,14 @@ mbuffer_st* bufel; return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); if (type != bufel->type) - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + { + if (IS_DTLS(session)) + _gnutls_audit_log(session, "Discarded unexpected %s (%d) packet (expecting: %s (%d))\n", + _gnutls_packet2str(bufel->type), (int)bufel->type, + _gnutls_packet2str(type), (int)type); + _mbuffer_head_remove_bytes(&session->internals.record_buffer, msg.size); + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + } if (msg.size <= length) length = msg.size; diff --git a/lib/gnutls_record.c b/lib/gnutls_record.c index 4a75b10f99..6e4406a57a 100644 --- a/lib/gnutls_record.c +++ b/lib/gnutls_record.c @@ -499,6 +499,13 @@ check_buffers (gnutls_session_t session, content_type_t type, ret = _gnutls_record_buffer_get (type, session, data, data_size, seq); if (ret < 0) { + if (IS_DTLS(session)) + { + if (ret == GNUTLS_E_UNEXPECTED_PACKET) + { + ret = GNUTLS_E_AGAIN; + } + } gnutls_assert (); return ret; } |