56 static void DetectContentRegisterTests(
void);
86 uint8_t **pstr, uint16_t *plen)
91 slen = strlen(contentstr);
95 uint8_t buffer[slen + 1];
96 strlcpy((
char *)&buffer, contentstr, slen + 1);
108 uint8_t binstr[3] =
"";
110 uint16_t bin_count = 0;
112 for (i = 0, x = 0; i < slen; i++) {
118 SCLogError(
"Incomplete hex code in content - %s. Invalidating signature.",
126 }
else if(!escape &&
str[i] ==
'\\') {
130 if (isdigit((
unsigned char)
str[i]) ||
131 str[i] ==
'A' ||
str[i] ==
'a' ||
132 str[i] ==
'B' ||
str[i] ==
'b' ||
133 str[i] ==
'C' ||
str[i] ==
'c' ||
134 str[i] ==
'D' ||
str[i] ==
'd' ||
135 str[i] ==
'E' ||
str[i] ==
'e' ||
136 str[i] ==
'F' ||
str[i] ==
'f')
140 binstr[binpos] = (char)
str[i];
144 uint8_t c = strtol((
char *)binstr, (
char **) NULL, 16) & 0xFF;
150 }
else if (
str[i] ==
' ') {
153 else if (
str[i] !=
',') {
155 "content - %s, hex %c. Invalidating signature.",
173 }
else if (
str[i] ==
'"') {
174 SCLogError(
"Invalid unescaped double quote within content section.");
183 if (bin_count % 2 != 0) {
185 "%s - %s. Invalidating signature.",
186 keyword, contentstr);
200 memcpy(ptr,
str, slen);
202 *plen = (uint16_t)slen;
214 const char *contentstr)
217 uint8_t *content = NULL;
238 spm_global_thread_ctx);
256 const char *contentstr)
268 SCLogDebug(
"DetectContentData \"cd\" is NULL");
272 if (tmpstr != NULL) {
301 if (tmprstr != NULL) {
353 SCLogError(
"content string \"%s\" incompatible with %s transform", contentstr, tstr);
413 int max_offset = 0, total_len = 0;
417 for (; sm != NULL; sm = sm->
next) {
423 SCLogDebug(
"content_len %d; negated: %s; distance: %d, offset: %d, depth: %d",
435 if (max_size < (uint64_t)check) {
446 max_offset =
MAX(max_offset, cd->
offset);
464 uint16_t max_right_edge_i;
468 uint32_t max_right_edge = max_right_edge_i;
471 if (min_dsize_required >= 0) {
472 SCLogDebug(
"min_dsize %d; max_right_edge %d", min_dsize_required, max_right_edge);
473 if ((uint32_t)min_dsize_required > max_right_edge) {
474 SCLogError(
"signature can't match as required content length %d exceeds dsize value %d",
475 min_dsize_required, max_right_edge);
498 #define VALIDATE(e) \
503 uint16_t offset_plus_pat = 0;
505 bool has_active_depth_chain =
false;
507 bool has_depth =
false;
508 bool has_ends_with =
false;
509 uint16_t ends_with_depth = 0;
511 for (
SigMatch *sm = sm_head; sm != NULL; sm = sm->
next) {
520 has_active_depth_chain =
false;
523 if (sm->prev == NULL) {
548 has_active_depth_chain =
false;
554 has_active_depth_chain =
true;
557 SCLogDebug(
"sm %p depth %u offset %u distance %d within %d", sm, cd->
depth,
566 has_active_depth_chain =
false;
570 SCLogDebug(
"no distance, reset offset_plus_pat & offset");
571 offset_plus_pat =
offset = 0;
574 SCLogDebug(
"stored: offset %u depth %u offset_plus_pat %u "
575 "has_active_depth_chain %s",
576 offset, depth, offset_plus_pat, has_active_depth_chain ?
"true" :
"false");
584 if (abs(cd->
distance) > offset_plus_pat)
593 if (has_active_depth_chain) {
595 if (depth && depth > offset_plus_pat) {
600 "distance to add: %u. depth + dist %u", dist, depth + dist);
604 depth + cd->
within + dist <= UINT16_MAX);
605 depth = cd->
depth = (uint16_t)(depth + cd->
within + dist);
614 if (cd->
depth == 0 && depth != 0) {
619 offset_plus_pat + cd->
distance <= UINT16_MAX);
625 depth + cd->
within <= UINT16_MAX);
626 depth = cd->
depth = (uint16_t)(cd->
within + depth);
630 has_ends_with =
true;
631 if (ends_with_depth == 0)
632 ends_with_depth = depth;
633 ends_with_depth =
MIN(ends_with_depth, depth);
641 cd->
offset = offset_plus_pat;
670 has_ends_with =
true;
671 if (ends_with_depth == 0)
672 ends_with_depth = depth;
673 ends_with_depth =
MIN(ends_with_depth, depth);
677 has_active_depth_chain =
false;
688 SCLogDebug(
"non-anchored PCRE not supported, reset offset_plus_pat & offset");
689 offset_plus_pat =
offset = depth = 0;
691 has_active_depth_chain =
false;
695 SCLogDebug(
"keyword not supported, reset offset_plus_pat & offset");
696 offset_plus_pat =
offset = depth = 0;
697 has_active_depth_chain =
false;
702 if (has_depth && has_ends_with) {
703 for (
SigMatch *sm = sm_head; sm != NULL; sm = sm->
next) {
708 cd->
depth = ends_with_depth;
728 static inline bool NeedsAsHex(uint8_t c)
752 if (NeedsAsHex(cd->
content[i])) {
754 snprintf(hex_str,
sizeof(hex_str),
"%s%02X", !hex ?
"|" :
" ", cd->
content[i]);
759 snprintf(p_str,
sizeof(p_str),
"%s%c", hex ?
"|" :
"", cd->
content[i]);
772 SCLogError(
"can't use multiple nocase modifiers with the same content");
796 static bool TestLastContent(
const Signature *s, uint16_t o, uint16_t d)
812 if (d != cd->
depth) {
819 #define TEST_RUN(sig, o, d) \
821 SCLogDebug("TEST_RUN start: '%s'", (sig)); \
822 DetectEngineCtx *de_ctx = DetectEngineCtxInit(); \
823 FAIL_IF_NULL(de_ctx); \
824 de_ctx->flags |= DE_QUIET; \
826 snprintf(rule, sizeof(rule), "alert tcp any any -> any any (%s sid:1; rev:1;)", (sig)); \
827 Signature *s = DetectEngineAppendSig(de_ctx, rule); \
829 SigPrepareStage1(de_ctx); \
830 bool res = TestLastContent(s, (o), (d)); \
832 DetectEngineCtxFree(de_ctx); \
839 static int DetectContentDepthTest01(
void)
842 TEST_RUN(
"content:\"abc\"; offset:1; depth:3;", 1, 4);
844 TEST_RUN(
"dsize:10; content:\"abc\";", 0, 10);
845 TEST_RUN(
"dsize:<10; content:\"abc\";", 0, 10);
846 TEST_RUN(
"dsize:5<>10; content:\"abc\";", 0, 10);
849 TEST_RUN(
"content:\"abc\"; depth:3; content:\"xyz\"; distance:0; within:3; ", 3, 6);
851 TEST_RUN(
"content:\"abc\"; offset:3; depth:3; content:\"xyz\"; distance:0; within:3; ", 6, 9);
852 TEST_RUN(
"content:\"abc\"; depth:6; content:\"xyz\"; distance:0; within:3; ", 3, 9);
855 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; distance:0; within:3; content:\"xyz\"; distance:0; within:3; ", 6, 9);
857 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; content:\"xyz\"; distance:0; within:3; ", 3, 0);
859 TEST_RUN(
"content:\"abc\"; depth:3; pcre:/\"klm\"/; content:\"xyz\"; distance:0; within:3; ", 0, 0);
861 TEST_RUN(
"content:\"abc\"; depth:3; pcre:/\"klm\"/R; content:\"xyz\"; distance:0; within:3; ", 3, 0);
862 TEST_RUN(
"content:\"abc\"; offset:3; depth:3; pcre:/\"klm\"/R; content:\"xyz\"; distance:0; within:3; ", 6, 0);
864 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; within:3; content:\"xyz\"; within:3; ", 0, 9);
866 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; distance:0; content:\"xyz\"; distance:0; ", 6, 0);
869 TEST_RUN(
"content:\"abc\"; depth:6; isdataat:!1,relative; content:\"klm\";", 0, 6);
870 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; within:3; content:\"xyz\"; within:3; isdataat:!1,relative; content:\"def\"; ", 0, 9);
872 TEST_RUN(
"content:\"|03|\"; depth:1; content:\"|e0|\"; distance:4; within:1;", 5, 6);
873 TEST_RUN(
"content:\"|03|\"; depth:1; content:\"|e0|\"; distance:4; within:1; content:\"Cookie|3a|\"; distance:5; within:7;", 11, 18);
875 TEST_RUN(
"content:\"this\"; content:\"is\"; within:6; content:\"big\"; within:8; content:\"string\"; within:8;", 0, 0);
877 TEST_RUN(
"dsize:<80; content:!\"|00 22 02 00|\"; depth: 4; content:\"|00 00 04|\"; distance:8; within:3; content:\"|00 00 00 00 00|\"; distance:6; within:5;", 17, 80);
878 TEST_RUN(
"content:!\"|00 22 02 00|\"; depth: 4; content:\"|00 00 04|\"; distance:8; within:3; content:\"|00 00 00 00 00|\"; distance:6; within:5;", 17, 0);
880 TEST_RUN(
"content:\"|0d 0a 0d 0a|\"; content:\"code=\"; distance:0;", 4, 0);
881 TEST_RUN(
"content:\"|0d 0a 0d 0a|\"; content:\"code=\"; distance:0; content:\"xploit.class\"; distance:2; within:18;", 11, 0);
883 TEST_RUN(
"content:\"|16 03|\"; depth:2; content:\"|55 04 0a|\"; distance:0;", 2, 0);
884 TEST_RUN(
"content:\"|16 03|\"; depth:2; content:\"|55 04 0a|\"; distance:0; content:\"|0d|LogMeIn, Inc.\"; distance:1; within:14;", 6, 0);
885 TEST_RUN(
"content:\"|16 03|\"; depth:2; content:\"|55 04 0a|\"; distance:0; content:\"|0d|LogMeIn, Inc.\"; distance:1; within:14; content:\".app\";", 0, 0);
887 TEST_RUN(
"content:\"=\"; offset:4; depth:9;", 4, 13);
890 TEST_RUN(
"content:\"=\"; offset:4; depth:9; content:\"=&\"; distance:55; within:2;", 60, 70);
893 TEST_RUN(
"content:\"0123456789\"; content:\"abcdef\"; distance:1048576;", 0, 0);
896 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2;", 11, 18);
897 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
898 "00 00|\"; distance:0;",
900 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
901 "00 00|\"; distance:0; content:\"|0c 00|\"; distance:19; within:2;",
903 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
904 "00 00|\"; distance:0; content:\"|0c 00|\"; distance:19; within:2; content:\"|15 00 "
905 "00 00|\"; distance:20; within:4;",
916 static void DetectContentPrintAll(
SigMatch *sm)
928 for (; first_sm != NULL; first_sm = first_sm->
next) {
930 SCLogDebug(
"Printing SigMatch DETECT_CONTENT %d", ++i);
938 static int g_file_data_buffer_id = 0;
939 static int g_dce_stub_data_buffer_id = 0;
944 static int DetectContentParseTest01 (
void)
948 const char *teststring =
"abc\\:def";
949 const char *teststringparsed =
"abc:def";
953 FAIL_IF(spm_global_thread_ctx == NULL);
957 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
958 SCLogDebug(
"expected %s got ", teststringparsed);
965 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
975 static int DetectContentParseTest02 (
void)
979 const char *teststring =
"abc\\;def";
980 const char *teststringparsed =
"abc;def";
984 FAIL_IF(spm_global_thread_ctx == NULL);
988 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
989 SCLogDebug(
"expected %s got ", teststringparsed);
996 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1006 static int DetectContentParseTest03 (
void)
1010 const char *teststring =
"abc\\\"def";
1011 const char *teststringparsed =
"abc\"def";
1015 FAIL_IF(spm_global_thread_ctx == NULL);
1019 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
1020 SCLogDebug(
"expected %s got ", teststringparsed);
1027 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1037 static int DetectContentParseTest04 (
void)
1041 const char *teststring =
"abc\\\\def";
1042 const char *teststringparsed =
"abc\\def";
1046 FAIL_IF(spm_global_thread_ctx == NULL);
1051 if (memcmp(cd->
content, teststringparsed,
len) != 0) {
1052 SCLogDebug(
"expected %s got ", teststringparsed);
1059 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1069 static int DetectContentParseTest05 (
void)
1073 const char *teststring =
"abc\\def";
1077 FAIL_IF(spm_global_thread_ctx == NULL);
1094 static int DetectContentParseTest06 (
void)
1098 const char *teststring =
"a|42|c|44|e|46|";
1099 const char *teststringparsed =
"abcdef";
1103 FAIL_IF(spm_global_thread_ctx == NULL);
1108 if (memcmp(cd->
content, teststringparsed,
len) != 0) {
1109 SCLogDebug(
"expected %s got ", teststringparsed);
1116 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1126 static int DetectContentParseTest07 (
void)
1130 const char *teststring =
"";
1134 FAIL_IF(spm_global_thread_ctx == NULL);
1149 static int DetectContentParseTest08 (
void)
1153 const char *teststring =
"";
1157 FAIL_IF(spm_global_thread_ctx == NULL);
1178 static int DetectContentLongPatternMatchTest(uint8_t *raw_eth_pkt, uint16_t pktsize,
const char *sig,
1188 memset(&th_v, 0,
sizeof(th_v));
1207 SCLogDebug(
"---DetectContentLongPatternMatchTest---");
1227 static int DetectContentLongPatternMatchTestWrp(
const char *sig, uint32_t sid)
1234 uint8_t raw_eth_pkt[] = {
1235 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
1236 0x00,0x00,0x00,0x00,0x08,0x00,0x45,0x00,
1237 0x00,0x85,0x00,0x01,0x00,0x00,0x40,0x06,
1238 0x7c,0x70,0x7f,0x00,0x00,0x01,0x7f,0x00,
1239 0x00,0x01,0x00,0x14,0x00,0x50,0x00,0x00,
1240 0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x02,
1241 0x20,0x00,0xc9,0xad,0x00,0x00,0x48,0x69,
1242 0x2c,0x20,0x74,0x68,0x69,0x73,0x20,0x69,
1243 0x73,0x20,0x61,0x20,0x62,0x69,0x67,0x20,
1244 0x74,0x65,0x73,0x74,0x20,0x74,0x6f,0x20,
1245 0x63,0x68,0x65,0x63,0x6b,0x20,0x63,0x6f,
1246 0x6e,0x74,0x65,0x6e,0x74,0x20,0x6d,0x61,
1247 0x74,0x63,0x68,0x65,0x73,0x20,0x6f,0x66,
1248 0x20,0x73,0x70,0x6c,0x69,0x74,0x74,0x65,
1249 0x64,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
1250 0x6e,0x73,0x20,0x62,0x65,0x74,0x77,0x65,
1251 0x65,0x6e,0x20,0x6d,0x75,0x6c,0x74,0x69,
1252 0x70,0x6c,0x65,0x20,0x63,0x68,0x75,0x6e,
1255 return DetectContentLongPatternMatchTest(raw_eth_pkt, (uint16_t)
sizeof(raw_eth_pkt),
1262 static int DetectContentLongPatternMatchTest01(
void)
1264 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1265 " content:\"Hi, this is a big test\"; sid:1;)";
1266 return DetectContentLongPatternMatchTestWrp(sig, 1);
1272 static int DetectContentLongPatternMatchTest02(
void)
1274 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1275 " content:\"Hi, this is a big test to check content matches of"
1276 " splitted patterns between multiple chunks!\"; sid:1;)";
1277 return DetectContentLongPatternMatchTestWrp(sig, 1);
1284 static int DetectContentLongPatternMatchTest03(
void)
1287 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1288 " content:\"Hi, this is a big test to check content matches of"
1289 " splitted patterns between multiple splitted chunks!\"; sid:1;)";
1290 return (DetectContentLongPatternMatchTestWrp(sig, 1) == 0) ? 1: 0;
1296 static int DetectContentLongPatternMatchTest04(
void)
1298 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1299 " content:\"Hi, this is\"; depth:15 ;content:\"a big test\"; "
1300 " within:15; content:\"to check content matches of\"; "
1301 " within:30; content:\"splitted patterns\"; distance:1; "
1304 return DetectContentLongPatternMatchTestWrp(sig, 1);
1312 static int DetectContentLongPatternMatchTest05(
void)
1314 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1315 " content:\"Hi, this is a big\"; depth:17; "
1316 " isdataat:30, relative; "
1317 " content:\"test\"; within: 5; distance:1; "
1318 " isdataat:15, relative; "
1319 " content:\"of splitted\"; within:37; distance:15; "
1320 " isdataat:20,relative; "
1321 " content:\"patterns\"; within:9; distance:1; "
1322 " isdataat:10, relative; "
1324 return DetectContentLongPatternMatchTestWrp(sig, 1);
1332 static int DetectContentLongPatternMatchTest06(
void)
1334 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1335 " content:\"Hi, this is a big test to check cont\"; depth:36;"
1336 " content:\"ent matches\"; within:11; distance:0; "
1337 " content:\"of splitted patterns between multiple\"; "
1338 " within:38; distance:1; "
1339 " content:\"chunks!\"; within: 8; distance:1; "
1341 return DetectContentLongPatternMatchTestWrp(sig, 1);
1348 static int DetectContentLongPatternMatchTest07(
void)
1350 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1351 " content:\"chunks!\"; "
1352 " content:\"content matches\"; offset:32; depth:47; "
1353 " content:\"of splitted patterns between multiple\"; "
1354 " content:\"Hi, this is a big\"; offset:0; depth:17; "
1356 return DetectContentLongPatternMatchTestWrp(sig, 1);
1363 static int DetectContentLongPatternMatchTest08(
void)
1365 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1366 " content:\"ent matches\"; "
1367 " content:\"of splitted patterns between multiple\"; "
1368 " within:38; distance:1; "
1369 " content:\"chunks!\"; within: 8; distance:1; "
1370 " content:\"Hi, this is a big test to check cont\"; depth:36;"
1372 return DetectContentLongPatternMatchTestWrp(sig, 1);
1379 static int DetectContentLongPatternMatchTest09(
void)
1381 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1382 " content:\"ent matches\"; "
1383 " content:\"of splitted patterns between multiple\"; "
1384 " offset:47; depth:85; "
1385 " content:\"chunks!\"; within: 8; distance:1; "
1386 " content:\"Hi, this is a big test to chec\"; depth:36;"
1387 " content:\"k cont\"; distance:0; within:6;"
1389 return DetectContentLongPatternMatchTestWrp(sig, 1);
1395 static int DetectContentLongPatternMatchTest10(
void)
1397 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1398 " content:\"Hi, this is a big test to check \"; "
1399 " content:\"con\"; "
1401 return DetectContentLongPatternMatchTestWrp(sig, 1);
1407 static int DetectContentLongPatternMatchTest11(
void)
1409 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1413 return DetectContentLongPatternMatchTestWrp(sig, 1);
1416 static int DetectContentParseTest09(
void)
1419 const char *teststring =
"boo";
1423 FAIL_IF(spm_global_thread_ctx == NULL);
1436 static int DetectContentParseTest17(
void)
1439 const char *sigstr =
"alert tcp any any -> any any (msg:\"Dummy\"; "
1440 "content:\"one\"; content:\"two\"; within:2; sid:1;)";
1462 static int DetectContentParseTest18(
void)
1490 static int DetectContentParseTest19(
void)
1499 "(msg:\"Testing dce iface, stub_data with content\"; "
1500 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1502 "content:\"one\"; distance:0; sid:1;)");
1514 "alert tcp any any -> any any "
1515 "(msg:\"Testing dce iface, stub_data with contents & distance, within\"; "
1516 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1518 "content:\"one\"; distance:0; content:\"two\"; within:10; sid:2;)");
1533 "alert tcp any any -> any any "
1534 "(msg:\"Testing dce iface, stub with contents, distance, within\"; "
1535 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1537 "content:\"one\"; distance:0; "
1538 "content:\"two\"; within:10; distance:2; sid:3;)");
1553 "(msg:\"Testing content\"; "
1554 "content:\"one\"; sid:4;)");
1566 static int DetectContentParseTest20(
void)
1577 "alert udp any any -> any any "
1578 "(msg:\"test\"; content:\"\"; sid:238012;)");
1595 static int DetectContentParseTest21(
void)
1606 "alert udp any any -> any any "
1607 "(msg:\"test\"; content:\"; sid:238012;)");
1624 static int DetectContentParseTest22(
void)
1635 "alert udp any any -> any any "
1636 "(msg:\"test\"; content:\"boo; sid:238012;)");
1653 static int DetectContentParseTest23(
void)
1664 "alert udp any any -> any any "
1665 "(msg:\"test\"; content:boo\"; sid:238012;)");
1682 static int DetectContentParseTest24(
void)
1695 "alert udp any any -> any any "
1696 "(msg:\"test\"; content: !\"boo\"; sid:238012;)");
1698 printf(
"de_ctx->sig_list == NULL: ");
1705 printf(
"de_ctx->pmatch_tail == NULL || de_ctx->pmatch_tail->ctx == NULL: ");
1724 static int DetectContentParseTest25(
void)
1735 "alert udp any any -> any any "
1736 "(msg:\"test\"; content:\"|\"; sid:1;)");
1753 static int DetectContentParseTest26(
void)
1764 "alert udp any any -> any any "
1765 "(msg:\"test\"; content:\"|af\"; sid:1;)");
1782 static int DetectContentParseTest27(
void)
1793 "alert udp any any -> any any "
1794 "(msg:\"test\"; content:\"af|\"; sid:1;)");
1811 static int DetectContentParseTest28(
void)
1822 "alert udp any any -> any any "
1823 "(msg:\"test\"; content:\"|af|\"; sid:1;)");
1840 static int DetectContentParseTest29(
void)
1851 "alert udp any any -> any any "
1852 "(msg:\"test\"; content:\"aast|\"; sid:1;)");
1869 static int DetectContentParseTest30(
void)
1880 "alert udp any any -> any any "
1881 "(msg:\"test\"; content:\"aast|af\"; sid:1;)");
1898 static int DetectContentParseTest31(
void)
1909 "alert udp any any -> any any "
1910 "(msg:\"test\"; content:\"aast|af|\"; sid:1;)");
1927 static int DetectContentParseTest32(
void)
1938 "alert udp any any -> any any "
1939 "(msg:\"test\"; content:\"|af|asdf\"; sid:1;)");
1956 static int DetectContentParseTest33(
void)
1967 "alert udp any any -> any any "
1968 "(msg:\"test\"; content:\"|af|af|\"; sid:1;)");
1985 static int DetectContentParseTest34(
void)
1996 "alert udp any any -> any any "
1997 "(msg:\"test\"; content:\"|af|af|af\"; sid:1;)");
2014 static int DetectContentParseTest35(
void)
2025 "alert udp any any -> any any "
2026 "(msg:\"test\"; content:\"|af|af|af|\"; sid:1;)");
2040 static int SigTestPositiveTestContent(
const char *rule, uint8_t *buf)
2042 uint16_t buflen = strlen((
char *)buf);
2046 memset(&th_v, 0,
sizeof(th_v));
2072 static int DetectContentParseTest41(
void)
2077 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2081 for (
int i = 0; i < patlen; idx++, i++) {
2082 teststring[idx] =
'a';
2084 teststring[idx++] =
'\0';
2088 FAIL_IF(spm_global_thread_ctx == NULL);
2105 static int DetectContentParseTest42(
void)
2110 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2114 for (
int i = 0; i < patlen; idx++, i++) {
2115 teststring[idx] =
'a';
2117 teststring[idx++] =
'\0';
2121 FAIL_IF(spm_global_thread_ctx == NULL);
2135 static int DetectContentParseTest43(
void)
2140 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2144 teststring[idx++] =
'|';
2145 teststring[idx++] =
'4';
2146 teststring[idx++] =
'6';
2147 teststring[idx++] =
'|';
2148 for (
int i = 0; i < (patlen - 4); idx++, i++) {
2149 teststring[idx] =
'a';
2151 teststring[idx++] =
'\0';
2155 FAIL_IF(spm_global_thread_ctx == NULL);
2172 static int DetectContentParseTest44(
void)
2177 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2181 teststring[idx++] =
'|';
2182 teststring[idx++] =
'4';
2183 teststring[idx++] =
'6';
2184 teststring[idx++] =
'|';
2185 for (
int i = 0; i < (patlen - 4); idx++, i++) {
2186 teststring[idx] =
'a';
2188 teststring[idx++] =
'\0';
2192 FAIL_IF(spm_global_thread_ctx == NULL);
2209 static int DetectContentParseTest45(
void)
2218 "alert tcp any any -> any any "
2219 "(msg:\"test\"; content:\"|ff|\" content:\"TEST\"; sid:1;)");
2227 static int SigTestNegativeTestContent(
const char *rule, uint8_t *buf)
2229 uint16_t buflen = strlen((
char *)buf);
2234 memset(&th_v, 0,
sizeof(th_v));
2259 if (det_ctx != NULL) {
2275 static int SigTest41TestNegatedContent(
void)
2277 return SigTestPositiveTestContent(
"alert tcp any any -> any any "
2278 "(msg:\"HTTP URI cap\"; content:!\"GES\"; sid:1;)",
2280 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\n"
2281 "GET /two/ HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2289 static int SigTest41aTestNegatedContent(
void)
2291 (void)SigTestPositiveTestContent(
"alert tcp any any -> any any (msg:\"HTTP URI cap\"; flow:to_server; content:\"GET\"; sid:1;)", (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2300 static int SigTest42TestNegatedContent(
void)
2302 return SigTestPositiveTestContent(
2303 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; depth:22; offset:35; sid:1;)",
2304 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2314 static int SigTest43TestNegatedContent(
void)
2316 return SigTestNegativeTestContent(
2317 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; depth:34; offset:23; sid:1;)",
2318 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2326 static int SigTest44TestNegatedContent(
void)
2328 return SigTestPositiveTestContent(
2329 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; offset:40; depth:35; sid:1;)",
2330 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2337 static int SigTest45TestNegatedContent(
void)
2339 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:5; "
2340 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2341 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2348 static int SigTest46TestNegatedContent(
void)
2350 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaaE\"; "
2351 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2352 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2360 static int SigTest47TestNegatedContent(
void)
2362 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; offset:5; "
2363 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2364 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2371 static int SigTest48TestNegatedContent(
void)
2373 return SigTestPositiveTestContent(
2374 "alert tcp any any -> any any (content:\"GET\"; content:!\"GES\"; within:26; sid:1;)",
2375 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2376 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2383 static int SigTest49TestNegatedContent(
void)
2385 return SigTestNegativeTestContent(
2386 "alert tcp any any -> any any (content:\"GET\"; content:!\"Host\"; within:26; sid:1;)",
2387 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2388 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2395 static int SigTest50TestNegatedContent(
void)
2397 return SigTestPositiveTestContent(
2398 "alert tcp any any -> any any (content:\"GET\"; content:!\"GES\"; distance:25; sid:1;)",
2399 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2400 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2410 static int SigTest51TestNegatedContent(
void)
2412 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"GET\"; content:!\"Host\"; distance:17; sid:1;)", (uint8_t *)
"GET /one/ HTTP/1.1\r\nHost: one.example.org\r\n\r\n\r\nGET /two/ HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2419 static int SigTest52TestNegatedContent(
void)
2421 return SigTestNegativeTestContent(
2422 "alert tcp any any -> any any (content:\"GES\"; content:!\"BOO\"; sid:1;)",
2423 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2424 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2431 static int SigTest53TestNegatedContent(
void)
2433 return SigTestNegativeTestContent(
2434 "alert tcp any any -> any any (content:\"aaa\"; content:!\"Ggggg\"; within:56; sid:1;)",
2435 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2442 static int SigTest54TestNegatedContent(
void)
2444 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2445 "content:!\"gggggg\"; within:20; sid:1;)",
2446 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff ggggggggg hhhhhhhh");
2453 static int SigTest55TestNegatedContent(
void)
2455 return SigTestNegativeTestContent(
2456 "alert tcp any any -> any any (content:!\"aaa\"; depth:5; sid:1;)",
2457 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2464 static int SigTest56TestNegatedContent(
void)
2466 return SigTestPositiveTestContent(
2467 "alert tcp any any -> any any (content:\"aaa\"; content:\"Ggggg\"; within:56; sid:1;)",
2468 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Gggggggg hhhhhhhh");
2475 static int SigTest57TestNegatedContent(
void)
2477 return SigTestNegativeTestContent(
2478 "alert tcp any any -> any any (content:\"aaa\"; content:!\"Ggggg\"; within:56; sid:1;)",
2479 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2486 static int SigTest58TestNegatedContent(
void)
2488 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2489 "content:!\"Ggggg\"; distance:57; sid:1;)",
2490 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2497 static int SigTest59TestNegatedContent(
void)
2499 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2500 "content:!\"Gggg\"; distance:30; sid:1;)",
2501 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2504 static int SigTest60TestNegatedContent(
void)
2506 return SigTestNegativeTestContent(
2507 "alert tcp any any -> any any (content:!\"aaa\"; content:\"Ggggg\"; sid:1;)",
2508 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2511 static int SigTest61TestNegatedContent(
void)
2513 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2514 "content:!\"Ggggg\"; within:30; sid:1;)",
2515 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2525 static int SigTest62TestNegatedContent(
void)
2527 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2528 "content:!\"Gggggg\"; within:49; sid:1;)",
2529 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2532 static int SigTest63TestNegatedContent(
void)
2534 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2535 "content:!\"Gggggg\"; within:56; sid:1;)",
2536 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2539 static int SigTest64TestNegatedContent(
void)
2541 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2542 "content:!\"Gggggg\"; within:30; sid:1;)",
2543 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2553 static int SigTest65TestNegatedContent(
void)
2555 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2556 "content:!\"Gggggg\"; distance:0; within:49; sid:1;)",
2557 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2560 static int SigTest66TestNegatedContent(
void)
2562 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2563 "content:!\"Gggggg\"; within:30; sid:1;)",
2564 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2567 static int SigTest67TestNegatedContent(
void)
2569 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2570 "content:!\"XXXX\"; within:56; sid:1;)",
2571 (uint8_t *)
"aaa bbbb cccc XXXXdddd eeeeeeeeeee ffffffffff XXXXggggg hhhhhhhh");
2574 static int SigTest68TestNegatedContent(
void)
2576 return SigTestPositiveTestContent(
2577 "alert tcp any any -> any any (content:\"aaa\"; depth:10; content:\"cccc\"; offset:8; "
2578 "content:!\"Gggggg\"; within:28; content:\"hhhhhhhh\"; sid:1;)",
2579 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2582 static int SigTest69TestNegatedContent(
void)
2584 return SigTestNegativeTestContent(
2585 "alert tcp any any -> any any (content:\"aaa\"; depth:10; content:\"cccc\"; offset:8; "
2586 "content:!\"Gggggg\"; within:48; content:\"hhhhhhhh\"; sid:1;)",
2587 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2590 static int SigTest70TestNegatedContent(
void)
2592 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2593 "content:!\"Gggggg\"; within:52; sid:1;)",
2594 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2598 static int SigTest71TestNegatedContent(
void)
2600 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2601 "content:!\"Gggggg\"; within:40; distance:43; sid:1;)",
2602 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2605 static int SigTest72TestNegatedContent(
void)
2607 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2608 "content:!\"Gggggg\"; within:49; distance:43; sid:1;)",
2609 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2612 static int SigTest73TestNegatedContent(
void)
2614 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:5; "
2615 "content:!\"eeeeeeeeeee\"; depth:35; sid:1;)",
2616 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff ggggggggg hhhhhhhh");
2619 static int SigTest74TestNegatedContent(
void)
2621 return SigTestPositiveTestContent(
"alert tcp any any -> any any (msg:\"HTTP URI cap\"; content:\"USER\"; content:!\"PASS\"; sid:1;)", (uint8_t *)
"USER apple");
2624 static int SigTest75TestNegatedContent(
void)
2626 return SigTestPositiveTestContent(
"alert tcp any any -> any any (msg:\"HTTP URI cap\"; content:\"USER\"; content:\"!PASS\"; sid:1;)", (uint8_t *)
"USER !PASS");
2629 static int SigTest76TestBug134(
void)
2631 uint8_t *buf = (uint8_t *)
"test detect ${IFS} in traffic";
2632 uint16_t buflen = strlen((
char *)buf);
2637 memset(&f, 0,
sizeof(
Flow));
2646 char sig[] =
"alert tcp any any -> any 515 "
2647 "(msg:\"detect IFS\"; flow:to_server,established; content:\"${IFS}\";"
2648 " depth:50; offset:0; sid:900091; rev:1;)";
2663 static int SigTest77TestBug139(
void)
2666 0x12, 0x23, 0x34, 0x35, 0x52, 0x52, 0x24, 0x42, 0x22, 0x24,
2667 0x52, 0x24, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x34 };
2668 uint16_t buflen =
sizeof(buf);
2673 char sig[] =
"alert udp any any -> any 53 (msg:\"dns testing\";"
2674 " content:\"|00 00|\"; depth:5; offset:13; sid:9436601;"
2688 static int DetectLongContentTestCommon(
const char *sig, uint32_t sid)
2691 static uint8_t pkt[739] = {
2692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2693 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
2694 0x02, 0xd5, 0x4a, 0x18, 0x40, 0x00, 0x40, 0x06,
2695 0xd7, 0xd6, 0x0a, 0x10, 0x01, 0x0b, 0x0a, 0x10,
2696 0x01, 0x0a, 0xdb, 0x36, 0x00, 0x50, 0xca, 0xc5,
2697 0xcc, 0xd1, 0x95, 0x77, 0x0f, 0x7d, 0x80, 0x18,
2698 0x00, 0xe5, 0x77, 0x9d, 0x00, 0x00, 0x01, 0x01,
2699 0x08, 0x0a, 0x1d, 0xe0, 0x86, 0xc6, 0xfc, 0x73,
2700 0x49, 0xf3, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x2f,
2701 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e,
2702 0x31, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d,
2703 0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x63,
2704 0x75, 0x72, 0x6c, 0x2f, 0x37, 0x2e, 0x33, 0x37,
2705 0x2e, 0x30, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74,
2706 0x3a, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x36, 0x2e,
2707 0x31, 0x2e, 0x31, 0x30, 0x0d, 0x0a, 0x41, 0x63,
2708 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x2a, 0x2f,
2709 0x2a, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65,
2710 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74,
2711 0x68, 0x3a, 0x20, 0x35, 0x32, 0x38, 0x0d, 0x0a,
2712 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
2713 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70,
2714 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
2715 0x6e, 0x2f, 0x78, 0x2d, 0x77, 0x77, 0x77, 0x2d,
2716 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x75, 0x72, 0x6c,
2717 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x0d,
2718 0x0a, 0x0d, 0x0a, 0x58, 0x58, 0x58, 0x58, 0x58,
2719 0x58, 0x58, 0x58, 0x41, 0x41, 0x41, 0x41, 0x41,
2720 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2721 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2722 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2723 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2724 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2725 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2726 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2727 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2728 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2729 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2730 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2731 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2732 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2733 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2734 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2735 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2736 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2737 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2738 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2739 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2740 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2741 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2742 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2743 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2744 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2745 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2746 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2747 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2748 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2749 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2750 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2751 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2752 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2753 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2754 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2755 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2756 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2757 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2758 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2759 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2760 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2761 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2762 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2763 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2764 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2765 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2766 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2767 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2768 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2769 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2770 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2771 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2772 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2773 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2774 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2775 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2776 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2777 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2778 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2779 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2780 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2781 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2782 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2783 0x41, 0x41, 0x41, 0x58, 0x58, 0x58, 0x58, 0x58,
2787 return DetectContentLongPatternMatchTest(pkt, (uint16_t)
sizeof(pkt), sig,
2791 static int DetectLongContentTest1(
void)
2794 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2796 return DetectLongContentTestCommon(sig, 1);
2799 static int DetectLongContentTest2(
void)
2802 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2804 return DetectLongContentTestCommon(sig, 1);
2807 static int DetectLongContentTest3(
void)
2810 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2812 return !DetectLongContentTestCommon(sig, 1);
2815 static int DetectBadBinContent(
void)
2822 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|a|\"; sid:1;)"));
2824 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|aa b|\"; sid:1;)"));
2826 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|aa bz|\"; sid:1;)"));
2829 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|22 2 22|\"; sid:1;)"));
2837 static void DetectContentRegisterTests(
void)
2842 UtRegisterTest(
"DetectContentDepthTest01", DetectContentDepthTest01);
2844 UtRegisterTest(
"DetectContentParseTest01", DetectContentParseTest01);
2845 UtRegisterTest(
"DetectContentParseTest02", DetectContentParseTest02);
2846 UtRegisterTest(
"DetectContentParseTest03", DetectContentParseTest03);
2847 UtRegisterTest(
"DetectContentParseTest04", DetectContentParseTest04);
2848 UtRegisterTest(
"DetectContentParseTest05", DetectContentParseTest05);
2849 UtRegisterTest(
"DetectContentParseTest06", DetectContentParseTest06);
2850 UtRegisterTest(
"DetectContentParseTest07", DetectContentParseTest07);
2851 UtRegisterTest(
"DetectContentParseTest08", DetectContentParseTest08);
2852 UtRegisterTest(
"DetectContentParseTest09", DetectContentParseTest09);
2853 UtRegisterTest(
"DetectContentParseTest17", DetectContentParseTest17);
2854 UtRegisterTest(
"DetectContentParseTest18", DetectContentParseTest18);
2855 UtRegisterTest(
"DetectContentParseTest19", DetectContentParseTest19);
2856 UtRegisterTest(
"DetectContentParseTest20", DetectContentParseTest20);
2857 UtRegisterTest(
"DetectContentParseTest21", DetectContentParseTest21);
2858 UtRegisterTest(
"DetectContentParseTest22", DetectContentParseTest22);
2859 UtRegisterTest(
"DetectContentParseTest23", DetectContentParseTest23);
2860 UtRegisterTest(
"DetectContentParseTest24", DetectContentParseTest24);
2861 UtRegisterTest(
"DetectContentParseTest25", DetectContentParseTest25);
2862 UtRegisterTest(
"DetectContentParseTest26", DetectContentParseTest26);
2863 UtRegisterTest(
"DetectContentParseTest27", DetectContentParseTest27);
2864 UtRegisterTest(
"DetectContentParseTest28", DetectContentParseTest28);
2865 UtRegisterTest(
"DetectContentParseTest29", DetectContentParseTest29);
2866 UtRegisterTest(
"DetectContentParseTest30", DetectContentParseTest30);
2867 UtRegisterTest(
"DetectContentParseTest31", DetectContentParseTest31);
2868 UtRegisterTest(
"DetectContentParseTest32", DetectContentParseTest32);
2869 UtRegisterTest(
"DetectContentParseTest33", DetectContentParseTest33);
2870 UtRegisterTest(
"DetectContentParseTest34", DetectContentParseTest34);
2871 UtRegisterTest(
"DetectContentParseTest35", DetectContentParseTest35);
2872 UtRegisterTest(
"DetectContentParseTest41", DetectContentParseTest41);
2873 UtRegisterTest(
"DetectContentParseTest42", DetectContentParseTest42);
2874 UtRegisterTest(
"DetectContentParseTest43", DetectContentParseTest43);
2875 UtRegisterTest(
"DetectContentParseTest44", DetectContentParseTest44);
2876 UtRegisterTest(
"DetectContentParseTest45", DetectContentParseTest45);
2880 DetectContentLongPatternMatchTest01);
2882 DetectContentLongPatternMatchTest02);
2884 DetectContentLongPatternMatchTest03);
2886 DetectContentLongPatternMatchTest04);
2888 DetectContentLongPatternMatchTest05);
2890 DetectContentLongPatternMatchTest06);
2892 DetectContentLongPatternMatchTest07);
2894 DetectContentLongPatternMatchTest08);
2896 DetectContentLongPatternMatchTest09);
2898 DetectContentLongPatternMatchTest10);
2900 DetectContentLongPatternMatchTest11);
2903 UtRegisterTest(
"SigTest41TestNegatedContent", SigTest41TestNegatedContent);
2905 SigTest41aTestNegatedContent);
2906 UtRegisterTest(
"SigTest42TestNegatedContent", SigTest42TestNegatedContent);
2907 UtRegisterTest(
"SigTest43TestNegatedContent", SigTest43TestNegatedContent);
2908 UtRegisterTest(
"SigTest44TestNegatedContent", SigTest44TestNegatedContent);
2909 UtRegisterTest(
"SigTest45TestNegatedContent", SigTest45TestNegatedContent);
2910 UtRegisterTest(
"SigTest46TestNegatedContent", SigTest46TestNegatedContent);
2911 UtRegisterTest(
"SigTest47TestNegatedContent", SigTest47TestNegatedContent);
2912 UtRegisterTest(
"SigTest48TestNegatedContent", SigTest48TestNegatedContent);
2913 UtRegisterTest(
"SigTest49TestNegatedContent", SigTest49TestNegatedContent);
2914 UtRegisterTest(
"SigTest50TestNegatedContent", SigTest50TestNegatedContent);
2915 UtRegisterTest(
"SigTest51TestNegatedContent", SigTest51TestNegatedContent);
2916 UtRegisterTest(
"SigTest52TestNegatedContent", SigTest52TestNegatedContent);
2917 UtRegisterTest(
"SigTest53TestNegatedContent", SigTest53TestNegatedContent);
2918 UtRegisterTest(
"SigTest54TestNegatedContent", SigTest54TestNegatedContent);
2919 UtRegisterTest(
"SigTest55TestNegatedContent", SigTest55TestNegatedContent);
2920 UtRegisterTest(
"SigTest56TestNegatedContent", SigTest56TestNegatedContent);
2921 UtRegisterTest(
"SigTest57TestNegatedContent", SigTest57TestNegatedContent);
2922 UtRegisterTest(
"SigTest58TestNegatedContent", SigTest58TestNegatedContent);
2923 UtRegisterTest(
"SigTest59TestNegatedContent", SigTest59TestNegatedContent);
2924 UtRegisterTest(
"SigTest60TestNegatedContent", SigTest60TestNegatedContent);
2925 UtRegisterTest(
"SigTest61TestNegatedContent", SigTest61TestNegatedContent);
2926 UtRegisterTest(
"SigTest62TestNegatedContent", SigTest62TestNegatedContent);
2927 UtRegisterTest(
"SigTest63TestNegatedContent", SigTest63TestNegatedContent);
2928 UtRegisterTest(
"SigTest64TestNegatedContent", SigTest64TestNegatedContent);
2929 UtRegisterTest(
"SigTest65TestNegatedContent", SigTest65TestNegatedContent);
2930 UtRegisterTest(
"SigTest66TestNegatedContent", SigTest66TestNegatedContent);
2931 UtRegisterTest(
"SigTest67TestNegatedContent", SigTest67TestNegatedContent);
2932 UtRegisterTest(
"SigTest68TestNegatedContent", SigTest68TestNegatedContent);
2933 UtRegisterTest(
"SigTest69TestNegatedContent", SigTest69TestNegatedContent);
2934 UtRegisterTest(
"SigTest70TestNegatedContent", SigTest70TestNegatedContent);
2935 UtRegisterTest(
"SigTest71TestNegatedContent", SigTest71TestNegatedContent);
2936 UtRegisterTest(
"SigTest72TestNegatedContent", SigTest72TestNegatedContent);
2937 UtRegisterTest(
"SigTest73TestNegatedContent", SigTest73TestNegatedContent);
2938 UtRegisterTest(
"SigTest74TestNegatedContent", SigTest74TestNegatedContent);
2939 UtRegisterTest(
"SigTest75TestNegatedContent", SigTest75TestNegatedContent);
2944 UtRegisterTest(
"DetectLongContentTest1", DetectLongContentTest1);
2945 UtRegisterTest(
"DetectLongContentTest2", DetectLongContentTest2);
2946 UtRegisterTest(
"DetectLongContentTest3", DetectLongContentTest3);