return 0;
}
+// arbitrary value
+#define ALPROTO_MAXTX 4096
+
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
Flow * f;
}
AppLayerParserTransactionsCleanup(f);
+
+ if (f->alstate && f->alparser) {
+ // check if we have too many open transactions
+ const uint64_t total_txs = AppLayerParserGetTxCnt(f, f->alstate);
+ uint64_t min = 0;
+ AppLayerGetTxIterState state;
+ memset(&state, 0, sizeof(state));
+ uint64_t nbtx = 0;
+ AppLayerGetTxIteratorFunc IterFunc = AppLayerGetTxIterator(f->proto, f->alproto);
+ while (1) {
+ AppLayerGetTxIterTuple ires =
+ IterFunc(f->proto, f->alproto, f->alstate, min, total_txs, &state);
+ if (ires.tx_ptr == NULL)
+ break;
+ min = ires.tx_id + 1;
+ nbtx++;
+ if (nbtx > ALPROTO_MAXTX) {
+ printf("Too many open transactions for protocol %s\n",
+ AppProtoToString(f->alproto));
+ printf("Assertion failure: %s\n", AppProtoToString(f->alproto));
+ fflush(stdout);
+ abort();
+ }
+ }
+ }
}
alsize -= alnext - albuffer + 4;
albuffer = alnext + 4;