55 static void DetectContentRegisterTests(
void);
84 uint8_t **pstr, uint16_t *plen)
89 slen = strlen(contentstr);
93 uint8_t buffer[slen + 1];
94 strlcpy((
char *)&buffer, contentstr, slen + 1);
106 uint8_t binstr[3] =
"";
108 uint16_t bin_count = 0;
110 for (i = 0, x = 0; i < slen; i++) {
116 SCLogError(
"Incomplete hex code in content - %s. Invalidating signature.",
124 }
else if(!escape &&
str[i] ==
'\\') {
128 if (isdigit((
unsigned char)
str[i]) ||
129 str[i] ==
'A' ||
str[i] ==
'a' ||
130 str[i] ==
'B' ||
str[i] ==
'b' ||
131 str[i] ==
'C' ||
str[i] ==
'c' ||
132 str[i] ==
'D' ||
str[i] ==
'd' ||
133 str[i] ==
'E' ||
str[i] ==
'e' ||
134 str[i] ==
'F' ||
str[i] ==
'f')
138 binstr[binpos] = (char)
str[i];
142 uint8_t c = strtol((
char *)binstr, (
char **) NULL, 16) & 0xFF;
148 }
else if (
str[i] ==
' ') {
151 else if (
str[i] !=
',') {
153 "content - %s, hex %c. Invalidating signature.",
171 }
else if (
str[i] ==
'"') {
172 SCLogError(
"Invalid unescaped double quote within content section.");
181 if (bin_count % 2 != 0) {
183 "%s - %s. Invalidating signature.",
184 keyword, contentstr);
198 memcpy(ptr,
str, slen);
200 *plen = (uint16_t)slen;
212 const char *contentstr)
215 uint8_t *content = NULL;
236 spm_global_thread_ctx);
254 const char *contentstr)
266 SCLogDebug(
"DetectContentData \"cd\" is NULL");
270 if (tmpstr != NULL) {
299 if (tmprstr != NULL) {
354 SCLogError(
"content string \"%s\" incompatible with %s transform", contentstr, tstr);
362 sm->
ctx = (
void *)cd;
417 int max_offset = 0, total_len = 0;
419 for (; sm != NULL; sm = sm->
next) {
425 SCLogDebug(
"content_len %d; negated: %s; distance: %d, offset: %d, depth: %d",
437 if (max_size < check) {
448 max_offset =
MAX(max_offset, cd->
offset);
467 if (max_right_edge_i < 0) {
471 uint32_t max_right_edge = (uint32_t)max_right_edge_i;
474 if (min_dsize_required >= 0) {
475 SCLogDebug(
"min_dsize %d; max_right_edge %d", min_dsize_required, max_right_edge);
476 if ((uint32_t)min_dsize_required > max_right_edge) {
477 SCLogError(
"signature can't match as required content length %d exceeds dsize value %d",
478 min_dsize_required, max_right_edge);
501 #define VALIDATE(e) \
506 uint16_t offset_plus_pat = 0;
508 bool has_active_depth_chain =
false;
510 bool has_depth =
false;
511 bool has_ends_with =
false;
512 uint16_t ends_with_depth = 0;
514 for (
SigMatch *sm = sm_head; sm != NULL; sm = sm->
next) {
523 has_active_depth_chain =
false;
526 if (sm->prev == NULL) {
551 has_active_depth_chain =
false;
557 has_active_depth_chain =
true;
560 SCLogDebug(
"sm %p depth %u offset %u distance %d within %d", sm, cd->
depth,
569 has_active_depth_chain =
false;
573 SCLogDebug(
"no distance, reset offset_plus_pat & offset");
574 offset_plus_pat =
offset = 0;
577 SCLogDebug(
"stored: offset %u depth %u offset_plus_pat %u "
578 "has_active_depth_chain %s",
579 offset, depth, offset_plus_pat, has_active_depth_chain ?
"true" :
"false");
585 if (has_active_depth_chain) {
587 if (depth && depth > offset_plus_pat) {
592 "distance to add: %u. depth + dist %u", dist, depth + dist);
596 depth + cd->
within + dist <= UINT16_MAX);
597 depth = cd->
depth = (uint16_t)(depth + cd->
within + dist);
605 if (cd->
depth == 0 && depth != 0) {
610 offset_plus_pat + cd->
distance <= UINT16_MAX);
616 depth + cd->
within <= UINT16_MAX);
617 depth = cd->
depth = (uint16_t)(cd->
within + depth);
621 has_ends_with =
true;
622 if (ends_with_depth == 0)
623 ends_with_depth = depth;
624 ends_with_depth =
MIN(ends_with_depth, depth);
632 cd->
offset = offset_plus_pat;
661 has_ends_with =
true;
662 if (ends_with_depth == 0)
663 ends_with_depth = depth;
664 ends_with_depth =
MIN(ends_with_depth, depth);
668 has_active_depth_chain =
false;
679 SCLogDebug(
"non-anchored PCRE not supported, reset offset_plus_pat & offset");
680 offset_plus_pat =
offset = depth = 0;
682 has_active_depth_chain =
false;
686 SCLogDebug(
"keyword not supported, reset offset_plus_pat & offset");
687 offset_plus_pat =
offset = depth = 0;
688 has_active_depth_chain =
false;
693 if (has_depth && has_ends_with) {
694 for (
SigMatch *sm = sm_head; sm != NULL; sm = sm->
next) {
699 cd->
depth = ends_with_depth;
719 static inline bool NeedsAsHex(uint8_t c)
743 if (NeedsAsHex(cd->
content[i])) {
745 snprintf(hex_str,
sizeof(hex_str),
"%s%02X", !hex ?
"|" :
" ", cd->
content[i]);
750 snprintf(p_str,
sizeof(p_str),
"%s%c", hex ?
"|" :
"", cd->
content[i]);
764 static bool TestLastContent(
const Signature *s, uint16_t o, uint16_t d)
780 if (d != cd->
depth) {
787 #define TEST_RUN(sig, o, d) \
789 SCLogDebug("TEST_RUN start: '%s'", (sig)); \
790 DetectEngineCtx *de_ctx = DetectEngineCtxInit(); \
791 FAIL_IF_NULL(de_ctx); \
792 de_ctx->flags |= DE_QUIET; \
794 snprintf(rule, sizeof(rule), "alert tcp any any -> any any (%s sid:1; rev:1;)", (sig)); \
795 Signature *s = DetectEngineAppendSig(de_ctx, rule); \
797 SigAddressPrepareStage1(de_ctx); \
798 bool res = TestLastContent(s, (o), (d)); \
799 FAIL_IF(res == false); \
800 DetectEngineCtxFree(de_ctx); \
807 static int DetectContentDepthTest01(
void)
810 TEST_RUN(
"content:\"abc\"; offset:1; depth:3;", 1, 4);
812 TEST_RUN(
"dsize:10; content:\"abc\";", 0, 10);
813 TEST_RUN(
"dsize:<10; content:\"abc\";", 0, 10);
814 TEST_RUN(
"dsize:5<>10; content:\"abc\";", 0, 10);
817 TEST_RUN(
"content:\"abc\"; depth:3; content:\"xyz\"; distance:0; within:3; ", 3, 6);
819 TEST_RUN(
"content:\"abc\"; offset:3; depth:3; content:\"xyz\"; distance:0; within:3; ", 6, 9);
820 TEST_RUN(
"content:\"abc\"; depth:6; content:\"xyz\"; distance:0; within:3; ", 3, 9);
823 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; distance:0; within:3; content:\"xyz\"; distance:0; within:3; ", 6, 9);
825 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; content:\"xyz\"; distance:0; within:3; ", 3, 0);
827 TEST_RUN(
"content:\"abc\"; depth:3; pcre:/\"klm\"/; content:\"xyz\"; distance:0; within:3; ", 0, 0);
829 TEST_RUN(
"content:\"abc\"; depth:3; pcre:/\"klm\"/R; content:\"xyz\"; distance:0; within:3; ", 3, 0);
830 TEST_RUN(
"content:\"abc\"; offset:3; depth:3; pcre:/\"klm\"/R; content:\"xyz\"; distance:0; within:3; ", 6, 0);
832 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; within:3; content:\"xyz\"; within:3; ", 0, 9);
834 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; distance:0; content:\"xyz\"; distance:0; ", 6, 0);
837 TEST_RUN(
"content:\"abc\"; depth:6; isdataat:!1,relative; content:\"klm\";", 0, 6);
838 TEST_RUN(
"content:\"abc\"; depth:3; content:\"klm\"; within:3; content:\"xyz\"; within:3; isdataat:!1,relative; content:\"def\"; ", 0, 9);
840 TEST_RUN(
"content:\"|03|\"; depth:1; content:\"|e0|\"; distance:4; within:1;", 5, 6);
841 TEST_RUN(
"content:\"|03|\"; depth:1; content:\"|e0|\"; distance:4; within:1; content:\"Cookie|3a|\"; distance:5; within:7;", 11, 18);
843 TEST_RUN(
"content:\"this\"; content:\"is\"; within:6; content:\"big\"; within:8; content:\"string\"; within:8;", 0, 0);
845 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);
846 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);
848 TEST_RUN(
"content:\"|0d 0a 0d 0a|\"; content:\"code=\"; distance:0;", 4, 0);
849 TEST_RUN(
"content:\"|0d 0a 0d 0a|\"; content:\"code=\"; distance:0; content:\"xploit.class\"; distance:2; within:18;", 11, 0);
851 TEST_RUN(
"content:\"|16 03|\"; depth:2; content:\"|55 04 0a|\"; distance:0;", 2, 0);
852 TEST_RUN(
"content:\"|16 03|\"; depth:2; content:\"|55 04 0a|\"; distance:0; content:\"|0d|LogMeIn, Inc.\"; distance:1; within:14;", 6, 0);
853 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);
855 TEST_RUN(
"content:\"=\"; offset:4; depth:9;", 4, 13);
858 TEST_RUN(
"content:\"=\"; offset:4; depth:9; content:\"=&\"; distance:55; within:2;", 60, 70);
861 TEST_RUN(
"content:\"0123456789\"; content:\"abcdef\"; distance:1048576;", 0, 0);
864 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2;", 11, 18);
865 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
866 "00 00|\"; distance:0;",
868 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
869 "00 00|\"; distance:0; content:\"|0c 00|\"; distance:19; within:2;",
871 TEST_RUN(
"content:\"SMB\"; depth:8; content:\"|09 00|\"; distance:8; within:2; content:\"|05 "
872 "00 00|\"; distance:0; content:\"|0c 00|\"; distance:19; within:2; content:\"|15 00 "
873 "00 00|\"; distance:20; within:4;",
884 static void DetectContentPrintAll(
SigMatch *sm)
896 for (; first_sm != NULL; first_sm = first_sm->
next) {
898 SCLogDebug(
"Printing SigMatch DETECT_CONTENT %d", ++i);
906 static int g_file_data_buffer_id = 0;
907 static int g_dce_stub_data_buffer_id = 0;
912 static int DetectContentParseTest01 (
void)
916 const char *teststring =
"abc\\:def";
917 const char *teststringparsed =
"abc:def";
921 FAIL_IF(spm_global_thread_ctx == NULL);
925 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
926 SCLogDebug(
"expected %s got ", teststringparsed);
933 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
943 static int DetectContentParseTest02 (
void)
947 const char *teststring =
"abc\\;def";
948 const char *teststringparsed =
"abc;def";
952 FAIL_IF(spm_global_thread_ctx == NULL);
956 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
957 SCLogDebug(
"expected %s got ", teststringparsed);
964 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
974 static int DetectContentParseTest03 (
void)
978 const char *teststring =
"abc\\\"def";
979 const char *teststringparsed =
"abc\"def";
983 FAIL_IF(spm_global_thread_ctx == NULL);
987 if (memcmp(cd->
content, teststringparsed, strlen(teststringparsed)) != 0) {
988 SCLogDebug(
"expected %s got ", teststringparsed);
995 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1005 static int DetectContentParseTest04 (
void)
1009 const char *teststring =
"abc\\\\def";
1010 const char *teststringparsed =
"abc\\def";
1014 FAIL_IF(spm_global_thread_ctx == NULL);
1019 if (memcmp(cd->
content, teststringparsed,
len) != 0) {
1020 SCLogDebug(
"expected %s got ", teststringparsed);
1027 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1037 static int DetectContentParseTest05 (
void)
1041 const char *teststring =
"abc\\def";
1045 FAIL_IF(spm_global_thread_ctx == NULL);
1062 static int DetectContentParseTest06 (
void)
1066 const char *teststring =
"a|42|c|44|e|46|";
1067 const char *teststringparsed =
"abcdef";
1071 FAIL_IF(spm_global_thread_ctx == NULL);
1076 if (memcmp(cd->
content, teststringparsed,
len) != 0) {
1077 SCLogDebug(
"expected %s got ", teststringparsed);
1084 SCLogDebug(
"expected %s got NULL: ", teststringparsed);
1094 static int DetectContentParseTest07 (
void)
1098 const char *teststring =
"";
1102 FAIL_IF(spm_global_thread_ctx == NULL);
1117 static int DetectContentParseTest08 (
void)
1121 const char *teststring =
"";
1125 FAIL_IF(spm_global_thread_ctx == NULL);
1146 static int DetectContentLongPatternMatchTest(uint8_t *raw_eth_pkt, uint16_t pktsize,
const char *sig,
1160 memset(&th_v, 0,
sizeof(th_v));
1183 printf(
"relative next flag set on final match which is content: ");
1188 SCLogDebug(
"---DetectContentLongPatternMatchTest---");
1205 if (det_ctx != NULL)
1219 static int DetectContentLongPatternMatchTestWrp(
const char *sig, uint32_t sid)
1226 uint8_t raw_eth_pkt[] = {
1227 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
1228 0x00,0x00,0x00,0x00,0x08,0x00,0x45,0x00,
1229 0x00,0x85,0x00,0x01,0x00,0x00,0x40,0x06,
1230 0x7c,0x70,0x7f,0x00,0x00,0x01,0x7f,0x00,
1231 0x00,0x01,0x00,0x14,0x00,0x50,0x00,0x00,
1232 0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x02,
1233 0x20,0x00,0xc9,0xad,0x00,0x00,0x48,0x69,
1234 0x2c,0x20,0x74,0x68,0x69,0x73,0x20,0x69,
1235 0x73,0x20,0x61,0x20,0x62,0x69,0x67,0x20,
1236 0x74,0x65,0x73,0x74,0x20,0x74,0x6f,0x20,
1237 0x63,0x68,0x65,0x63,0x6b,0x20,0x63,0x6f,
1238 0x6e,0x74,0x65,0x6e,0x74,0x20,0x6d,0x61,
1239 0x74,0x63,0x68,0x65,0x73,0x20,0x6f,0x66,
1240 0x20,0x73,0x70,0x6c,0x69,0x74,0x74,0x65,
1241 0x64,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
1242 0x6e,0x73,0x20,0x62,0x65,0x74,0x77,0x65,
1243 0x65,0x6e,0x20,0x6d,0x75,0x6c,0x74,0x69,
1244 0x70,0x6c,0x65,0x20,0x63,0x68,0x75,0x6e,
1247 return DetectContentLongPatternMatchTest(raw_eth_pkt, (uint16_t)
sizeof(raw_eth_pkt),
1254 static int DetectContentLongPatternMatchTest01(
void)
1256 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1257 " content:\"Hi, this is a big test\"; sid:1;)";
1258 return DetectContentLongPatternMatchTestWrp(sig, 1);
1264 static int DetectContentLongPatternMatchTest02(
void)
1266 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1267 " content:\"Hi, this is a big test to check content matches of"
1268 " splitted patterns between multiple chunks!\"; sid:1;)";
1269 return DetectContentLongPatternMatchTestWrp(sig, 1);
1276 static int DetectContentLongPatternMatchTest03(
void)
1279 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\";"
1280 " content:\"Hi, this is a big test to check content matches of"
1281 " splitted patterns between multiple splitted chunks!\"; sid:1;)";
1282 return (DetectContentLongPatternMatchTestWrp(sig, 1) == 0) ? 1: 0;
1288 static int DetectContentLongPatternMatchTest04(
void)
1290 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1291 " content:\"Hi, this is\"; depth:15 ;content:\"a big test\"; "
1292 " within:15; content:\"to check content matches of\"; "
1293 " within:30; content:\"splitted patterns\"; distance:1; "
1296 return DetectContentLongPatternMatchTestWrp(sig, 1);
1304 static int DetectContentLongPatternMatchTest05(
void)
1306 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1307 " content:\"Hi, this is a big\"; depth:17; "
1308 " isdataat:30, relative; "
1309 " content:\"test\"; within: 5; distance:1; "
1310 " isdataat:15, relative; "
1311 " content:\"of splitted\"; within:37; distance:15; "
1312 " isdataat:20,relative; "
1313 " content:\"patterns\"; within:9; distance:1; "
1314 " isdataat:10, relative; "
1316 return DetectContentLongPatternMatchTestWrp(sig, 1);
1324 static int DetectContentLongPatternMatchTest06(
void)
1326 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1327 " content:\"Hi, this is a big test to check cont\"; depth:36;"
1328 " content:\"ent matches\"; within:11; distance:0; "
1329 " content:\"of splitted patterns between multiple\"; "
1330 " within:38; distance:1; "
1331 " content:\"chunks!\"; within: 8; distance:1; "
1333 return DetectContentLongPatternMatchTestWrp(sig, 1);
1340 static int DetectContentLongPatternMatchTest07(
void)
1342 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1343 " content:\"chunks!\"; "
1344 " content:\"content matches\"; offset:32; depth:47; "
1345 " content:\"of splitted patterns between multiple\"; "
1346 " content:\"Hi, this is a big\"; offset:0; depth:17; "
1348 return DetectContentLongPatternMatchTestWrp(sig, 1);
1355 static int DetectContentLongPatternMatchTest08(
void)
1357 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1358 " content:\"ent matches\"; "
1359 " content:\"of splitted patterns between multiple\"; "
1360 " within:38; distance:1; "
1361 " content:\"chunks!\"; within: 8; distance:1; "
1362 " content:\"Hi, this is a big test to check cont\"; depth:36;"
1364 return DetectContentLongPatternMatchTestWrp(sig, 1);
1371 static int DetectContentLongPatternMatchTest09(
void)
1373 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1374 " content:\"ent matches\"; "
1375 " content:\"of splitted patterns between multiple\"; "
1376 " offset:47; depth:85; "
1377 " content:\"chunks!\"; within: 8; distance:1; "
1378 " content:\"Hi, this is a big test to chec\"; depth:36;"
1379 " content:\"k cont\"; distance:0; within:6;"
1381 return DetectContentLongPatternMatchTestWrp(sig, 1);
1387 static int DetectContentLongPatternMatchTest10(
void)
1389 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1390 " content:\"Hi, this is a big test to check \"; "
1391 " content:\"con\"; "
1393 return DetectContentLongPatternMatchTestWrp(sig, 1);
1399 static int DetectContentLongPatternMatchTest11(
void)
1401 const char *sig =
"alert tcp any any -> any any (msg:\"Nothing..\"; "
1405 return DetectContentLongPatternMatchTestWrp(sig, 1);
1408 static int DetectContentParseTest09(
void)
1411 const char *teststring =
"boo";
1415 FAIL_IF(spm_global_thread_ctx == NULL);
1428 static int DetectContentParseTest17(
void)
1431 const char *sigstr =
"alert tcp any any -> any any (msg:\"Dummy\"; "
1432 "content:\"one\"; content:\"two\"; within:2; sid:1;)";
1454 static int DetectContentParseTest18(
void)
1482 static int DetectContentParseTest19(
void)
1491 "(msg:\"Testing dce iface, stub_data with content\"; "
1492 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1494 "content:\"one\"; distance:0; sid:1;)");
1506 "alert tcp any any -> any any "
1507 "(msg:\"Testing dce iface, stub_data with contents & distance, within\"; "
1508 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1510 "content:\"one\"; distance:0; content:\"two\"; within:10; sid:2;)");
1525 "alert tcp any any -> any any "
1526 "(msg:\"Testing dce iface, stub with contents, distance, within\"; "
1527 "dce_iface:3919286a-b10c-11d0-9ba8-00c04fd92ef5; "
1529 "content:\"one\"; distance:0; "
1530 "content:\"two\"; within:10; distance:2; sid:3;)");
1545 "(msg:\"Testing content\"; "
1546 "content:\"one\"; sid:4;)");
1558 static int DetectContentParseTest20(
void)
1569 "alert udp any any -> any any "
1570 "(msg:\"test\"; content:\"\"; sid:238012;)");
1587 static int DetectContentParseTest21(
void)
1598 "alert udp any any -> any any "
1599 "(msg:\"test\"; content:\"; sid:238012;)");
1616 static int DetectContentParseTest22(
void)
1627 "alert udp any any -> any any "
1628 "(msg:\"test\"; content:\"boo; sid:238012;)");
1645 static int DetectContentParseTest23(
void)
1656 "alert udp any any -> any any "
1657 "(msg:\"test\"; content:boo\"; sid:238012;)");
1674 static int DetectContentParseTest24(
void)
1687 "alert udp any any -> any any "
1688 "(msg:\"test\"; content: !\"boo\"; sid:238012;)");
1690 printf(
"de_ctx->sig_list == NULL: ");
1697 printf(
"de_ctx->pmatch_tail == NULL || de_ctx->pmatch_tail->ctx == NULL: ");
1716 static int DetectContentParseTest25(
void)
1727 "alert udp any any -> any any "
1728 "(msg:\"test\"; content:\"|\"; sid:1;)");
1745 static int DetectContentParseTest26(
void)
1756 "alert udp any any -> any any "
1757 "(msg:\"test\"; content:\"|af\"; sid:1;)");
1774 static int DetectContentParseTest27(
void)
1785 "alert udp any any -> any any "
1786 "(msg:\"test\"; content:\"af|\"; sid:1;)");
1803 static int DetectContentParseTest28(
void)
1814 "alert udp any any -> any any "
1815 "(msg:\"test\"; content:\"|af|\"; sid:1;)");
1832 static int DetectContentParseTest29(
void)
1843 "alert udp any any -> any any "
1844 "(msg:\"test\"; content:\"aast|\"; sid:1;)");
1861 static int DetectContentParseTest30(
void)
1872 "alert udp any any -> any any "
1873 "(msg:\"test\"; content:\"aast|af\"; sid:1;)");
1890 static int DetectContentParseTest31(
void)
1901 "alert udp any any -> any any "
1902 "(msg:\"test\"; content:\"aast|af|\"; sid:1;)");
1919 static int DetectContentParseTest32(
void)
1930 "alert udp any any -> any any "
1931 "(msg:\"test\"; content:\"|af|asdf\"; sid:1;)");
1948 static int DetectContentParseTest33(
void)
1959 "alert udp any any -> any any "
1960 "(msg:\"test\"; content:\"|af|af|\"; sid:1;)");
1977 static int DetectContentParseTest34(
void)
1988 "alert udp any any -> any any "
1989 "(msg:\"test\"; content:\"|af|af|af\"; sid:1;)");
2006 static int DetectContentParseTest35(
void)
2017 "alert udp any any -> any any "
2018 "(msg:\"test\"; content:\"|af|af|af|\"; sid:1;)");
2032 static int SigTestPositiveTestContent(
const char *rule, uint8_t *buf)
2034 uint16_t buflen = strlen((
char *)buf);
2038 memset(&th_v, 0,
sizeof(th_v));
2064 static int DetectContentParseTest41(
void)
2069 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2073 for (
int i = 0; i < patlen; idx++, i++) {
2074 teststring[idx] =
'a';
2076 teststring[idx++] =
'\0';
2080 FAIL_IF(spm_global_thread_ctx == NULL);
2097 static int DetectContentParseTest42(
void)
2102 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2106 for (
int i = 0; i < patlen; idx++, i++) {
2107 teststring[idx] =
'a';
2109 teststring[idx++] =
'\0';
2113 FAIL_IF(spm_global_thread_ctx == NULL);
2127 static int DetectContentParseTest43(
void)
2132 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2136 teststring[idx++] =
'|';
2137 teststring[idx++] =
'4';
2138 teststring[idx++] =
'6';
2139 teststring[idx++] =
'|';
2140 for (
int i = 0; i < (patlen - 4); idx++, i++) {
2141 teststring[idx] =
'a';
2143 teststring[idx++] =
'\0';
2147 FAIL_IF(spm_global_thread_ctx == NULL);
2164 static int DetectContentParseTest44(
void)
2169 char *teststring =
SCMalloc(
sizeof(
char) * (patlen + 1));
2173 teststring[idx++] =
'|';
2174 teststring[idx++] =
'4';
2175 teststring[idx++] =
'6';
2176 teststring[idx++] =
'|';
2177 for (
int i = 0; i < (patlen - 4); idx++, i++) {
2178 teststring[idx] =
'a';
2180 teststring[idx++] =
'\0';
2184 FAIL_IF(spm_global_thread_ctx == NULL);
2201 static int DetectContentParseTest45(
void)
2210 "alert tcp any any -> any any "
2211 "(msg:\"test\"; content:\"|ff|\" content:\"TEST\"; sid:1;)");
2219 static int SigTestNegativeTestContent(
const char *rule, uint8_t *buf)
2221 uint16_t buflen = strlen((
char *)buf);
2226 memset(&th_v, 0,
sizeof(th_v));
2251 if (det_ctx != NULL) {
2267 static int SigTest41TestNegatedContent(
void)
2269 return SigTestPositiveTestContent(
"alert tcp any any -> any any "
2270 "(msg:\"HTTP URI cap\"; content:!\"GES\"; sid:1;)",
2272 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\n"
2273 "GET /two/ HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2281 static int SigTest41aTestNegatedContent(
void)
2283 (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");
2292 static int SigTest42TestNegatedContent(
void)
2294 return SigTestPositiveTestContent(
2295 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; depth:22; offset:35; sid:1;)",
2296 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2306 static int SigTest43TestNegatedContent(
void)
2308 return SigTestNegativeTestContent(
2309 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; depth:34; offset:23; sid:1;)",
2310 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2318 static int SigTest44TestNegatedContent(
void)
2320 return SigTestPositiveTestContent(
2321 "alert tcp any any -> any any (content:!\"eeeeeeeeeee\"; offset:40; depth:35; sid:1;)",
2322 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2329 static int SigTest45TestNegatedContent(
void)
2331 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:5; "
2332 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2333 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2340 static int SigTest46TestNegatedContent(
void)
2342 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaaE\"; "
2343 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2344 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2352 static int SigTest47TestNegatedContent(
void)
2354 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; offset:5; "
2355 "content:!\"eeeeeeeeeee\"; depth:23; sid:1;)",
2356 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2363 static int SigTest48TestNegatedContent(
void)
2365 return SigTestPositiveTestContent(
2366 "alert tcp any any -> any any (content:\"GET\"; content:!\"GES\"; within:26; sid:1;)",
2367 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2368 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2375 static int SigTest49TestNegatedContent(
void)
2377 return SigTestNegativeTestContent(
2378 "alert tcp any any -> any any (content:\"GET\"; content:!\"Host\"; within:26; sid:1;)",
2379 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2380 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2387 static int SigTest50TestNegatedContent(
void)
2389 return SigTestPositiveTestContent(
2390 "alert tcp any any -> any any (content:\"GET\"; content:!\"GES\"; distance:25; sid:1;)",
2391 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2392 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2402 static int SigTest51TestNegatedContent(
void)
2404 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");
2411 static int SigTest52TestNegatedContent(
void)
2413 return SigTestNegativeTestContent(
2414 "alert tcp any any -> any any (content:\"GES\"; content:!\"BOO\"; sid:1;)",
2415 (uint8_t *)
"GET /one/ HTTP/1.1\r\n Host: one.example.org\r\n\r\n\r\nGET /two/ "
2416 "HTTP/1.1\r\nHost: two.example.org\r\n\r\n\r\n");
2423 static int SigTest53TestNegatedContent(
void)
2425 return SigTestNegativeTestContent(
2426 "alert tcp any any -> any any (content:\"aaa\"; content:!\"Ggggg\"; within:56; sid:1;)",
2427 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2434 static int SigTest54TestNegatedContent(
void)
2436 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2437 "content:!\"gggggg\"; within:20; sid:1;)",
2438 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff ggggggggg hhhhhhhh");
2445 static int SigTest55TestNegatedContent(
void)
2447 return SigTestNegativeTestContent(
2448 "alert tcp any any -> any any (content:!\"aaa\"; depth:5; sid:1;)",
2449 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff gggggggg hhhhhhhh");
2456 static int SigTest56TestNegatedContent(
void)
2458 return SigTestPositiveTestContent(
2459 "alert tcp any any -> any any (content:\"aaa\"; content:\"Ggggg\"; within:56; sid:1;)",
2460 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Gggggggg hhhhhhhh");
2467 static int SigTest57TestNegatedContent(
void)
2469 return SigTestNegativeTestContent(
2470 "alert tcp any any -> any any (content:\"aaa\"; content:!\"Ggggg\"; within:56; sid:1;)",
2471 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2478 static int SigTest58TestNegatedContent(
void)
2480 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2481 "content:!\"Ggggg\"; distance:57; sid:1;)",
2482 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2489 static int SigTest59TestNegatedContent(
void)
2491 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2492 "content:!\"Gggg\"; distance:30; sid:1;)",
2493 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2496 static int SigTest60TestNegatedContent(
void)
2498 return SigTestNegativeTestContent(
2499 "alert tcp any any -> any any (content:!\"aaa\"; content:\"Ggggg\"; sid:1;)",
2500 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2503 static int SigTest61TestNegatedContent(
void)
2505 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2506 "content:!\"Ggggg\"; within:30; sid:1;)",
2507 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2517 static int SigTest62TestNegatedContent(
void)
2519 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2520 "content:!\"Gggggg\"; within:49; sid:1;)",
2521 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2524 static int SigTest63TestNegatedContent(
void)
2526 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2527 "content:!\"Gggggg\"; within:56; sid:1;)",
2528 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2531 static int SigTest64TestNegatedContent(
void)
2533 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2534 "content:!\"Gggggg\"; within:30; sid:1;)",
2535 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2545 static int SigTest65TestNegatedContent(
void)
2547 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2548 "content:!\"Gggggg\"; distance:0; within:49; sid:1;)",
2549 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2552 static int SigTest66TestNegatedContent(
void)
2554 return SigTestPositiveTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2555 "content:!\"Gggggg\"; within:30; sid:1;)",
2556 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2559 static int SigTest67TestNegatedContent(
void)
2561 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:10; "
2562 "content:!\"XXXX\"; within:56; sid:1;)",
2563 (uint8_t *)
"aaa bbbb cccc XXXXdddd eeeeeeeeeee ffffffffff XXXXggggg hhhhhhhh");
2566 static int SigTest68TestNegatedContent(
void)
2568 return SigTestPositiveTestContent(
2569 "alert tcp any any -> any any (content:\"aaa\"; depth:10; content:\"cccc\"; offset:8; "
2570 "content:!\"Gggggg\"; within:28; content:\"hhhhhhhh\"; sid:1;)",
2571 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2574 static int SigTest69TestNegatedContent(
void)
2576 return SigTestNegativeTestContent(
2577 "alert tcp any any -> any any (content:\"aaa\"; depth:10; content:\"cccc\"; offset:8; "
2578 "content:!\"Gggggg\"; within:48; content:\"hhhhhhhh\"; sid:1;)",
2579 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2582 static int SigTest70TestNegatedContent(
void)
2584 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2585 "content:!\"Gggggg\"; within:52; sid:1;)",
2586 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2590 static int SigTest71TestNegatedContent(
void)
2592 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2593 "content:!\"Gggggg\"; within:40; distance:43; sid:1;)",
2594 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2597 static int SigTest72TestNegatedContent(
void)
2599 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; "
2600 "content:!\"Gggggg\"; within:49; distance:43; sid:1;)",
2601 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff Ggggggggg hhhhhhhh");
2604 static int SigTest73TestNegatedContent(
void)
2606 return SigTestNegativeTestContent(
"alert tcp any any -> any any (content:\"aaa\"; depth:5; "
2607 "content:!\"eeeeeeeeeee\"; depth:35; sid:1;)",
2608 (uint8_t *)
"aaa bbbb cccc dddddddd eeeeeeeeeee ffffffffff ggggggggg hhhhhhhh");
2611 static int SigTest74TestNegatedContent(
void)
2613 return SigTestPositiveTestContent(
"alert tcp any any -> any any (msg:\"HTTP URI cap\"; content:\"USER\"; content:!\"PASS\"; sid:1;)", (uint8_t *)
"USER apple");
2616 static int SigTest75TestNegatedContent(
void)
2618 return SigTestPositiveTestContent(
"alert tcp any any -> any any (msg:\"HTTP URI cap\"; content:\"USER\"; content:\"!PASS\"; sid:1;)", (uint8_t *)
"USER !PASS");
2621 static int SigTest76TestBug134(
void)
2623 uint8_t *buf = (uint8_t *)
"test detect ${IFS} in traffic";
2624 uint16_t buflen = strlen((
char *)buf);
2629 memset(&f, 0,
sizeof(
Flow));
2638 char sig[] =
"alert tcp any any -> any 515 "
2639 "(msg:\"detect IFS\"; flow:to_server,established; content:\"${IFS}\";"
2640 " depth:50; offset:0; sid:900091; rev:1;)";
2655 static int SigTest77TestBug139(
void)
2658 0x12, 0x23, 0x34, 0x35, 0x52, 0x52, 0x24, 0x42, 0x22, 0x24,
2659 0x52, 0x24, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x34 };
2660 uint16_t buflen =
sizeof(buf);
2665 char sig[] =
"alert udp any any -> any 53 (msg:\"dns testing\";"
2666 " content:\"|00 00|\"; depth:5; offset:13; sid:9436601;"
2680 static int DetectLongContentTestCommon(
const char *sig, uint32_t sid)
2683 static uint8_t pkt[739] = {
2684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2685 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
2686 0x02, 0xd5, 0x4a, 0x18, 0x40, 0x00, 0x40, 0x06,
2687 0xd7, 0xd6, 0x0a, 0x10, 0x01, 0x0b, 0x0a, 0x10,
2688 0x01, 0x0a, 0xdb, 0x36, 0x00, 0x50, 0xca, 0xc5,
2689 0xcc, 0xd1, 0x95, 0x77, 0x0f, 0x7d, 0x80, 0x18,
2690 0x00, 0xe5, 0x77, 0x9d, 0x00, 0x00, 0x01, 0x01,
2691 0x08, 0x0a, 0x1d, 0xe0, 0x86, 0xc6, 0xfc, 0x73,
2692 0x49, 0xf3, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x2f,
2693 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e,
2694 0x31, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d,
2695 0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x63,
2696 0x75, 0x72, 0x6c, 0x2f, 0x37, 0x2e, 0x33, 0x37,
2697 0x2e, 0x30, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74,
2698 0x3a, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x36, 0x2e,
2699 0x31, 0x2e, 0x31, 0x30, 0x0d, 0x0a, 0x41, 0x63,
2700 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x2a, 0x2f,
2701 0x2a, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65,
2702 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74,
2703 0x68, 0x3a, 0x20, 0x35, 0x32, 0x38, 0x0d, 0x0a,
2704 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
2705 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70,
2706 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
2707 0x6e, 0x2f, 0x78, 0x2d, 0x77, 0x77, 0x77, 0x2d,
2708 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x75, 0x72, 0x6c,
2709 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x0d,
2710 0x0a, 0x0d, 0x0a, 0x58, 0x58, 0x58, 0x58, 0x58,
2711 0x58, 0x58, 0x58, 0x41, 0x41, 0x41, 0x41, 0x41,
2712 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2713 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2714 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2715 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2716 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2717 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2718 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
2719 0x41, 0x41, 0x41, 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, 0x58, 0x58, 0x58, 0x58, 0x58,
2779 return DetectContentLongPatternMatchTest(pkt, (uint16_t)
sizeof(pkt), sig,
2783 static int DetectLongContentTest1(
void)
2786 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2788 return DetectLongContentTestCommon(sig, 1);
2791 static int DetectLongContentTest2(
void)
2794 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2796 return DetectLongContentTestCommon(sig, 1);
2799 static int DetectLongContentTest3(
void)
2802 const char *sig =
"alert tcp any any -> any any (msg:\"Test Rule\"; content:\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"; sid:1;)";
2804 return !DetectLongContentTestCommon(sig, 1);
2807 static int DetectBadBinContent(
void)
2814 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|a|\"; sid:1;)"));
2816 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|aa b|\"; sid:1;)"));
2818 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|aa bz|\"; sid:1;)"));
2821 de_ctx,
"alert tcp any any -> any any (msg:\"test\"; content:\"|22 2 22|\"; sid:1;)"));
2829 static void DetectContentRegisterTests(
void)
2834 UtRegisterTest(
"DetectContentDepthTest01", DetectContentDepthTest01);
2836 UtRegisterTest(
"DetectContentParseTest01", DetectContentParseTest01);
2837 UtRegisterTest(
"DetectContentParseTest02", DetectContentParseTest02);
2838 UtRegisterTest(
"DetectContentParseTest03", DetectContentParseTest03);
2839 UtRegisterTest(
"DetectContentParseTest04", DetectContentParseTest04);
2840 UtRegisterTest(
"DetectContentParseTest05", DetectContentParseTest05);
2841 UtRegisterTest(
"DetectContentParseTest06", DetectContentParseTest06);
2842 UtRegisterTest(
"DetectContentParseTest07", DetectContentParseTest07);
2843 UtRegisterTest(
"DetectContentParseTest08", DetectContentParseTest08);
2844 UtRegisterTest(
"DetectContentParseTest09", DetectContentParseTest09);
2845 UtRegisterTest(
"DetectContentParseTest17", DetectContentParseTest17);
2846 UtRegisterTest(
"DetectContentParseTest18", DetectContentParseTest18);
2847 UtRegisterTest(
"DetectContentParseTest19", DetectContentParseTest19);
2848 UtRegisterTest(
"DetectContentParseTest20", DetectContentParseTest20);
2849 UtRegisterTest(
"DetectContentParseTest21", DetectContentParseTest21);
2850 UtRegisterTest(
"DetectContentParseTest22", DetectContentParseTest22);
2851 UtRegisterTest(
"DetectContentParseTest23", DetectContentParseTest23);
2852 UtRegisterTest(
"DetectContentParseTest24", DetectContentParseTest24);
2853 UtRegisterTest(
"DetectContentParseTest25", DetectContentParseTest25);
2854 UtRegisterTest(
"DetectContentParseTest26", DetectContentParseTest26);
2855 UtRegisterTest(
"DetectContentParseTest27", DetectContentParseTest27);
2856 UtRegisterTest(
"DetectContentParseTest28", DetectContentParseTest28);
2857 UtRegisterTest(
"DetectContentParseTest29", DetectContentParseTest29);
2858 UtRegisterTest(
"DetectContentParseTest30", DetectContentParseTest30);
2859 UtRegisterTest(
"DetectContentParseTest31", DetectContentParseTest31);
2860 UtRegisterTest(
"DetectContentParseTest32", DetectContentParseTest32);
2861 UtRegisterTest(
"DetectContentParseTest33", DetectContentParseTest33);
2862 UtRegisterTest(
"DetectContentParseTest34", DetectContentParseTest34);
2863 UtRegisterTest(
"DetectContentParseTest35", DetectContentParseTest35);
2864 UtRegisterTest(
"DetectContentParseTest41", DetectContentParseTest41);
2865 UtRegisterTest(
"DetectContentParseTest42", DetectContentParseTest42);
2866 UtRegisterTest(
"DetectContentParseTest43", DetectContentParseTest43);
2867 UtRegisterTest(
"DetectContentParseTest44", DetectContentParseTest44);
2868 UtRegisterTest(
"DetectContentParseTest45", DetectContentParseTest45);
2872 DetectContentLongPatternMatchTest01);
2874 DetectContentLongPatternMatchTest02);
2876 DetectContentLongPatternMatchTest03);
2878 DetectContentLongPatternMatchTest04);
2880 DetectContentLongPatternMatchTest05);
2882 DetectContentLongPatternMatchTest06);
2884 DetectContentLongPatternMatchTest07);
2886 DetectContentLongPatternMatchTest08);
2888 DetectContentLongPatternMatchTest09);
2890 DetectContentLongPatternMatchTest10);
2892 DetectContentLongPatternMatchTest11);
2895 UtRegisterTest(
"SigTest41TestNegatedContent", SigTest41TestNegatedContent);
2897 SigTest41aTestNegatedContent);
2898 UtRegisterTest(
"SigTest42TestNegatedContent", SigTest42TestNegatedContent);
2899 UtRegisterTest(
"SigTest43TestNegatedContent", SigTest43TestNegatedContent);
2900 UtRegisterTest(
"SigTest44TestNegatedContent", SigTest44TestNegatedContent);
2901 UtRegisterTest(
"SigTest45TestNegatedContent", SigTest45TestNegatedContent);
2902 UtRegisterTest(
"SigTest46TestNegatedContent", SigTest46TestNegatedContent);
2903 UtRegisterTest(
"SigTest47TestNegatedContent", SigTest47TestNegatedContent);
2904 UtRegisterTest(
"SigTest48TestNegatedContent", SigTest48TestNegatedContent);
2905 UtRegisterTest(
"SigTest49TestNegatedContent", SigTest49TestNegatedContent);
2906 UtRegisterTest(
"SigTest50TestNegatedContent", SigTest50TestNegatedContent);
2907 UtRegisterTest(
"SigTest51TestNegatedContent", SigTest51TestNegatedContent);
2908 UtRegisterTest(
"SigTest52TestNegatedContent", SigTest52TestNegatedContent);
2909 UtRegisterTest(
"SigTest53TestNegatedContent", SigTest53TestNegatedContent);
2910 UtRegisterTest(
"SigTest54TestNegatedContent", SigTest54TestNegatedContent);
2911 UtRegisterTest(
"SigTest55TestNegatedContent", SigTest55TestNegatedContent);
2912 UtRegisterTest(
"SigTest56TestNegatedContent", SigTest56TestNegatedContent);
2913 UtRegisterTest(
"SigTest57TestNegatedContent", SigTest57TestNegatedContent);
2914 UtRegisterTest(
"SigTest58TestNegatedContent", SigTest58TestNegatedContent);
2915 UtRegisterTest(
"SigTest59TestNegatedContent", SigTest59TestNegatedContent);
2916 UtRegisterTest(
"SigTest60TestNegatedContent", SigTest60TestNegatedContent);
2917 UtRegisterTest(
"SigTest61TestNegatedContent", SigTest61TestNegatedContent);
2918 UtRegisterTest(
"SigTest62TestNegatedContent", SigTest62TestNegatedContent);
2919 UtRegisterTest(
"SigTest63TestNegatedContent", SigTest63TestNegatedContent);
2920 UtRegisterTest(
"SigTest64TestNegatedContent", SigTest64TestNegatedContent);
2921 UtRegisterTest(
"SigTest65TestNegatedContent", SigTest65TestNegatedContent);
2922 UtRegisterTest(
"SigTest66TestNegatedContent", SigTest66TestNegatedContent);
2923 UtRegisterTest(
"SigTest67TestNegatedContent", SigTest67TestNegatedContent);
2924 UtRegisterTest(
"SigTest68TestNegatedContent", SigTest68TestNegatedContent);
2925 UtRegisterTest(
"SigTest69TestNegatedContent", SigTest69TestNegatedContent);
2926 UtRegisterTest(
"SigTest70TestNegatedContent", SigTest70TestNegatedContent);
2927 UtRegisterTest(
"SigTest71TestNegatedContent", SigTest71TestNegatedContent);
2928 UtRegisterTest(
"SigTest72TestNegatedContent", SigTest72TestNegatedContent);
2929 UtRegisterTest(
"SigTest73TestNegatedContent", SigTest73TestNegatedContent);
2930 UtRegisterTest(
"SigTest74TestNegatedContent", SigTest74TestNegatedContent);
2931 UtRegisterTest(
"SigTest75TestNegatedContent", SigTest75TestNegatedContent);
2936 UtRegisterTest(
"DetectLongContentTest1", DetectLongContentTest1);
2937 UtRegisterTest(
"DetectLongContentTest2", DetectLongContentTest2);
2938 UtRegisterTest(
"DetectLongContentTest3", DetectLongContentTest3);