diff --git a/src/rose/stream.c b/src/rose/stream.c index 31224276..c68cd8ab 100644 --- a/src/rose/stream.c +++ b/src/rose/stream.c @@ -413,13 +413,9 @@ void ensureStreamNeatAndTidy(const struct RoseEngine *t, char *state, static really_inline void do_rebuild(const struct RoseEngine *t, struct hs_scratch *scratch) { + assert(t->drmatcherOffset); assert(!can_stop_matching(scratch)); - if (!t->drmatcherOffset) { - DEBUG_PRINTF("no delayed rebuild table\n"); - return; - } - const struct HWLM *hwlm = getByOffset(t, t->drmatcherOffset); size_t len = MIN(scratch->core_info.hlen, t->delayRebuildLength); const u8 *buf = scratch->core_info.hbuf + scratch->core_info.hlen - len; @@ -641,17 +637,14 @@ void roseStreamExec(const struct RoseEngine *t, struct hs_scratch *scratch) { rebuild, scratch->core_info.status, t->maxFloatingDelayedMatch, offset); - if (!flen) { - if (rebuild) { /* rebuild floating delayed match stuff */ - do_rebuild(t, scratch); - } - goto flush_delay_and_exit; - } - if (rebuild) { /* rebuild floating delayed match stuff */ do_rebuild(t, scratch); } + if (!flen) { + goto flush_delay_and_exit; + } + if (flen + offset <= t->floatingMinDistance) { DEBUG_PRINTF("skip FLOATING: before floating min\n"); goto flush_delay_and_exit;