48 #define DETECT_BYTE_EXTRACT_BASE_HEX BaseHex
49 #define DETECT_BYTE_EXTRACT_BASE_DEC BaseDec
50 #define DETECT_BYTE_EXTRACT_BASE_OCT BaseOct
54 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_OCT 23
55 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_DEC 20
56 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_HEX 14
58 #define NO_STRING_MAX_BYTES_TO_EXTRACT 8
62 static void DetectByteExtractRegisterTests(
void);
95 SCDetectByteExtractData *data = (SCDetectByteExtractData *)smd->
ctx;
96 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
97 SCLogDebug(
"relative, working with det_ctx->buffer_offset %"PRIu32
", "
98 "data->offset %"PRIu32
"", det_ctx->
buffer_offset, data->offset);
112 SCLogDebug(
"absolute, data->offset %"PRIu32
"", data->offset);
114 ptr = payload + data->offset;
119 if (ptr < payload || data->nbytes >
len) {
120 SCLogDebug(
"Data not within payload pkt=%p, ptr=%p, len=%"PRIu32
", nbytes=%d",
121 payload, ptr,
len, data->nbytes);
128 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_STRING) {
130 data->nbytes, (
const char *)ptr);
137 SCLogDebug(
"error extracting %d bytes of string data: %d",
138 data->nbytes, extbytes);
145 if (extbytes != data->nbytes) {
146 SCLogDebug(
"error extracting %d bytes of numeric data: %d",
147 data->nbytes, extbytes);
153 val *= data->multiplier_value;
154 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_ALIGN) {
155 if ((val % data->align_value) != 0) {
156 val += data->align_value - (val % data->align_value);
165 SCLogDebug(
"extracted value is %"PRIu64, val);
179 static inline SCDetectByteExtractData *DetectByteExtractParse(
182 SCDetectByteExtractData *bed = SCByteExtractParse(arg);
188 if (bed->flags & DETECT_BYTE_EXTRACT_FLAG_SLICE) {
189 SCLogError(
"byte_extract slice not yet supported; see issue #6831");
192 if (bed->flags & DETECT_BYTE_EXTRACT_FLAG_STRING) {
198 "more than %d bytes in \"string\" extraction",
207 "more than %d bytes in \"string\" extraction",
216 "more than %d bytes in \"string\" extraction",
226 "more than %d bytes in \"non-string\" extraction",
232 if (!(bed->flags & DETECT_BYTE_EXTRACT_FLAG_ENDIAN))
233 bed->endian = BigEndian;
239 DetectByteExtractFree(
de_ctx, bed);
259 SCDetectByteExtractData *data = NULL;
262 data = DetectByteExtractParse(
de_ctx, arg);
270 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
273 }
else if (data->endian == EndianDCE) {
274 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
278 if (prev_pm == NULL) {
292 }
else if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
297 if (prev_pm == NULL) {
309 if (data->endian == EndianDCE) {
313 if ((DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ==
314 (data->flags & (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING))) {
316 "A byte_jump keyword with dce holds other invalid modifiers.");
323 if (prev_bed_sm == NULL)
326 data->local_id = ((SCDetectByteExtractData *)prev_bed_sm->
ctx)->local_id + 1;
335 if (!(data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE))
353 DetectByteExtractFree(
de_ctx, data);
364 SCByteExtractFree(ptr);
381 const SCDetectByteExtractData *bed = (
const SCDetectByteExtractData *)sm->
ctx;
382 if (strcmp(bed->name, arg) == 0) {
394 const SCDetectByteExtractData *bed = (
const SCDetectByteExtractData *)sm->
ctx;
395 if (strcmp(bed->name, arg) == 0) {
410 static int g_file_data_buffer_id = 0;
411 static int g_http_uri_buffer_id = 0;
413 static int DetectByteExtractTest01(
void)
417 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one");
421 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 || bed->flags != 0 ||
422 bed->endian != BigEndian || bed->align_value != 0 ||
423 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
430 DetectByteExtractFree(NULL, bed);
434 static int DetectByteExtractTest02(
void)
438 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, relative");
442 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
443 bed->flags != DETECT_BYTE_EXTRACT_FLAG_RELATIVE || bed->endian != BigEndian ||
444 bed->align_value != 0 ||
445 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
452 DetectByteExtractFree(NULL, bed);
456 static int DetectByteExtractTest03(
void)
460 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, multiplier 10");
464 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
465 bed->flags != DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER || bed->endian != BigEndian ||
466 bed->align_value != 0 || bed->multiplier_value != 10) {
473 DetectByteExtractFree(NULL, bed);
477 static int DetectByteExtractTest04(
void)
481 SCDetectByteExtractData *bed =
482 DetectByteExtractParse(NULL,
"4, 2, one, relative, multiplier 10");
486 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
488 (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER) ||
489 bed->endian != BigEndian || bed->align_value != 0 || bed->multiplier_value != 10) {
496 DetectByteExtractFree(NULL, bed);
500 static int DetectByteExtractTest05(
void)
504 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, big");
508 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
509 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != BigEndian ||
510 bed->align_value != 0 ||
511 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
518 DetectByteExtractFree(NULL, bed);
522 static int DetectByteExtractTest06(
void)
526 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, little");
530 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
531 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != LittleEndian ||
532 bed->align_value != 0 ||
533 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
540 DetectByteExtractFree(NULL, bed);
544 static int DetectByteExtractTest07(
void)
548 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, dce");
552 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
553 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != EndianDCE ||
554 bed->align_value != 0 ||
555 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
562 DetectByteExtractFree(NULL, bed);
566 static int DetectByteExtractTest08(
void)
570 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, hex");
574 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
575 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
577 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
584 DetectByteExtractFree(NULL, bed);
588 static int DetectByteExtractTest09(
void)
592 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, oct");
596 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
597 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
599 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
606 DetectByteExtractFree(NULL, bed);
610 static int DetectByteExtractTest10(
void)
614 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, dec");
618 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
620 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
627 DetectByteExtractFree(NULL, bed);
631 static int DetectByteExtractTest11(
void)
635 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4");
639 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
640 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ALIGN || bed->endian != BigEndian ||
641 bed->align_value != 4 ||
642 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
649 DetectByteExtractFree(NULL, bed);
653 static int DetectByteExtractTest12(
void)
657 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative");
661 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
662 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
663 bed->endian != BigEndian || bed->align_value != 4 ||
664 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
671 DetectByteExtractFree(NULL, bed);
675 static int DetectByteExtractTest13(
void)
679 SCDetectByteExtractData *bed =
680 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, big");
684 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
685 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
686 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
687 bed->endian != BigEndian || bed->align_value != 4 ||
688 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
695 DetectByteExtractFree(NULL, bed);
699 static int DetectByteExtractTest14(
void)
703 SCDetectByteExtractData *bed =
704 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, dce");
708 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
709 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
710 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
711 bed->endian != EndianDCE || bed->align_value != 4 ||
712 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
719 DetectByteExtractFree(NULL, bed);
723 static int DetectByteExtractTest15(
void)
727 SCDetectByteExtractData *bed =
728 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, little");
732 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
733 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
734 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
735 bed->endian != LittleEndian || bed->align_value != 4 ||
736 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
743 DetectByteExtractFree(NULL, bed);
747 static int DetectByteExtractTest16(
void)
751 SCDetectByteExtractData *bed =
752 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, little, multiplier 2");
756 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
757 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_RELATIVE |
758 DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
759 DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER) ||
760 bed->endian != LittleEndian || bed->align_value != 4 || bed->multiplier_value != 2) {
767 DetectByteExtractFree(NULL, bed);
771 static int DetectByteExtractTest17(
void)
775 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
777 "multiplier 2, string hex");
784 DetectByteExtractFree(NULL, bed);
788 static int DetectByteExtractTest18(
void)
792 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
802 DetectByteExtractFree(NULL, bed);
806 static int DetectByteExtractTest19(
void)
810 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
820 DetectByteExtractFree(NULL, bed);
824 static int DetectByteExtractTest20(
void)
828 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
838 DetectByteExtractFree(NULL, bed);
842 static int DetectByteExtractTest21(
void)
846 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
856 DetectByteExtractFree(NULL, bed);
860 static int DetectByteExtractTest22(
void)
864 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
874 DetectByteExtractFree(NULL, bed);
878 static int DetectByteExtractTest23(
void)
882 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
892 DetectByteExtractFree(NULL, bed);
896 static int DetectByteExtractTest24(
void)
900 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"24, 2, one, align 4, "
909 DetectByteExtractFree(NULL, bed);
913 static int DetectByteExtractTest25(
void)
917 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"9, 2, one, align 4, "
926 DetectByteExtractFree(NULL, bed);
930 static int DetectByteExtractTest26(
void)
934 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
944 DetectByteExtractFree(NULL, bed);
948 static int DetectByteExtractTest27(
void)
952 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
962 DetectByteExtractFree(NULL, bed);
966 static int DetectByteExtractTest28(
void)
970 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"23, 2, one, string, oct");
977 DetectByteExtractFree(NULL, bed);
981 static int DetectByteExtractTest29(
void)
985 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"24, 2, one, string, oct");
992 DetectByteExtractFree(NULL, bed);
996 static int DetectByteExtractTest30(
void)
1000 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"20, 2, one, string, dec");
1007 DetectByteExtractFree(NULL, bed);
1011 static int DetectByteExtractTest31(
void)
1015 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"21, 2, one, string, dec");
1022 DetectByteExtractFree(NULL, bed);
1026 static int DetectByteExtractTest32(
void)
1030 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"14, 2, one, string, hex");
1037 DetectByteExtractFree(NULL, bed);
1041 static int DetectByteExtractTest33(
void)
1045 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"15, 2, one, string, hex");
1052 DetectByteExtractFree(NULL, bed);
1056 static int DetectByteExtractTest34(
void)
1063 SCDetectByteExtractData *bed = NULL;
1071 "(msg:\"Testing bytejump_body\"; "
1073 "byte_extract:4,2,two,relative,string,hex; "
1099 printf(
"one failed\n");
1109 bed = (SCDetectByteExtractData *)sm->
ctx;
1110 if (bed->nbytes != 4 || bed->offset != 2 || strncmp(bed->name,
"two", cd->
content_len) != 0 ||
1111 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1112 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1114 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1128 static int DetectByteExtractTest35(
void)
1136 SCDetectByteExtractData *bed = NULL;
1144 "(msg:\"Testing bytejump_body\"; "
1145 "content:\"one\"; pcre:/asf/; "
1146 "byte_extract:4,0,two,relative,string,hex; "
1172 printf(
"one failed\n");
1193 bed = (SCDetectByteExtractData *)sm->
ctx;
1194 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1195 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1196 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1198 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1212 static int DetectByteExtractTest36(
void)
1219 "content:\"one\"; byte_jump:1,13; "
1220 "byte_extract:4,0,two,relative,string,hex; "
1243 SCDetectByteExtractData *bed = (SCDetectByteExtractData *)sm->
ctx;
1246 FAIL_IF(strcmp(bed->name,
"two") != 0);
1247 FAIL_IF(bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1248 DETECT_BYTE_EXTRACT_FLAG_STRING));
1250 FAIL_IF(bed->align_value != 0);
1251 FAIL_IF(bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
1257 static int DetectByteExtractTest37(
void)
1265 SCDetectByteExtractData *bed = NULL;
1273 "(msg:\"Testing bytejump_body\"; "
1274 "content:\"one\"; uricontent:\"two\"; "
1275 "byte_extract:4,0,two,relative,string,hex; "
1301 printf(
"one failed\n");
1306 if (sm->
next != NULL) {
1325 printf(
"two failed\n");
1335 bed = (SCDetectByteExtractData *)sm->
ctx;
1336 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1337 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1338 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1340 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1354 static int DetectByteExtractTest38(
void)
1362 SCDetectByteExtractData *bed = NULL;
1370 "(msg:\"Testing bytejump_body\"; "
1371 "content:\"one\"; uricontent:\"two\"; "
1372 "byte_extract:4,0,two,string,hex; "
1398 printf(
"one failed\n");
1408 bed = (SCDetectByteExtractData *)sm->
ctx;
1409 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1410 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1412 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1430 printf(
"two failed\n");
1435 if (sm->
next != NULL) {
1450 static int DetectByteExtractTest39(
void)
1458 SCDetectByteExtractData *bed = NULL;
1466 "(msg:\"Testing bytejump_body\"; "
1467 "content:\"one\"; content:\"two\"; http_uri; "
1468 "byte_extract:4,0,two,relative,string,hex; "
1494 printf(
"one failed\n");
1499 if (sm->
next != NULL) {
1518 printf(
"two failed\n");
1528 bed = (SCDetectByteExtractData *)sm->
ctx;
1529 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1530 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1531 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1533 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1547 static int DetectByteExtractTest40(
void)
1555 SCDetectByteExtractData *bed = NULL;
1563 "(msg:\"Testing bytejump_body\"; "
1564 "content:\"one\"; content:\"two\"; http_uri; "
1565 "byte_extract:4,0,two,string,hex; "
1591 printf(
"one failed\n");
1601 bed = (SCDetectByteExtractData *)sm->
ctx;
1602 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1603 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1605 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1623 printf(
"two failed\n");
1628 if (sm->
next != NULL) {
1643 static int DetectByteExtractTest41(
void)
1650 SCDetectByteExtractData *bed = NULL;
1658 "(msg:\"Testing bytejump_body\"; "
1660 "byte_extract:4,0,two,string,hex; "
1661 "byte_extract:4,0,three,string,hex; "
1687 printf(
"one failed\n");
1697 bed = (SCDetectByteExtractData *)sm->
ctx;
1698 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1699 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1701 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1704 if (bed->local_id != 0) {
1714 bed = (SCDetectByteExtractData *)sm->
ctx;
1715 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"three") != 0 ||
1716 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1718 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1721 if (bed->local_id != 1) {
1736 static int DetectByteExtractTest42(
void)
1744 SCDetectByteExtractData *bed = NULL;
1752 "(msg:\"Testing bytejump_body\"; "
1754 "byte_extract:4,0,two,string,hex; "
1755 "uricontent: \"three\"; "
1756 "byte_extract:4,0,four,string,hex,relative; "
1757 "byte_extract:4,0,five,string,hex; "
1783 printf(
"one failed\n");
1793 bed = (SCDetectByteExtractData *)sm->
ctx;
1794 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1795 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1797 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1800 if (bed->local_id != 0) {
1810 bed = (SCDetectByteExtractData *)sm->
ctx;
1811 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"five") != 0 ||
1812 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1814 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1817 if (bed->local_id != 1) {
1822 if (sm->
next != NULL)
1839 printf(
"two failed\n");
1849 bed = (SCDetectByteExtractData *)sm->
ctx;
1850 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"four") != 0 ||
1851 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1852 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1854 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1857 if (bed->local_id != 0) {
1862 if (sm->
next != NULL)
1875 static int DetectByteExtractTest43(
void)
1882 SCDetectByteExtractData *bed = NULL;
1890 "(msg:\"Testing bytejump_body\"; "
1892 "byte_extract:4,0,two,string,hex; "
1893 "content: \"three\"; offset:two; "
1919 printf(
"one failed\n");
1929 bed = (SCDetectByteExtractData *)sm->
ctx;
1930 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1931 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1933 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1936 if (bed->local_id != 0) {
1949 cd->
offset != bed->local_id) {
1950 printf(
"three failed\n");
1955 if (sm->
next != NULL)
1968 static int DetectByteExtractTest44(
void)
1975 SCDetectByteExtractData *bed1 = NULL;
1976 SCDetectByteExtractData *bed2 = NULL;
1984 "(msg:\"Testing bytejump_body\"; "
1986 "byte_extract:4,0,two,string,hex; "
1987 "byte_extract:4,0,three,string,hex; "
1988 "content: \"four\"; offset:two; "
1989 "content: \"five\"; offset:three; "
2015 printf(
"one failed\n");
2025 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2026 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2027 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2029 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2032 if (bed1->local_id != 0) {
2042 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2052 cd->
offset != bed1->local_id) {
2053 printf(
"four failed\n");
2067 cd->
offset != bed2->local_id) {
2068 printf(
"five failed\n");
2073 if (sm->
next != NULL)
2086 static int DetectByteExtractTest45(
void)
2093 SCDetectByteExtractData *bed = NULL;
2101 "(msg:\"Testing bytejump_body\"; "
2103 "byte_extract:4,0,two,string,hex; "
2104 "content: \"three\"; depth:two; "
2130 printf(
"one failed\n");
2140 bed = (SCDetectByteExtractData *)sm->
ctx;
2141 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2142 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2144 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2147 if (bed->local_id != 0) {
2161 printf(
"three failed\n");
2166 if (sm->
next != NULL)
2179 static int DetectByteExtractTest46(
void)
2186 SCDetectByteExtractData *bed1 = NULL;
2187 SCDetectByteExtractData *bed2 = NULL;
2195 "(msg:\"Testing bytejump_body\"; "
2197 "byte_extract:4,0,two,string,hex; "
2198 "byte_extract:4,0,three,string,hex; "
2199 "content: \"four\"; depth:two; "
2200 "content: \"five\"; depth:three; "
2226 printf(
"one failed\n");
2236 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2237 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2238 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2240 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2243 if (bed1->local_id != 0) {
2253 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2263 cd->
depth != bed1->local_id) {
2264 printf(
"four failed\n");
2278 cd->
depth != bed2->local_id) {
2279 printf(
"five failed\n");
2284 if (sm->
next != NULL)
2297 static int DetectByteExtractTest47(
void)
2304 SCDetectByteExtractData *bed = NULL;
2312 "(msg:\"Testing bytejump_body\"; "
2314 "byte_extract:4,0,two,string,hex; "
2315 "content: \"three\"; distance:two; "
2341 printf(
"one failed\n");
2351 bed = (SCDetectByteExtractData *)sm->
ctx;
2352 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2353 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2355 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2358 if (bed->local_id != 0) {
2373 printf(
"three failed\n");
2378 if (sm->
next != NULL)
2391 static int DetectByteExtractTest48(
void)
2398 SCDetectByteExtractData *bed1 = NULL;
2399 SCDetectByteExtractData *bed2 = NULL;
2407 "(msg:\"Testing bytejump_body\"; "
2409 "byte_extract:4,0,two,string,hex; "
2410 "byte_extract:4,0,three,string,hex; "
2411 "content: \"four\"; distance:two; "
2412 "content: \"five\"; distance:three; "
2438 printf(
"one failed\n");
2448 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2449 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2450 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2452 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2455 if (bed1->local_id != 0) {
2465 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2477 printf(
"four failed\n");
2494 printf(
"five failed\n");
2499 if (sm->
next != NULL)
2512 static int DetectByteExtractTest49(
void)
2519 SCDetectByteExtractData *bed = NULL;
2527 "(msg:\"Testing bytejump_body\"; "
2529 "byte_extract:4,0,two,string,hex; "
2530 "content: \"three\"; within:two; "
2556 printf(
"one failed\n");
2566 bed = (SCDetectByteExtractData *)sm->
ctx;
2567 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2568 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2570 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2573 if (bed->local_id != 0) {
2587 printf(
"three failed\n");
2592 if (sm->
next != NULL)
2605 static int DetectByteExtractTest50(
void)
2612 SCDetectByteExtractData *bed1 = NULL;
2613 SCDetectByteExtractData *bed2 = NULL;
2621 "(msg:\"Testing bytejump_body\"; "
2623 "byte_extract:4,0,two,string,hex; "
2624 "byte_extract:4,0,three,string,hex; "
2625 "content: \"four\"; within:two; "
2626 "content: \"five\"; within:three; "
2652 printf(
"one failed\n");
2662 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2663 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2664 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2666 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2669 if (bed1->local_id != 0) {
2679 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2692 printf(
"four failed\n");
2706 cd->
within != bed2->local_id ||
2710 printf(
"five failed\n");
2715 if (sm->
next != NULL)
2728 static int DetectByteExtractTest51(
void)
2735 SCDetectByteExtractData *bed = NULL;
2744 "(msg:\"Testing bytejump_body\"; "
2746 "byte_extract:4,0,two,string,hex; "
2747 "byte_test: 2,=,10, two; "
2773 printf(
"one failed\n");
2783 bed = (SCDetectByteExtractData *)sm->
ctx;
2784 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2785 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2787 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2790 if (bed->local_id != 0) {
2804 printf(
"three failed\n");
2809 if (sm->
next != NULL)
2822 static int DetectByteExtractTest52(
void)
2829 SCDetectByteExtractData *bed1 = NULL;
2838 "(msg:\"Testing bytejump_body\"; "
2840 "byte_extract:4,0,two,string,hex; "
2841 "byte_extract:4,0,three,string,hex; "
2842 "byte_test: 2,=,two,three; "
2843 "byte_test: 3,=,10,three; "
2869 printf(
"one failed\n");
2879 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2880 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2881 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2883 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2886 if (bed1->local_id != 0) {
2907 printf(
"three failed\n");
2921 printf(
"four failed\n");
2926 if (sm->
next != NULL)
2939 static int DetectByteExtractTest53(
void)
2947 "byte_extract:4,0,two,string,hex; "
2948 "byte_jump: 2,two; "
2961 SCDetectByteExtractData *bed = (SCDetectByteExtractData *)sm->
ctx;
2965 FAIL_IF(strcmp(bed->name,
"two") != 0);
2966 FAIL_IF(bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING));
2968 FAIL_IF(bed->align_value != 0);
2969 FAIL_IF(bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
2985 static int DetectByteExtractTest54(
void)
2992 SCDetectByteExtractData *bed1 = NULL;
3001 "(msg:\"Testing bytejump_body\"; "
3003 "byte_extract:4,0,two,string,hex; "
3004 "byte_extract:4,0,three,string,hex; "
3005 "byte_jump: 2,two; "
3006 "byte_jump: 3,three; "
3032 printf(
"one failed\n");
3042 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3043 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3044 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3046 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3049 if (bed1->local_id != 0) {
3067 printf(
"three failed\n");
3081 if (sm->
next != NULL)
3094 static int DetectByteExtractTest55(
void)
3101 SCDetectByteExtractData *bed1 = NULL;
3102 SCDetectByteExtractData *bed2 = NULL;
3110 "(msg:\"Testing byte_extract\"; "
3112 "byte_extract:4,0,two,string,hex; "
3113 "byte_extract:4,0,three,string,hex; "
3114 "byte_extract:4,0,four,string,hex; "
3115 "byte_extract:4,0,five,string,hex; "
3116 "content: \"four\"; within:two; distance:three; "
3139 printf(
"one failed: ");
3147 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3148 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3149 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3151 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3154 if (bed1->local_id != 0) {
3162 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3183 cd->
within != bed1->local_id || cd->
distance != bed2->local_id) {
3184 printf(
"four failed: ");
3188 if (sm->
next != NULL) {
3202 static int DetectByteExtractTest56(
void)
3209 SCDetectByteExtractData *bed1 = NULL;
3210 SCDetectByteExtractData *bed2 = NULL;
3218 "(msg:\"Testing bytejump_body\"; "
3219 "uricontent:\"urione\"; "
3221 "byte_extract:4,0,two,string,hex; "
3222 "byte_extract:4,0,three,string,hex; "
3223 "byte_extract:4,0,four,string,hex; "
3224 "byte_extract:4,0,five,string,hex; "
3225 "content: \"four\"; within:two; distance:three; "
3251 printf(
"one failed\n");
3256 if (sm->
next != NULL)
3273 printf(
"one failed\n");
3283 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3284 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3285 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3287 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3290 if (bed1->local_id != 0) {
3300 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3325 cd->
within != bed1->local_id ||
3327 printf(
"four failed\n");
3332 if (sm->
next != NULL) {
3346 static int DetectByteExtractTest57(
void)
3353 SCDetectByteExtractData *bed1 = NULL;
3354 SCDetectByteExtractData *bed2 = NULL;
3355 SCDetectByteExtractData *bed3 = NULL;
3356 SCDetectByteExtractData *bed4 = NULL;
3364 "(msg:\"Testing bytejump_body\"; "
3366 "uricontent: \"urione\"; "
3367 "byte_extract:4,0,two,string,hex,relative; "
3368 "byte_extract:4,0,three,string,hex,relative; "
3369 "byte_extract:4,0,four,string,hex,relative; "
3370 "byte_extract:4,0,five,string,hex,relative; "
3371 "uricontent: \"four\"; within:two; distance:three; "
3397 printf(
"one failed\n");
3402 if (sm->
next != NULL)
3419 printf(
"one failed\n");
3429 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3430 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3431 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3432 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3434 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3437 if (bed1->local_id != 0) {
3447 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3448 if (bed2->local_id != 1) {
3458 bed3 = (SCDetectByteExtractData *)sm->
ctx;
3459 if (bed3->local_id != 2) {
3469 bed4 = (SCDetectByteExtractData *)sm->
ctx;
3470 if (bed4->local_id != 3) {
3486 cd->
within != bed1->local_id ||
3488 printf(
"four failed\n");
3493 if (sm->
next != NULL) {
3507 static int DetectByteExtractTest58(
void)
3514 SCDetectByteExtractData *bed1 = NULL;
3524 "(msg:\"Testing bytejump_body\"; "
3526 "byte_extract:4,0,two,string,hex; "
3527 "byte_extract:4,0,three,string,hex; "
3528 "byte_jump: 2,two; "
3529 "byte_jump: 3,three; "
3556 printf(
"one failed\n");
3566 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3567 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3568 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3570 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3573 if (bed1->local_id != 0) {
3591 printf(
"three failed\n");
3603 printf(
"four failed\n");
3616 printf(
"isdataat failed\n");
3621 if (sm->
next != NULL)
3634 static int DetectByteExtractTest59(
void)
3642 "byte_extract:4,0,two,string,hex; "
3643 "byte_extract:4,0,three,string,hex; "
3644 "byte_jump: 2,two; "
3645 "byte_jump: 3,three; "
3646 "isdataat: three,relative; "
3668 SCDetectByteExtractData *bed1 = (SCDetectByteExtractData *)sm->
ctx;
3671 FAIL_IF(strcmp(bed1->name,
"two") != 0);
3673 FAIL_IF(bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING));
3676 FAIL_IF(bed1->align_value != 0);
3677 FAIL_IF(bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
3714 static int DetectByteExtractTest60(
void)
3721 SCDetectByteExtractData *bed1 = NULL;
3730 "(msg:\"Testing bytejump_body\"; "
3732 "byte_extract:4,0,two,string,hex,relative; "
3733 "uricontent: \"three\"; "
3734 "byte_extract:4,0,four,string,hex,relative; "
3761 printf(
"one failed\n");
3771 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3772 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3773 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3774 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3776 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3779 if (bed1->local_id != 0) {
3791 isdd->
dataat != bed1->local_id) {
3792 printf(
"isdataat failed\n");
3797 if (sm->
next != NULL)
3812 printf(
"one failed\n");
3822 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3823 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"four") != 0 ||
3824 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3825 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3827 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3830 if (bed1->local_id != 0) {
3835 if (sm->
next != NULL)
3848 static int DetectByteExtractTest61(
void)
3855 SCDetectByteExtractData *bed1 = NULL;
3864 "(msg:\"Testing bytejump_body\"; "
3866 "byte_extract:4,0,two,string,hex,relative; "
3867 "uricontent: \"three\"; "
3868 "byte_extract:4,0,four,string,hex,relative; "
3869 "isdataat: four, relative; "
3895 printf(
"one failed\n");
3905 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3906 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3907 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3908 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3910 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3913 if (bed1->local_id != 0) {
3918 if (sm->
next != NULL)
3933 printf(
"one failed\n");
3943 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3944 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"four") != 0 ||
3945 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3946 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3948 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3951 if (bed1->local_id != 0) {
3964 isdd->
dataat != bed1->local_id) {
3965 printf(
"isdataat failed\n");
3970 if (sm->
next != NULL)
3983 static int DetectByteExtractTest62(
void)
3989 SCDetectByteExtractData *bed = NULL;
3997 "(file_data; byte_extract:4,2,two,relative,string,hex; "
4010 bed = (SCDetectByteExtractData *)sm->
ctx;
4011 if (bed->nbytes != 4 || bed->offset != 2 || strncmp(bed->name,
"two", 3) != 0 ||
4012 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
4013 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
4015 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4029 static int DetectByteExtractTest63(
void)
4033 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, -2, one");
4037 if (bed->nbytes != 4 || bed->offset != -2 || strcmp(bed->name,
"one") != 0 || bed->flags != 0 ||
4038 bed->endian != BigEndian || bed->align_value != 0 ||
4039 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4046 DetectByteExtractFree(NULL, bed);
4050 static int DetectByteExtractTestParseNoBase(
void)
4054 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string");
4058 if (bed->nbytes != 4) {
4061 if (bed->offset != 2) {
4064 if (strcmp(bed->name,
"one") != 0) {
4067 if (bed->flags != DETECT_BYTE_EXTRACT_FLAG_STRING) {
4073 if (bed->align_value != 0) {
4076 if (bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4083 DetectByteExtractFree(NULL, bed);
4087 static void DetectByteExtractRegisterTests(
void)
4092 UtRegisterTest(
"DetectByteExtractTest01", DetectByteExtractTest01);
4093 UtRegisterTest(
"DetectByteExtractTest02", DetectByteExtractTest02);
4094 UtRegisterTest(
"DetectByteExtractTest03", DetectByteExtractTest03);
4095 UtRegisterTest(
"DetectByteExtractTest04", DetectByteExtractTest04);
4096 UtRegisterTest(
"DetectByteExtractTest05", DetectByteExtractTest05);
4097 UtRegisterTest(
"DetectByteExtractTest06", DetectByteExtractTest06);
4098 UtRegisterTest(
"DetectByteExtractTest07", DetectByteExtractTest07);
4099 UtRegisterTest(
"DetectByteExtractTest08", DetectByteExtractTest08);
4100 UtRegisterTest(
"DetectByteExtractTest09", DetectByteExtractTest09);
4101 UtRegisterTest(
"DetectByteExtractTest10", DetectByteExtractTest10);
4102 UtRegisterTest(
"DetectByteExtractTest11", DetectByteExtractTest11);
4103 UtRegisterTest(
"DetectByteExtractTest12", DetectByteExtractTest12);
4104 UtRegisterTest(
"DetectByteExtractTest13", DetectByteExtractTest13);
4105 UtRegisterTest(
"DetectByteExtractTest14", DetectByteExtractTest14);
4106 UtRegisterTest(
"DetectByteExtractTest15", DetectByteExtractTest15);
4107 UtRegisterTest(
"DetectByteExtractTest16", DetectByteExtractTest16);
4108 UtRegisterTest(
"DetectByteExtractTest17", DetectByteExtractTest17);
4109 UtRegisterTest(
"DetectByteExtractTest18", DetectByteExtractTest18);
4110 UtRegisterTest(
"DetectByteExtractTest19", DetectByteExtractTest19);
4111 UtRegisterTest(
"DetectByteExtractTest20", DetectByteExtractTest20);
4112 UtRegisterTest(
"DetectByteExtractTest21", DetectByteExtractTest21);
4113 UtRegisterTest(
"DetectByteExtractTest22", DetectByteExtractTest22);
4114 UtRegisterTest(
"DetectByteExtractTest23", DetectByteExtractTest23);
4115 UtRegisterTest(
"DetectByteExtractTest24", DetectByteExtractTest24);
4116 UtRegisterTest(
"DetectByteExtractTest25", DetectByteExtractTest25);
4117 UtRegisterTest(
"DetectByteExtractTest26", DetectByteExtractTest26);
4118 UtRegisterTest(
"DetectByteExtractTest27", DetectByteExtractTest27);
4119 UtRegisterTest(
"DetectByteExtractTest28", DetectByteExtractTest28);
4120 UtRegisterTest(
"DetectByteExtractTest29", DetectByteExtractTest29);
4121 UtRegisterTest(
"DetectByteExtractTest30", DetectByteExtractTest30);
4122 UtRegisterTest(
"DetectByteExtractTest31", DetectByteExtractTest31);
4123 UtRegisterTest(
"DetectByteExtractTest32", DetectByteExtractTest32);
4124 UtRegisterTest(
"DetectByteExtractTest33", DetectByteExtractTest33);
4125 UtRegisterTest(
"DetectByteExtractTest34", DetectByteExtractTest34);
4126 UtRegisterTest(
"DetectByteExtractTest35", DetectByteExtractTest35);
4127 UtRegisterTest(
"DetectByteExtractTest36", DetectByteExtractTest36);
4128 UtRegisterTest(
"DetectByteExtractTest37", DetectByteExtractTest37);
4129 UtRegisterTest(
"DetectByteExtractTest38", DetectByteExtractTest38);
4130 UtRegisterTest(
"DetectByteExtractTest39", DetectByteExtractTest39);
4131 UtRegisterTest(
"DetectByteExtractTest40", DetectByteExtractTest40);
4132 UtRegisterTest(
"DetectByteExtractTest41", DetectByteExtractTest41);
4133 UtRegisterTest(
"DetectByteExtractTest42", DetectByteExtractTest42);
4135 UtRegisterTest(
"DetectByteExtractTest43", DetectByteExtractTest43);
4136 UtRegisterTest(
"DetectByteExtractTest44", DetectByteExtractTest44);
4138 UtRegisterTest(
"DetectByteExtractTest45", DetectByteExtractTest45);
4139 UtRegisterTest(
"DetectByteExtractTest46", DetectByteExtractTest46);
4141 UtRegisterTest(
"DetectByteExtractTest47", DetectByteExtractTest47);
4142 UtRegisterTest(
"DetectByteExtractTest48", DetectByteExtractTest48);
4144 UtRegisterTest(
"DetectByteExtractTest49", DetectByteExtractTest49);
4145 UtRegisterTest(
"DetectByteExtractTest50", DetectByteExtractTest50);
4147 UtRegisterTest(
"DetectByteExtractTest51", DetectByteExtractTest51);
4148 UtRegisterTest(
"DetectByteExtractTest52", DetectByteExtractTest52);
4150 UtRegisterTest(
"DetectByteExtractTest53", DetectByteExtractTest53);
4151 UtRegisterTest(
"DetectByteExtractTest54", DetectByteExtractTest54);
4153 UtRegisterTest(
"DetectByteExtractTest55", DetectByteExtractTest55);
4154 UtRegisterTest(
"DetectByteExtractTest56", DetectByteExtractTest56);
4155 UtRegisterTest(
"DetectByteExtractTest57", DetectByteExtractTest57);
4157 UtRegisterTest(
"DetectByteExtractTest58", DetectByteExtractTest58);
4158 UtRegisterTest(
"DetectByteExtractTest59", DetectByteExtractTest59);
4159 UtRegisterTest(
"DetectByteExtractTest60", DetectByteExtractTest60);
4160 UtRegisterTest(
"DetectByteExtractTest61", DetectByteExtractTest61);
4161 UtRegisterTest(
"DetectByteExtractTest62", DetectByteExtractTest62);
4162 UtRegisterTest(
"DetectByteExtractTest63", DetectByteExtractTest63);
4165 DetectByteExtractTestParseNoBase);