From 53917465180fb08f955337320d39b88758378948 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Wed, 21 Oct 2020 20:27:18 +0200 Subject: [PATCH] stream: bail early if no data after a gap --- src/stream-tcp-reassemble.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index 80de222e32..006d908455 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -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) {