updates to ac-gfbs search. Add new unittests + fix cases where we have 2 patterns that are same but one is CS and other CI + Use SCMemcmp for state < 65k instead of custom memcmp

remotes/origin/master-1.2.x
Anoop Saldanha 14 years ago committed by Victor Julien
parent 0920296aaa
commit efb4c27b1f

@ -467,6 +467,12 @@ static void SCACGfbsSetOutputState(int32_t state, uint32_t pid, MpmCtx *mpm_ctx)
{
SCACGfbsCtx *ctx = (SCACGfbsCtx *)mpm_ctx->ctx;
SCACGfbsOutputTable *output_state = &ctx->output_table[state];
uint32_t i = 0;
for (i = 0; i < output_state->no_of_entries; i++) {
if (output_state->pids[i] == pid)
return;
}
output_state->no_of_entries++;
output_state->pids = SCRealloc(output_state->pids,
@ -964,19 +970,28 @@ int SCACGfbsPreparePatterns(MpmCtx *mpm_ctx)
for (i = 0; i < mpm_ctx->pattern_cnt; i++) {
if (ctx->parray[i]->flags & MPM_PATTERN_FLAG_NOCASE) {
;
if (ctx->pid_pat_list[ctx->parray[i]->id].case_state == 0)
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 1;
else if (ctx->pid_pat_list[ctx->parray[i]->id].case_state == 1)
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 1;
else
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 3;
} else {
if (memcmp(ctx->parray[i]->original_pat, ctx->parray[i]->ci,
ctx->parray[i]->len) != 0) {
ctx->pid_pat_list[ctx->parray[i]->id].cs = SCMalloc(ctx->parray[i]->len);
if (ctx->pid_pat_list[ctx->parray[i]->id].cs == NULL) {
SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
exit(EXIT_FAILURE);
}
memcpy(ctx->pid_pat_list[ctx->parray[i]->id].cs,
ctx->parray[i]->original_pat, ctx->parray[i]->len);
ctx->pid_pat_list[ctx->parray[i]->id].patlen = ctx->parray[i]->len;
ctx->pid_pat_list[ctx->parray[i]->id].cs = SCMalloc(ctx->parray[i]->len);
if (ctx->pid_pat_list[ctx->parray[i]->id].cs == NULL) {
SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
exit(EXIT_FAILURE);
}
memcpy(ctx->pid_pat_list[ctx->parray[i]->id].cs,
ctx->parray[i]->original_pat, ctx->parray[i]->len);
ctx->pid_pat_list[ctx->parray[i]->id].patlen = ctx->parray[i]->len;
if (ctx->pid_pat_list[ctx->parray[i]->id].case_state == 0)
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 2;
else if (ctx->pid_pat_list[ctx->parray[i]->id].case_state == 2)
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 2;
else
ctx->pid_pat_list[ctx->parray[i]->id].case_state = 3;
}
}
@ -1241,18 +1256,23 @@ uint32_t SCACGfbsSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
uint32_t k = 0;
for (k = 0; k < no_of_pid_entries; k++) {
if (pids[k] & 0xFFFF0000) {
int ibuf = i;
for (j = pid_pat_list[pids[k] & 0x0000FFFF].patlen - 1; j >= 0; j--, ibuf--) {
if (buf[ibuf] != pid_pat_list[pids[k] & 0x0000FFFF].cs[j])
goto loop;
}
matches += MpmVerifyMatch(mpm_thread_ctx, pmq, pids[k] & 0x0000FFFF);
} else {
if (pmq == NULL) {
matches++;
continue;
if (SCMemcmp(pid_pat_list[pids[k] & 0x0000FFFF].cs,
buf + i - pid_pat_list[pids[k] & 0x0000FFFF].patlen + 1,
pid_pat_list[pids[k] & 0x0000FFFF].patlen) != 0) {
/* inside loop */
if (pid_pat_list[pids[k] & 0x0000FFFF].case_state != 3) {
continue;
}
}
if (pmq->pattern_id_bitarray[(pids[k] & 0x0000FFFF) / 8] & (1 << ((pids[k] & 0x0000FFFF) % 8))) {
;
} else {
pmq->pattern_id_bitarray[(pids[k] & 0x0000FFFF) / 8] |= (1 << ((pids[k] & 0x0000FFFF) % 8));
pmq->pattern_id_array[pmq->pattern_id_array_cnt++] = (pids[k] & 0x0000FFFF);
}
matches++;
} else {
if (pmq->pattern_id_bitarray[pids[k] / 8] & (1 << (pids[k] % 8))) {
;
} else {
@ -1365,9 +1385,9 @@ uint32_t SCACGfbsSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
buf + i - pid_pat_list[pids[k] & 0x0000FFFF].patlen + 1,
pid_pat_list[pids[k] & 0x0000FFFF].patlen) != 0) {
/* inside loop */
//if (pid_pat_list[pids[k] & 0x0000FFFF].case_state != 3) {
//continue;
//}
if (pid_pat_list[pids[k] & 0x0000FFFF].case_state != 3) {
continue;
}
continue;
}
@ -1489,6 +1509,7 @@ static int SCACGfbsTest01(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1497,11 +1518,12 @@ static int SCACGfbsTest01(void)
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghjiklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1511,6 +1533,7 @@ static int SCACGfbsTest01(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1519,6 +1542,7 @@ static int SCACGfbsTest02(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1527,11 +1551,12 @@ static int SCACGfbsTest02(void)
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abce", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghjiklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 0)
@ -1541,6 +1566,7 @@ static int SCACGfbsTest02(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1549,6 +1575,7 @@ static int SCACGfbsTest03(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1561,11 +1588,12 @@ static int SCACGfbsTest03(void)
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"bcde", 4, 0, 0, 1, 0, 0);
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"fghj", 4, 0, 0, 2, 0, 0);
PmqSetup(&pmq, 0, 3);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghjiklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 3)
@ -1575,6 +1603,7 @@ static int SCACGfbsTest03(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1583,6 +1612,7 @@ static int SCACGfbsTest04(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1592,11 +1622,12 @@ static int SCACGfbsTest04(void)
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"bcdegh", 6, 0, 0, 1, 0, 0);
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"fghjxyz", 7, 0, 0, 2, 0, 0);
PmqSetup(&pmq, 0, 3);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghjiklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1606,6 +1637,7 @@ static int SCACGfbsTest04(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1614,6 +1646,7 @@ static int SCACGfbsTest05(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1623,11 +1656,12 @@ static int SCACGfbsTest05(void)
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"fghJikl", 7, 0, 0, 2, 0, 0);
PmqSetup(&pmq, 0, 3);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghjiklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 3)
@ -1637,6 +1671,7 @@ static int SCACGfbsTest05(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1645,6 +1680,7 @@ static int SCACGfbsTest06(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1652,11 +1688,12 @@ static int SCACGfbsTest06(void)
SCACGfbsInitThreadCtx(&mpm_ctx, &mpm_thread_ctx, 0);
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcd";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1666,6 +1703,7 @@ static int SCACGfbsTest06(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1674,6 +1712,7 @@ static int SCACGfbsTest07(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1694,11 +1733,12 @@ static int SCACGfbsTest07(void)
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
30, 0, 0, 5, 0, 0);
/* total matches: 135 */
PmqSetup(&pmq, 0, 6);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 135)
@ -1708,6 +1748,7 @@ static int SCACGfbsTest07(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1716,6 +1757,7 @@ static int SCACGfbsTest08(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1724,10 +1766,11 @@ static int SCACGfbsTest08(void)
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)"a", 1);
if (cnt == 0)
@ -1737,6 +1780,7 @@ static int SCACGfbsTest08(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1745,6 +1789,7 @@ static int SCACGfbsTest09(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1753,10 +1798,11 @@ static int SCACGfbsTest09(void)
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"ab", 2, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)"ab", 2);
if (cnt == 1)
@ -1766,6 +1812,7 @@ static int SCACGfbsTest09(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1774,6 +1821,7 @@ static int SCACGfbsTest10(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1782,6 +1830,7 @@ static int SCACGfbsTest10(void)
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcdefgh", 8, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
@ -1790,7 +1839,7 @@ static int SCACGfbsTest10(void)
"abcdefgh"
"01234567890123456789012345678901234567890123456789"
"01234567890123456789012345678901234567890123456789";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1800,6 +1849,7 @@ static int SCACGfbsTest10(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1808,6 +1858,7 @@ static int SCACGfbsTest11(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1822,6 +1873,7 @@ static int SCACGfbsTest11(void)
goto end;
if (SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"hers", 4, 0, 0, 4, 0, 0) == -1)
goto end;
PmqSetup(&pmq, 0, 4);
if (SCACGfbsPreparePatterns(&mpm_ctx) == -1)
goto end;
@ -1829,21 +1881,22 @@ static int SCACGfbsTest11(void)
result = 1;
char *buf = "he";
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL, (uint8_t *)buf,
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq, (uint8_t *)buf,
strlen(buf)) == 1);
buf = "she";
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL, (uint8_t *)buf,
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq, (uint8_t *)buf,
strlen(buf)) == 2);
buf = "his";
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL, (uint8_t *)buf,
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq, (uint8_t *)buf,
strlen(buf)) == 1);
buf = "hers";
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL, (uint8_t *)buf,
result &= (SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq, (uint8_t *)buf,
strlen(buf)) == 2);
end:
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1852,6 +1905,7 @@ static int SCACGfbsTest12(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1862,11 +1916,12 @@ static int SCACGfbsTest12(void)
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"wxyz", 4, 0, 0, 0, 0, 0);
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"vwxyz", 5, 0, 0, 1, 0, 0);
PmqSetup(&pmq, 0, 2);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 2)
@ -1876,6 +1931,7 @@ static int SCACGfbsTest12(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1884,6 +1940,7 @@ static int SCACGfbsTest13(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1893,11 +1950,12 @@ static int SCACGfbsTest13(void)
/* 1 match */
char *pat = "abcdefghijklmnopqrstuvwxyzABCD";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyzABCD";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1907,6 +1965,7 @@ static int SCACGfbsTest13(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1915,6 +1974,7 @@ static int SCACGfbsTest14(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1924,11 +1984,12 @@ static int SCACGfbsTest14(void)
/* 1 match */
char *pat = "abcdefghijklmnopqrstuvwxyzABCDE";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyzABCDE";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1938,6 +1999,7 @@ static int SCACGfbsTest14(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1946,6 +2008,7 @@ static int SCACGfbsTest15(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1955,11 +2018,12 @@ static int SCACGfbsTest15(void)
/* 1 match */
char *pat = "abcdefghijklmnopqrstuvwxyzABCDEF";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyzABCDEF";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -1969,6 +2033,7 @@ static int SCACGfbsTest15(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -1977,6 +2042,7 @@ static int SCACGfbsTest16(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -1986,11 +2052,12 @@ static int SCACGfbsTest16(void)
/* 1 match */
char *pat = "abcdefghijklmnopqrstuvwxyzABC";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyzABC";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -2000,6 +2067,7 @@ static int SCACGfbsTest16(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2008,6 +2076,7 @@ static int SCACGfbsTest17(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2017,11 +2086,12 @@ static int SCACGfbsTest17(void)
/* 1 match */
char *pat = "abcdefghijklmnopqrstuvwxyzAB";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyzAB";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -2031,6 +2101,7 @@ static int SCACGfbsTest17(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2039,6 +2110,7 @@ static int SCACGfbsTest18(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2048,11 +2120,12 @@ static int SCACGfbsTest18(void)
/* 1 match */
char *pat = "abcde""fghij""klmno""pqrst""uvwxy""z";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcde""fghij""klmno""pqrst""uvwxy""z";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -2062,6 +2135,7 @@ static int SCACGfbsTest18(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2070,6 +2144,7 @@ static int SCACGfbsTest19(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2079,11 +2154,12 @@ static int SCACGfbsTest19(void)
/* 1 */
char *pat = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -2092,6 +2168,8 @@ static int SCACGfbsTest19(void)
printf("1 != %" PRIu32 " ",cnt);
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2100,6 +2178,7 @@ static int SCACGfbsTest20(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2109,11 +2188,12 @@ static int SCACGfbsTest20(void)
/* 1 */
char *pat = "AAAAA""AAAAA""AAAAA""AAAAA""AAAAA""AAAAA""AA";
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)pat, strlen(pat), 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "AAAAA""AAAAA""AAAAA""AAAAA""AAAAA""AAAAA""AA";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
@ -2123,6 +2203,7 @@ static int SCACGfbsTest20(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2131,6 +2212,7 @@ static int SCACGfbsTest21(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2139,10 +2221,11 @@ static int SCACGfbsTest21(void)
/* 1 */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)"AA", 2);
if (cnt == 1)
@ -2152,6 +2235,7 @@ static int SCACGfbsTest21(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2160,6 +2244,7 @@ static int SCACGfbsTest22(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2170,11 +2255,12 @@ static int SCACGfbsTest22(void)
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
/* 1 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"abcde", 5, 0, 0, 1, 0, 0);
PmqSetup(&pmq, 0, 2);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "abcdefghijklmnopqrstuvwxyz";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 2)
@ -2184,6 +2270,7 @@ static int SCACGfbsTest22(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2192,6 +2279,7 @@ static int SCACGfbsTest23(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2200,10 +2288,11 @@ static int SCACGfbsTest23(void)
/* 1 */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)"aa", 2);
if (cnt == 0)
@ -2213,6 +2302,7 @@ static int SCACGfbsTest23(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2221,6 +2311,7 @@ static int SCACGfbsTest24(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2229,10 +2320,11 @@ static int SCACGfbsTest24(void)
/* 1 */
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)"aa", 2);
if (cnt == 1)
@ -2242,6 +2334,7 @@ static int SCACGfbsTest24(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2250,6 +2343,7 @@ static int SCACGfbsTest25(void)
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
@ -2259,11 +2353,12 @@ static int SCACGfbsTest25(void)
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"fghiJkl", 7, 0, 0, 2, 0, 0);
PmqSetup(&pmq, 0, 3);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, NULL,
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 3)
@ -2273,6 +2368,104 @@ static int SCACGfbsTest25(void)
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
static int SCACGfbsTest26(void)
{
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_GFBS, -1);
SCACGfbsInitThreadCtx(&mpm_ctx, &mpm_thread_ctx, 0);
SCACGfbsAddPatternCI(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 0, 0, 0);
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 1, 0, 0);
PmqSetup(&pmq, 0, 2);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "works";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 1)
result = 1;
else
printf("3 != %" PRIu32 " ",cnt);
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
static int SCACGfbsTest27(void)
{
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_GFBS, -1);
SCACGfbsInitThreadCtx(&mpm_ctx, &mpm_thread_ctx, 0);
/* 0 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"ONE", 3, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "tone";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 0)
result = 1;
else
printf("0 != %" PRIu32 " ",cnt);
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
static int SCACGfbsTest28(void)
{
int result = 0;
MpmCtx mpm_ctx;
MpmThreadCtx mpm_thread_ctx;
PatternMatcherQueue pmq;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_GFBS, -1);
SCACGfbsInitThreadCtx(&mpm_ctx, &mpm_thread_ctx, 0);
/* 0 match */
SCACGfbsAddPatternCS(&mpm_ctx, (uint8_t *)"one", 3, 0, 0, 0, 0, 0);
PmqSetup(&pmq, 0, 1);
SCACGfbsPreparePatterns(&mpm_ctx);
char *buf = "tONE";
uint32_t cnt = SCACGfbsSearch(&mpm_ctx, &mpm_thread_ctx, &pmq,
(uint8_t *)buf, strlen(buf));
if (cnt == 0)
result = 1;
else
printf("0 != %" PRIu32 " ",cnt);
SCACGfbsDestroyCtx(&mpm_ctx);
SCACGfbsDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
@ -2307,6 +2500,9 @@ void SCACGfbsRegisterTests(void)
UtRegisterTest("SCACGfbsTest23", SCACGfbsTest23, 1);
UtRegisterTest("SCACGfbsTest24", SCACGfbsTest24, 1);
UtRegisterTest("SCACGfbsTest25", SCACGfbsTest25, 1);
UtRegisterTest("SCACGfbsTest26", SCACGfbsTest26, 1);
UtRegisterTest("SCACGfbsTest27", SCACGfbsTest27, 1);
UtRegisterTest("SCACGfbsTest28", SCACGfbsTest28, 1);
#endif
return;

@ -45,6 +45,7 @@ typedef struct SCACGfbsPattern_ {
typedef struct SCACGfbsPatternList_ {
uint8_t *cs;
uint16_t patlen;
uint16_t case_state;
} SCACGfbsPatternList;
typedef struct SCACGfbsOutputTable_ {

Loading…
Cancel
Save