diff --git a/ssl/ssl_quic.c b/ssl/ssl_quic.c
index 0cbb43af39ac9..c5f20c20af7eb 100644
--- a/ssl/ssl_quic.c
+++ b/ssl/ssl_quic.c
@@ -341,20 +341,19 @@ int SSL_process_quic_post_handshake(SSL *ssl)
     }
 
     /* if there is no data, return success as BoringSSL */
-    if (ssl->quic_input_data_head == NULL)
-        return 1;
-    
-    /*
-     * This is always safe (we are sure to be at a record boundary) because
-     * SSL_read()/SSL_write() are never used for QUIC connections -- the
-     * application data is handled at the QUIC layer instead.
-     */
-    ossl_statem_set_in_init(ssl, 1);
-    ret = ssl->handshake_func(ssl);
-    ossl_statem_set_in_init(ssl, 0);
-
-    if (ret <= 0)
-        return 0;
+    while (ssl->quic_input_data_head != NULL) {
+        /*
+         * This is always safe (we are sure to be at a record boundary) because
+         * SSL_read()/SSL_write() are never used for QUIC connections -- the
+         * application data is handled at the QUIC layer instead.
+         */
+        ossl_statem_set_in_init(ssl, 1);
+        ret = ssl->handshake_func(ssl);
+        ossl_statem_set_in_init(ssl, 0);
+
+        if (ret <= 0)
+            return 0;
+    }
     return 1;
 }
 
diff --git a/test/sslapitest.c b/test/sslapitest.c
index 1beaeb699c087..00ec738956775 100644
--- a/test/sslapitest.c
+++ b/test/sslapitest.c
@@ -7391,8 +7391,7 @@ static int test_quic_api_version(int clnt, int srvr)
         goto end;
 
     /* Deal with two NewSessionTickets */
-    if (!TEST_true(SSL_process_quic_post_handshake(clientssl))
-            || !TEST_true(SSL_process_quic_post_handshake(clientssl)))
+    if (!TEST_true(SSL_process_quic_post_handshake(clientssl)))
         goto end;
 
     /* Dummy handshake call should succeed */
@@ -7583,8 +7582,7 @@ static int quic_setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx,
         return 0;
 
     /* Deal with two NewSessionTickets */
-    if (!TEST_true(SSL_process_quic_post_handshake(*clientssl))
-            || !TEST_true(SSL_process_quic_post_handshake(*clientssl)))
+    if (!TEST_true(SSL_process_quic_post_handshake(*clientssl)))
         return 0;
 
     *sess = SSL_get1_session(*clientssl);