app-layer: fix transaction cleanup

Fix a 'skipped' transaction early in the list leading to all further
transactions getting skipped, even if they were fully processed and
ready to be cleaned up.
pull/5816/head
Victor Julien 5 years ago
parent 62e665c848
commit 8baef60d60

@ -922,6 +922,7 @@ void AppLayerParserTransactionsCleanup(Flow *f)
if (ires.tx_ptr == NULL)
break;
bool tx_skipped = false;
void *tx = ires.tx_ptr;
i = ires.tx_id; // actual tx id for the tx the IterFunc returned
@ -950,7 +951,7 @@ void AppLayerParserTransactionsCleanup(Flow *f)
if (!(detect_flags_ts & APP_LAYER_TX_INSPECTED_FLAG)) {
SCLogDebug("%p/%"PRIu64" skipping: TS inspect not done: ts:%"PRIx64,
tx, i, detect_flags_ts);
skipped = true;
tx_skipped = skipped = true;
} else {
inspected = true;
}
@ -960,7 +961,7 @@ void AppLayerParserTransactionsCleanup(Flow *f)
if (!(detect_flags_tc & APP_LAYER_TX_INSPECTED_FLAG)) {
SCLogDebug("%p/%"PRIu64" skipping: TC inspect not done: tc:%"PRIx64,
tx, i, detect_flags_tc);
skipped = true;
tx_skipped = skipped = true;
} else {
inspected = true;
}
@ -969,7 +970,8 @@ void AppLayerParserTransactionsCleanup(Flow *f)
// If not a unidirectional transaction both sides are required to have
// been inspected.
if (!is_unidir && skipped) {
if (!is_unidir && tx_skipped) {
SCLogDebug("%p/%" PRIu64 " !is_unidir && tx_skipped", tx, i);
goto next;
}
@ -977,7 +979,8 @@ void AppLayerParserTransactionsCleanup(Flow *f)
// inspected, which the inspected flag tells us. This is also guarded
// with skip to limit this check to transactions that actually had the
// tx inspected flag checked.
if (is_unidir && skipped && !inspected) {
if (is_unidir && tx_skipped && !inspected) {
SCLogDebug("%p/%" PRIu64 " is_unidir && tx_skipped && !inspected", tx, i);
goto next;
}

Loading…
Cancel
Save