]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stream: bail early if no data after a gap
authorVictor Julien <victor@inliniac.net>
Wed, 21 Oct 2020 18:27:18 +0000 (20:27 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 4 Nov 2020 15:30:17 +0000 (16:30 +0100)
src/stream-tcp-reassemble.c

index 80de222e329065344cf430b3da01b1ba92a83ff7..006d908455247af15b94e50c736eb3d910c3ebb3 100644 (file)
@@ -1089,12 +1089,18 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
     const uint8_t *mydata;
     uint32_t mydata_len;
     bool gap_ahead = false;
+    bool last_was_gap = false;
 
     while (1) {
         const uint8_t flags = StreamGetAppLayerFlags(ssn, *stream, p);
         bool check_for_gap_ahead = ((*stream)->data_required > 0);
         gap_ahead = GetAppBuffer(*stream, &mydata, &mydata_len,
                 app_progress, check_for_gap_ahead);
+        if (last_was_gap && mydata_len == 0) {
+            break;
+        }
+        last_was_gap = false;
+
         /* make sure to only deal with ACK'd data */
         mydata_len = AdjustToAcked(p, ssn, *stream, app_progress, mydata_len);
         DEBUG_VALIDATE_BUG_ON(mydata_len > (uint32_t)INT_MAX);
@@ -1126,6 +1132,7 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
                 return 0;
             if (no_progress_update)
                 break;
+            last_was_gap = true;
             continue;
 
         } else if (flags & STREAM_DEPTH) {