]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
discard unexpected buffered changecipherspec
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 14 Feb 2012 16:59:12 +0000 (17:59 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 14 Feb 2012 16:59:12 +0000 (17:59 +0100)
lib/gnutls_buffers.c
lib/gnutls_record.c

index 80b5b22039cbc9ff5d8a17b4e80f935359ffce71..83a42326703ab3a4faa00e1ae052f6ec27d70524 100644 (file)
@@ -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;
index 4a75b10f99ef889ea291626fa1fbf5ed6ecf5c9e..6e4406a57ab290fe898d319c7e86b7fb650ae96a 100644 (file)
@@ -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;
         }