]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stream: fix endless loop in traffic with gaps 5247/head
authorVictor Julien <victor@inliniac.net>
Thu, 30 Jul 2020 12:43:03 +0000 (14:43 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 30 Jul 2020 12:43:03 +0000 (14:43 +0200)
src/stream-tcp-reassemble.c

index 178c12dc60bfa83e6643a69a47ae624b3c4f8224..4c5858aee0971d682946c891319a137170aef4e9 100644 (file)
@@ -1108,6 +1108,7 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
             StatsIncr(tv, ra_ctx->counter_tcp_reass_gap);
 
             /* AppLayerHandleTCPData has likely updated progress. */
+            const bool no_progress_update = (app_progress == STREAM_APP_PROGRESS(*stream));
             app_progress = STREAM_APP_PROGRESS(*stream);
 
             /* a GAP also consumes 'data required'. TODO perhaps we can use
@@ -1121,8 +1122,10 @@ static int ReassembleUpdateAppLayer (ThreadVars *tv,
             }
             if (r < 0)
                 return 0;
-
+            if (no_progress_update)
+                break;
             continue;
+
         } else if (mydata == NULL || mydata_len == 0) {
             /* Possibly a gap, but no new data. */
             if ((p->flags & PKT_PSEUDO_STREAM_END) == 0 || ssn->state < TCP_CLOSED)