*/
BmCtx *BoyerMooreCtxInit(const uint8_t *needle, uint16_t needle_len)
{
- BmCtx *new = SCMalloc(sizeof(BmCtx));
+ BmCtx *new = SCMalloc(sizeof(BmCtx) + sizeof(uint16_t) * (needle_len + 1));
if (unlikely(new == NULL)) {
SCLogError(SC_ERR_FATAL, "Fatal error encountered in BoyerMooreCtxInit. Exiting...");
exit(EXIT_FAILURE);
/* Prepare bad chars */
PreBmBc(needle, needle_len, new->bmBc);
- new->bmGs = SCMalloc(sizeof(uint16_t) * (needle_len + 1));
- if (new->bmGs == NULL) {
- exit(EXIT_FAILURE);
- }
-
/* Prepare good Suffixes */
if (PreBmGs(needle, needle_len, new->bmGs) == -1) {
SCLogError(SC_ERR_FATAL, "Fatal error encountered in BooyerMooreCtxInit. Exiting...");
if (bmctx == NULL)
SCReturn;
- if (bmctx->bmGs != NULL)
- SCFree(bmctx->bmGs);
-
SCFree(bmctx);
SCReturn;
/* Context for booyer moore */
typedef struct BmCtx_ {
uint16_t bmBc[ALPHABET_SIZE];
- uint16_t *bmGs; // = SCMalloc(sizeof(int32_t)*(needlelen + 1));
+ //C99 "flexible array member"
+ uint16_t bmGs[]; // = SCMalloc(sizeof(int16_t)*(needlelen + 1));
} BmCtx;
/** Prepare and return a Boyer Moore context */