]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
protodetect: handle all gaps, even when depth is reached
authorPhilippe Antoine <contact@catenacyber.fr>
Mon, 23 Aug 2021 14:31:42 +0000 (16:31 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 5 Oct 2021 10:25:52 +0000 (12:25 +0200)
(cherry picked from commit 527415dba08f6f2af7fb93fdef19e3029cef88bd)

src/app-layer.c
src/stream-tcp-reassemble.c

index 82061462868b5c7b66f2251188c25aae4a463240..a01b44c1cb34cc445592c007d8a979d5b059831d 100644 (file)
@@ -325,6 +325,7 @@ static int TCPProtoDetect(ThreadVars *tv,
 #endif
 
     bool reverse_flow = false;
+    DEBUG_VALIDATE_BUG_ON(data == NULL && data_len > 0);
     PACKET_PROFILING_APP_PD_START(app_tctx);
     *alproto = AppLayerProtoDetectGetProto(app_tctx->alpd_tctx,
             f, data, data_len,
index 707a304482d86c57d67848225b921c91330e67f2..b426f00b6391020eb4b876c915ebb8716ef90f4f 100644 (file)
@@ -1150,7 +1150,9 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
 
         } else if (flags & STREAM_DEPTH) {
             // we're just called once with this flag, so make sure we pass it on
-
+            if (mydata == NULL && mydata_len > 0) {
+                mydata_len = 0;
+            }
         } else if (mydata == NULL || (mydata_len == 0 && ((flags & STREAM_EOF) == 0))) {
             /* Possibly a gap, but no new data. */
             if ((p->flags & PKT_PSEUDO_STREAM_END) == 0 || ssn->state < TCP_CLOSED)
@@ -1161,6 +1163,7 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
             SCLogDebug("%"PRIu64" got %p/%u", p->pcap_cnt, mydata, mydata_len);
             break;
         }
+        DEBUG_VALIDATE_BUG_ON(mydata == NULL && mydata_len > 0);
 
         SCLogDebug("stream %p data in buffer %p of len %u and offset %"PRIu64,
                 *stream, &(*stream)->sb, mydata_len, app_progress);