mpm/ac-ks: apply offset/depth

pull/3072/head
Victor Julien 9 years ago
parent 531b57947b
commit facde3fe16

@ -946,6 +946,8 @@ int SCACTilePreparePatterns(MpmCtx *mpm_ctx)
ctx->pattern_list[i].patlen = len;
string_space += space;
}
ctx->pattern_list[i].offset = ctx->parray[i]->offset;
ctx->pattern_list[i].depth = ctx->parray[i]->depth;
ctx->pattern_list[i].pid = ctx->parray[i]->id;
/* ACPatternList now owns this memory */
@ -1177,7 +1179,7 @@ static int CheckMatch(const SCACTileSearchCtx *ctx, PrefilterRuleStore *pmq,
uint16_t state, int i, int matches,
uint8_t *mpm_bitarray)
{
SCACTilePatternList *pattern_list = ctx->pattern_list;
const SCACTilePatternList *pattern_list = ctx->pattern_list;
const uint8_t *buf_offset = buf + i + 1; // Lift out of loop
uint32_t no_of_entries = ctx->output_table[state].no_of_entries;
MpmPatternIndex *patterns = ctx->output_table[state].patterns;
@ -1196,13 +1198,18 @@ static int CheckMatch(const SCACTileSearchCtx *ctx, PrefilterRuleStore *pmq,
matches++;
continue;
}
const SCACTilePatternList *pat = &pattern_list[pindex];
const int offset = i - pat->patlen + 1;
if (offset < (int)pat->offset || (pat->depth && i > pat->depth))
continue;
/* Double check case-sensitve match now. */
if (patterns[k] >> 31) {
uint16_t patlen = pattern_list[pindex].patlen;
const uint16_t patlen = pat->patlen;
#ifdef __tile__
if (SCMemcmpNZ(pattern_list[pindex].cs, buf_offset - patlen, patlen) != 0) {
if (SCMemcmpNZ(pat->cs, buf_offset - patlen, patlen) != 0) {
#else
if (SCMemcmp(pattern_list[pindex].cs, buf_offset - patlen, patlen) != 0) {
if (SCMemcmp(pat->cs, buf_offset - patlen, patlen) != 0) {
#endif
/* Case-sensitive match failed. */
continue;

@ -30,6 +30,9 @@ typedef struct SCACTilePatternList_ {
uint8_t *cs;
uint16_t patlen;
uint16_t offset;
uint16_t depth;
/* Pattern Id */
uint32_t pid;

Loading…
Cancel
Save