boyermoore: optimization with one alloc less

Fixes #1220
pull/4113/head
Philippe Antoine 6 years ago committed by Victor Julien
parent 5ff50773bd
commit 63deb8862f

@ -76,7 +76,7 @@ void BoyerMooreCtxToNocase(BmCtx *bm_ctx, uint8_t *needle, uint16_t needle_len)
*/
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);
@ -85,11 +85,6 @@ BmCtx *BoyerMooreCtxInit(const uint8_t *needle, uint16_t needle_len)
/* 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...");
@ -128,9 +123,6 @@ void BoyerMooreCtxDeInit(BmCtx *bmctx)
if (bmctx == NULL)
SCReturn;
if (bmctx->bmGs != NULL)
SCFree(bmctx->bmGs);
SCFree(bmctx);
SCReturn;

@ -33,7 +33,8 @@
/* 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 */

Loading…
Cancel
Save