]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
fixes in EOF handling in handshake.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 29 Jul 2001 23:21:31 +0000 (23:21 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 29 Jul 2001 23:21:31 +0000 (23:21 +0000)
lib/gnutls_handshake.c
lib/gnutls_record.c

index 7d86a592ba3506e839b3574a98827fdc9247ee2d..476e419e0d32da89b02e0202a844092d6c708586 100644 (file)
@@ -633,7 +633,7 @@ int _gnutls_recv_handshake(SOCKET cd, GNUTLS_STATE state, uint8 ** data,
        if (ret <= 0) {
                gnutls_assert();
                gnutls_free(dataptr);
-               return ret;
+               return (ret < 0)?ret:GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
        }
        if (ret != SSL2_HEADERS) {
                gnutls_assert();
@@ -652,7 +652,7 @@ int _gnutls_recv_handshake(SOCKET cd, GNUTLS_STATE state, uint8 ** data,
                if (ret <= 0) {
                        gnutls_assert();
                        gnutls_free(dataptr);
-                       return ret;
+                       return (ret<0)?ret:GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
                }
                if (ret != HANDSHAKE_HEADERS_SIZE - SSL2_HEADERS) {
                        gnutls_assert();
@@ -1429,7 +1429,7 @@ static int _gnutls_recv_handshake_final(SOCKET cd, GNUTLS_STATE state,
        if (ret <= 0) {
                ERR("recv ChangeCipherSpec", ret);
                gnutls_assert();
-               return ret;
+               return (ret<0)?ret:GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
        }
 
        /* Initialize the connection state (start encryption) - in case of server */
index 8ad7b9db60d3d0ee30c3a1864705bd31531dcfce..ce203399ca396c2540d6c07b2a18675712ac905c 100644 (file)
@@ -808,9 +808,20 @@ ssize_t gnutls_recv_int(SOCKET cd, GNUTLS_STATE state, ContentType type, Handsha
                        
                        return GNUTLS_E_UNEXPECTED_PACKET;
                case GNUTLS_APPLICATION_DATA:
+#if 0                  
                        /* even if data is unexpected put it into the buffer */
                        gnutls_insertDataBuffer(recv_type, state, (void *) tmpdata, tmplen);
                        /* no peeked data to clear since this packet was unexpected */
+#endif
+                       /* We no longer assume this as normal, since
+                        * in this case we don't leave data into kernel
+                        * buffer, thus select() will not return.
+                        * Return an error for now, and we'll handle
+                        * it if there is a need for it.
+                        */
+                       gnutls_assert();
+                       gnutls_free(tmpdata);
+                       return GNUTLS_E_UNEXPECTED_PACKET;
 
                        break;
                case GNUTLS_HANDSHAKE: