]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Small cleanups in packet receive as well as a memory leak error.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 8 May 2014 14:59:21 +0000 (16:59 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 8 May 2014 14:59:21 +0000 (16:59 +0200)
The memory leak was uncovered by the Codenomicon TLS suite.

lib/gnutls_buffers.c
lib/gnutls_buffers.h
lib/gnutls_record.c

index 29c67eac567da4908154168afb0999b92a7ada71..1f4f3d6021e3b5f4f7eef59076d22bfd3d52947d 100644 (file)
@@ -65,7 +65,7 @@
 /* Buffers received packets of type APPLICATION DATA,
  * HANDSHAKE DATA and HEARTBEAT.
  */
-int
+void
 _gnutls_record_buffer_put(gnutls_session_t session,
                          content_type_t type, uint64 * seq,
                          mbuffer_st * bufel)
@@ -78,7 +78,7 @@ _gnutls_record_buffer_put(gnutls_session_t session,
        _gnutls_buffers_log("BUF[REC]: Inserted %d bytes of Data(%d)\n",
                            (int) bufel->msg.size, (int) type);
 
-       return 0;
+       return;
 }
 
 /**
index 887403f51ccc6624a8da9274899d29be48e91099..9846b2668606c5e42010df08717d505526d10f23 100644 (file)
@@ -24,7 +24,7 @@
 
 #define MBUFFER_FLUSH 1
 
-int
+void
 _gnutls_record_buffer_put(gnutls_session_t session,
                          content_type_t type, uint64 * seq,
                          mbuffer_st * bufel);
index 8c80a22c1e13bbf3da83e128dcb1baf5d792d6b3..9943756cb52321299aa505fea167a6faa706beaa 100644 (file)
@@ -784,10 +784,10 @@ record_add_to_buffers(gnutls_session_t session,
                        break;
 
                case GNUTLS_CHANGE_CIPHER_SPEC:
-                       if (!(IS_DTLS(session)))
-                               return
-                                   gnutls_assert_val
-                                   (GNUTLS_E_UNEXPECTED_PACKET);
+                       if (!(IS_DTLS(session))) {
+                               ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET);
+                               goto cleanup;
+                       }
 
                        _gnutls_record_buffer_put(session, recv->type, seq,
                                                  bufel);
@@ -818,16 +818,8 @@ record_add_to_buffers(gnutls_session_t session,
                            || (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO
                                && type == GNUTLS_HANDSHAKE)) {
                                /* even if data is unexpected put it into the buffer */
-                               if ((ret =
-                                    _gnutls_record_buffer_put(session,
-                                                              recv->type,
-                                                              seq,
-                                                              bufel)) <
-                                   0) {
-                                       gnutls_assert();
-                                       goto cleanup;
-                               }
-
+                               _gnutls_record_buffer_put(session, recv->type,
+                                                         seq, bufel);
                                return
                                    gnutls_assert_val
                                    (GNUTLS_E_GOT_APPLICATION_DATA);
@@ -891,14 +883,9 @@ record_add_to_buffers(gnutls_session_t session,
                            && bufel->htype ==
                            GNUTLS_HANDSHAKE_CLIENT_HELLO) {
                                gnutls_assert();
-                               ret =
-                                   _gnutls_record_buffer_put(session,
+                               _gnutls_record_buffer_put(session,
                                                              recv->type,
                                                              seq, bufel);
-                               if (ret < 0) {
-                                       gnutls_assert();
-                                       goto cleanup;
-                               }
                                return GNUTLS_E_REHANDSHAKE;
                        }
 
@@ -1296,9 +1283,9 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type,
                goto begin;
        }
 
-       if (record.v2)
+       if (record.v2) {
                decrypted->htype = GNUTLS_HANDSHAKE_CLIENT_HELLO_V2;
-       else {
+       else {
                uint8_t *p = _mbuffer_get_udata_ptr(decrypted);
                decrypted->htype = p[0];
        }
@@ -1307,7 +1294,7 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type,
            record_add_to_buffers(session, &record, type, htype,
                                  packet_sequence, decrypted);
 
-       /* bufel is now either deinitialized or buffered somewhere else */
+       /* decrypted is now either deinitialized or buffered somewhere else */
 
        if (ret < 0)
                return gnutls_assert_val(ret);