From 3f7659eee9bff95ef3d34983d7b88eca08a71beb Mon Sep 17 00:00:00 2001 From: Clarence Date: Mon, 13 Sep 2021 12:38:49 +0800 Subject: [PATCH] tls: redo fix infinite loop. --- src/packet/packet_tls.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/packet/packet_tls.c b/src/packet/packet_tls.c index e1ccc1e7..ba63aae7 100644 --- a/src/packet/packet_tls.c +++ b/src/packet/packet_tls.c @@ -786,7 +786,7 @@ packet_tls_process_record_handshake(SSLConnection *conn, GBytes *data) } static GBytes * -packet_tls_process_record(SSLConnection *conn, GBytes *data) +packet_tls_process_record(SSLConnection *conn, GBytes *data, GBytes **out) { // No record data here! if (g_bytes_get_size(data) == 0) @@ -821,7 +821,7 @@ packet_tls_process_record(SSLConnection *conn, GBytes *data) case APPLICATION_DATA: if (conn->encrypted) { // Decrypt application data using MasterSecret - return packet_tls_process_record_decode(conn, fragment); + *out = packet_tls_process_record_decode(conn, fragment); } break; default: @@ -887,13 +887,12 @@ packet_dissector_tls_dissect(PacketDissector *self, Packet *packet, GBytes *data } else { // Process data segment! while (g_bytes_get_size(data) > 0) { - out = packet_tls_process_record(conn, data); - if (out == NULL) { + data = packet_tls_process_record(conn, data, &out); + if (data == NULL) { dissector->connections = g_slist_remove(dissector->connections, conn); packet_tls_connection_destroy(conn); break; } - data = out; } }