#include "flow.h"
#include "flow-private.h"
+#ifdef DEBUG
+#include "util-exception-policy.h"
+#endif
+
#include "util-profiling.h"
/** tag signature we use for tag alerts */
*/
static uint16_t AlertQueueExpand(DetectEngineThreadCtx *det_ctx)
{
+#ifdef DEBUG
+ if (unlikely(g_eps_is_alert_queue_fail_mode))
+ return det_ctx->alert_queue_capacity;
+#endif
uint16_t new_cap = det_ctx->alert_queue_capacity * 2;
void *tmp_queue = SCRealloc(det_ctx->alert_queue, (size_t)(sizeof(PacketAlert) * new_cap));
if (unlikely(tmp_queue == NULL)) {
{"simulate-packet-tcp-reassembly-memcap", required_argument, 0, 0},
{"simulate-packet-tcp-ssn-memcap", required_argument, 0, 0},
{"simulate-packet-defrag-memcap", required_argument, 0, 0},
+ {"simulate-alert-queue-realloc-failure", 0, 0, 0},
{NULL, 0, NULL, 0}
};
uint64_t g_eps_stream_reassembly_memcap = UINT64_MAX;
uint64_t g_eps_flow_memcap = UINT64_MAX;
uint64_t g_eps_defrag_memcap = UINT64_MAX;
+bool g_eps_is_alert_queue_fail_mode = false;
/* 1: parsed, 0: not for us, -1: error */
int ExceptionSimulationCommandlineParser(const char *name, const char *arg)
return TM_ECODE_FAILED;
}
g_eps_defrag_memcap = pkt_num;
+ } else if (strcmp(name, "simulate-alert-queue-realloc-failure") == 0) {
+ g_eps_is_alert_queue_fail_mode = true;
} else {
// not for us
return 0;
extern uint64_t g_eps_stream_reassembly_memcap;
extern uint64_t g_eps_flow_memcap;
extern uint64_t g_eps_defrag_memcap;
+extern bool g_eps_is_alert_queue_fail_mode;
#endif
int ExceptionSimulationCommandlineParser(const char *name, const char *arg);