47 #define DETECT_BYTE_EXTRACT_BASE_HEX BaseHex
48 #define DETECT_BYTE_EXTRACT_BASE_DEC BaseDec
49 #define DETECT_BYTE_EXTRACT_BASE_OCT BaseOct
53 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_OCT 23
54 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_DEC 20
55 #define STRING_MAX_BYTES_TO_EXTRACT_FOR_HEX 14
57 #define NO_STRING_MAX_BYTES_TO_EXTRACT 8
61 static void DetectByteExtractRegisterTests(
void);
94 SCDetectByteExtractData *data = (SCDetectByteExtractData *)smd->
ctx;
95 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
96 SCLogDebug(
"relative, working with det_ctx->buffer_offset %"PRIu32
", "
97 "data->offset %"PRIu32
"", det_ctx->
buffer_offset, data->offset);
111 SCLogDebug(
"absolute, data->offset %"PRIu32
"", data->offset);
113 ptr = payload + data->offset;
118 if (ptr < payload || data->nbytes >
len) {
119 SCLogDebug(
"Data not within payload pkt=%p, ptr=%p, len=%"PRIu32
", nbytes=%d",
120 payload, ptr,
len, data->nbytes);
127 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_STRING) {
129 data->nbytes, (
const char *)ptr);
136 SCLogDebug(
"error extracting %d bytes of string data: %d",
137 data->nbytes, extbytes);
144 if (extbytes != data->nbytes) {
145 SCLogDebug(
"error extracting %d bytes of numeric data: %d",
146 data->nbytes, extbytes);
152 val *= data->multiplier_value;
153 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_ALIGN) {
154 if ((val % data->align_value) != 0) {
155 val += data->align_value - (val % data->align_value);
164 SCLogDebug(
"extracted value is %"PRIu64, val);
178 static inline SCDetectByteExtractData *DetectByteExtractParse(
181 SCDetectByteExtractData *bed = SCByteExtractParse(arg);
187 if (bed->flags & DETECT_BYTE_EXTRACT_FLAG_SLICE) {
188 SCLogError(
"byte_extract slice not yet supported; see issue #6831");
191 if (bed->flags & DETECT_BYTE_EXTRACT_FLAG_STRING) {
197 "more than %d bytes in \"string\" extraction",
206 "more than %d bytes in \"string\" extraction",
215 "more than %d bytes in \"string\" extraction",
225 "more than %d bytes in \"non-string\" extraction",
231 if (!(bed->flags & DETECT_BYTE_EXTRACT_FLAG_ENDIAN))
232 bed->endian = BigEndian;
238 DetectByteExtractFree(
de_ctx, bed);
258 SCDetectByteExtractData *data = NULL;
261 data = DetectByteExtractParse(
de_ctx, arg);
269 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
272 }
else if (data->endian == EndianDCE) {
273 if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
276 if (prev_pm == NULL) {
290 }
else if (data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE) {
293 if (prev_pm == NULL) {
305 if (data->endian == EndianDCE) {
309 if ((DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ==
310 (data->flags & (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING))) {
312 "A byte_jump keyword with dce holds other invalid modifiers.");
319 if (prev_bed_sm == NULL)
322 data->local_id = ((SCDetectByteExtractData *)prev_bed_sm->
ctx)->local_id + 1;
331 if (!(data->flags & DETECT_BYTE_EXTRACT_FLAG_RELATIVE))
349 DetectByteExtractFree(
de_ctx, data);
360 SCByteExtractFree(ptr);
377 const SCDetectByteExtractData *bed = (
const SCDetectByteExtractData *)sm->
ctx;
378 if (strcmp(bed->name, arg) == 0) {
391 const SCDetectByteExtractData *bed = (
const SCDetectByteExtractData *)sm->
ctx;
392 if (strcmp(bed->name, arg) == 0) {
409 static int g_file_data_buffer_id = 0;
410 static int g_http_uri_buffer_id = 0;
412 static int DetectByteExtractTest01(
void)
416 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one");
420 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 || bed->flags != 0 ||
421 bed->endian != BigEndian || bed->align_value != 0 ||
422 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
429 DetectByteExtractFree(NULL, bed);
433 static int DetectByteExtractTest02(
void)
437 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, relative");
441 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
442 bed->flags != DETECT_BYTE_EXTRACT_FLAG_RELATIVE || bed->endian != BigEndian ||
443 bed->align_value != 0 ||
444 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
451 DetectByteExtractFree(NULL, bed);
455 static int DetectByteExtractTest03(
void)
459 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, multiplier 10");
463 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
464 bed->flags != DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER || bed->endian != BigEndian ||
465 bed->align_value != 0 || bed->multiplier_value != 10) {
472 DetectByteExtractFree(NULL, bed);
476 static int DetectByteExtractTest04(
void)
480 SCDetectByteExtractData *bed =
481 DetectByteExtractParse(NULL,
"4, 2, one, relative, multiplier 10");
485 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
487 (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER) ||
488 bed->endian != BigEndian || bed->align_value != 0 || bed->multiplier_value != 10) {
495 DetectByteExtractFree(NULL, bed);
499 static int DetectByteExtractTest05(
void)
503 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, big");
507 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
508 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != BigEndian ||
509 bed->align_value != 0 ||
510 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
517 DetectByteExtractFree(NULL, bed);
521 static int DetectByteExtractTest06(
void)
525 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, little");
529 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
530 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != LittleEndian ||
531 bed->align_value != 0 ||
532 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
539 DetectByteExtractFree(NULL, bed);
543 static int DetectByteExtractTest07(
void)
547 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, dce");
551 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
552 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ENDIAN || bed->endian != EndianDCE ||
553 bed->align_value != 0 ||
554 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
561 DetectByteExtractFree(NULL, bed);
565 static int DetectByteExtractTest08(
void)
569 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, hex");
573 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
574 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
576 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
583 DetectByteExtractFree(NULL, bed);
587 static int DetectByteExtractTest09(
void)
591 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, oct");
595 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
596 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
598 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
605 DetectByteExtractFree(NULL, bed);
609 static int DetectByteExtractTest10(
void)
613 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string, dec");
617 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
619 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
626 DetectByteExtractFree(NULL, bed);
630 static int DetectByteExtractTest11(
void)
634 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4");
638 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
639 bed->flags != DETECT_BYTE_EXTRACT_FLAG_ALIGN || bed->endian != BigEndian ||
640 bed->align_value != 4 ||
641 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
648 DetectByteExtractFree(NULL, bed);
652 static int DetectByteExtractTest12(
void)
656 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative");
660 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
661 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
662 bed->endian != BigEndian || bed->align_value != 4 ||
663 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
670 DetectByteExtractFree(NULL, bed);
674 static int DetectByteExtractTest13(
void)
678 SCDetectByteExtractData *bed =
679 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, big");
683 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
684 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
685 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
686 bed->endian != BigEndian || bed->align_value != 4 ||
687 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
694 DetectByteExtractFree(NULL, bed);
698 static int DetectByteExtractTest14(
void)
702 SCDetectByteExtractData *bed =
703 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, dce");
707 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
708 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
709 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
710 bed->endian != EndianDCE || bed->align_value != 4 ||
711 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
718 DetectByteExtractFree(NULL, bed);
722 static int DetectByteExtractTest15(
void)
726 SCDetectByteExtractData *bed =
727 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, little");
731 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
732 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
733 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
734 bed->endian != LittleEndian || bed->align_value != 4 ||
735 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
742 DetectByteExtractFree(NULL, bed);
746 static int DetectByteExtractTest16(
void)
750 SCDetectByteExtractData *bed =
751 DetectByteExtractParse(NULL,
"4, 2, one, align 4, relative, little, multiplier 2");
755 if (bed->nbytes != 4 || bed->offset != 2 || strcmp(bed->name,
"one") != 0 ||
756 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_ALIGN | DETECT_BYTE_EXTRACT_FLAG_RELATIVE |
757 DETECT_BYTE_EXTRACT_FLAG_ENDIAN |
758 DETECT_BYTE_EXTRACT_FLAG_MULTIPLIER) ||
759 bed->endian != LittleEndian || bed->align_value != 4 || bed->multiplier_value != 2) {
766 DetectByteExtractFree(NULL, bed);
770 static int DetectByteExtractTest17(
void)
774 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
776 "multiplier 2, string hex");
783 DetectByteExtractFree(NULL, bed);
787 static int DetectByteExtractTest18(
void)
791 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
801 DetectByteExtractFree(NULL, bed);
805 static int DetectByteExtractTest19(
void)
809 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
819 DetectByteExtractFree(NULL, bed);
823 static int DetectByteExtractTest20(
void)
827 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
837 DetectByteExtractFree(NULL, bed);
841 static int DetectByteExtractTest21(
void)
845 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
855 DetectByteExtractFree(NULL, bed);
859 static int DetectByteExtractTest22(
void)
863 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
873 DetectByteExtractFree(NULL, bed);
877 static int DetectByteExtractTest23(
void)
881 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
891 DetectByteExtractFree(NULL, bed);
895 static int DetectByteExtractTest24(
void)
899 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"24, 2, one, align 4, "
908 DetectByteExtractFree(NULL, bed);
912 static int DetectByteExtractTest25(
void)
916 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"9, 2, one, align 4, "
925 DetectByteExtractFree(NULL, bed);
929 static int DetectByteExtractTest26(
void)
933 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
943 DetectByteExtractFree(NULL, bed);
947 static int DetectByteExtractTest27(
void)
951 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, align 4, "
961 DetectByteExtractFree(NULL, bed);
965 static int DetectByteExtractTest28(
void)
969 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"23, 2, one, string, oct");
976 DetectByteExtractFree(NULL, bed);
980 static int DetectByteExtractTest29(
void)
984 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"24, 2, one, string, oct");
991 DetectByteExtractFree(NULL, bed);
995 static int DetectByteExtractTest30(
void)
999 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"20, 2, one, string, dec");
1006 DetectByteExtractFree(NULL, bed);
1010 static int DetectByteExtractTest31(
void)
1014 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"21, 2, one, string, dec");
1021 DetectByteExtractFree(NULL, bed);
1025 static int DetectByteExtractTest32(
void)
1029 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"14, 2, one, string, hex");
1036 DetectByteExtractFree(NULL, bed);
1040 static int DetectByteExtractTest33(
void)
1044 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"15, 2, one, string, hex");
1051 DetectByteExtractFree(NULL, bed);
1055 static int DetectByteExtractTest34(
void)
1062 SCDetectByteExtractData *bed = NULL;
1070 "(msg:\"Testing bytejump_body\"; "
1072 "byte_extract:4,2,two,relative,string,hex; "
1098 printf(
"one failed\n");
1108 bed = (SCDetectByteExtractData *)sm->
ctx;
1109 if (bed->nbytes != 4 || bed->offset != 2 || strncmp(bed->name,
"two", cd->
content_len) != 0 ||
1110 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1111 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1113 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1127 static int DetectByteExtractTest35(
void)
1135 SCDetectByteExtractData *bed = NULL;
1143 "(msg:\"Testing bytejump_body\"; "
1144 "content:\"one\"; pcre:/asf/; "
1145 "byte_extract:4,0,two,relative,string,hex; "
1171 printf(
"one failed\n");
1192 bed = (SCDetectByteExtractData *)sm->
ctx;
1193 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1194 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1195 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1197 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1211 static int DetectByteExtractTest36(
void)
1218 "content:\"one\"; byte_jump:1,13; "
1219 "byte_extract:4,0,two,relative,string,hex; "
1242 SCDetectByteExtractData *bed = (SCDetectByteExtractData *)sm->
ctx;
1245 FAIL_IF(strcmp(bed->name,
"two") != 0);
1246 FAIL_IF(bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1247 DETECT_BYTE_EXTRACT_FLAG_STRING));
1249 FAIL_IF(bed->align_value != 0);
1250 FAIL_IF(bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
1256 static int DetectByteExtractTest37(
void)
1264 SCDetectByteExtractData *bed = NULL;
1272 "(msg:\"Testing bytejump_body\"; "
1273 "content:\"one\"; uricontent:\"two\"; "
1274 "byte_extract:4,0,two,relative,string,hex; "
1300 printf(
"one failed\n");
1305 if (sm->
next != NULL) {
1324 printf(
"two failed\n");
1334 bed = (SCDetectByteExtractData *)sm->
ctx;
1335 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1336 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1337 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1339 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1353 static int DetectByteExtractTest38(
void)
1361 SCDetectByteExtractData *bed = NULL;
1369 "(msg:\"Testing bytejump_body\"; "
1370 "content:\"one\"; uricontent:\"two\"; "
1371 "byte_extract:4,0,two,string,hex; "
1397 printf(
"one failed\n");
1407 bed = (SCDetectByteExtractData *)sm->
ctx;
1408 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1409 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1411 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1429 printf(
"two failed\n");
1434 if (sm->
next != NULL) {
1449 static int DetectByteExtractTest39(
void)
1457 SCDetectByteExtractData *bed = NULL;
1465 "(msg:\"Testing bytejump_body\"; "
1466 "content:\"one\"; content:\"two\"; http_uri; "
1467 "byte_extract:4,0,two,relative,string,hex; "
1493 printf(
"one failed\n");
1498 if (sm->
next != NULL) {
1517 printf(
"two failed\n");
1527 bed = (SCDetectByteExtractData *)sm->
ctx;
1528 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1529 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1530 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1532 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1546 static int DetectByteExtractTest40(
void)
1554 SCDetectByteExtractData *bed = NULL;
1562 "(msg:\"Testing bytejump_body\"; "
1563 "content:\"one\"; content:\"two\"; http_uri; "
1564 "byte_extract:4,0,two,string,hex; "
1590 printf(
"one failed\n");
1600 bed = (SCDetectByteExtractData *)sm->
ctx;
1601 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1602 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1604 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1622 printf(
"two failed\n");
1627 if (sm->
next != NULL) {
1642 static int DetectByteExtractTest41(
void)
1649 SCDetectByteExtractData *bed = NULL;
1657 "(msg:\"Testing bytejump_body\"; "
1659 "byte_extract:4,0,two,string,hex; "
1660 "byte_extract:4,0,three,string,hex; "
1686 printf(
"one failed\n");
1696 bed = (SCDetectByteExtractData *)sm->
ctx;
1697 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1698 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1700 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1703 if (bed->local_id != 0) {
1713 bed = (SCDetectByteExtractData *)sm->
ctx;
1714 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"three") != 0 ||
1715 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1717 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1720 if (bed->local_id != 1) {
1735 static int DetectByteExtractTest42(
void)
1743 SCDetectByteExtractData *bed = NULL;
1751 "(msg:\"Testing bytejump_body\"; "
1753 "byte_extract:4,0,two,string,hex; "
1754 "uricontent: \"three\"; "
1755 "byte_extract:4,0,four,string,hex,relative; "
1756 "byte_extract:4,0,five,string,hex; "
1782 printf(
"one failed\n");
1792 bed = (SCDetectByteExtractData *)sm->
ctx;
1793 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1794 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1796 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1799 if (bed->local_id != 0) {
1809 bed = (SCDetectByteExtractData *)sm->
ctx;
1810 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"five") != 0 ||
1811 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
1813 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1816 if (bed->local_id != 1) {
1821 if (sm->
next != NULL)
1838 printf(
"two failed\n");
1848 bed = (SCDetectByteExtractData *)sm->
ctx;
1849 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"four") != 0 ||
1850 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_RELATIVE | DETECT_BYTE_EXTRACT_FLAG_BASE |
1851 DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1853 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1856 if (bed->local_id != 0) {
1861 if (sm->
next != NULL)
1874 static int DetectByteExtractTest43(
void)
1881 SCDetectByteExtractData *bed = NULL;
1889 "(msg:\"Testing bytejump_body\"; "
1891 "byte_extract:4,0,two,string,hex; "
1892 "content: \"three\"; offset:two; "
1918 printf(
"one failed\n");
1928 bed = (SCDetectByteExtractData *)sm->
ctx;
1929 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
1930 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING) ||
1932 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
1935 if (bed->local_id != 0) {
1948 cd->
offset != bed->local_id) {
1949 printf(
"three failed\n");
1954 if (sm->
next != NULL)
1967 static int DetectByteExtractTest44(
void)
1974 SCDetectByteExtractData *bed1 = NULL;
1975 SCDetectByteExtractData *bed2 = NULL;
1983 "(msg:\"Testing bytejump_body\"; "
1985 "byte_extract:4,0,two,string,hex; "
1986 "byte_extract:4,0,three,string,hex; "
1987 "content: \"four\"; offset:two; "
1988 "content: \"five\"; offset:three; "
2014 printf(
"one failed\n");
2024 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2025 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2026 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2028 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2031 if (bed1->local_id != 0) {
2041 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2051 cd->
offset != bed1->local_id) {
2052 printf(
"four failed\n");
2066 cd->
offset != bed2->local_id) {
2067 printf(
"five failed\n");
2072 if (sm->
next != NULL)
2085 static int DetectByteExtractTest45(
void)
2092 SCDetectByteExtractData *bed = NULL;
2100 "(msg:\"Testing bytejump_body\"; "
2102 "byte_extract:4,0,two,string,hex; "
2103 "content: \"three\"; depth:two; "
2129 printf(
"one failed\n");
2139 bed = (SCDetectByteExtractData *)sm->
ctx;
2140 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2141 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2143 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2146 if (bed->local_id != 0) {
2160 printf(
"three failed\n");
2165 if (sm->
next != NULL)
2178 static int DetectByteExtractTest46(
void)
2185 SCDetectByteExtractData *bed1 = NULL;
2186 SCDetectByteExtractData *bed2 = NULL;
2194 "(msg:\"Testing bytejump_body\"; "
2196 "byte_extract:4,0,two,string,hex; "
2197 "byte_extract:4,0,three,string,hex; "
2198 "content: \"four\"; depth:two; "
2199 "content: \"five\"; depth:three; "
2225 printf(
"one failed\n");
2235 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2236 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2237 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2239 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2242 if (bed1->local_id != 0) {
2252 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2262 cd->
depth != bed1->local_id) {
2263 printf(
"four failed\n");
2277 cd->
depth != bed2->local_id) {
2278 printf(
"five failed\n");
2283 if (sm->
next != NULL)
2296 static int DetectByteExtractTest47(
void)
2303 SCDetectByteExtractData *bed = NULL;
2311 "(msg:\"Testing bytejump_body\"; "
2313 "byte_extract:4,0,two,string,hex; "
2314 "content: \"three\"; distance:two; "
2340 printf(
"one failed\n");
2350 bed = (SCDetectByteExtractData *)sm->
ctx;
2351 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2352 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2354 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2357 if (bed->local_id != 0) {
2372 printf(
"three failed\n");
2377 if (sm->
next != NULL)
2390 static int DetectByteExtractTest48(
void)
2397 SCDetectByteExtractData *bed1 = NULL;
2398 SCDetectByteExtractData *bed2 = NULL;
2406 "(msg:\"Testing bytejump_body\"; "
2408 "byte_extract:4,0,two,string,hex; "
2409 "byte_extract:4,0,three,string,hex; "
2410 "content: \"four\"; distance:two; "
2411 "content: \"five\"; distance:three; "
2437 printf(
"one failed\n");
2447 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2448 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2449 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2451 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2454 if (bed1->local_id != 0) {
2464 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2476 printf(
"four failed\n");
2493 printf(
"five failed\n");
2498 if (sm->
next != NULL)
2511 static int DetectByteExtractTest49(
void)
2518 SCDetectByteExtractData *bed = NULL;
2526 "(msg:\"Testing bytejump_body\"; "
2528 "byte_extract:4,0,two,string,hex; "
2529 "content: \"three\"; within:two; "
2555 printf(
"one failed\n");
2565 bed = (SCDetectByteExtractData *)sm->
ctx;
2566 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2567 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2569 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2572 if (bed->local_id != 0) {
2586 printf(
"three failed\n");
2591 if (sm->
next != NULL)
2604 static int DetectByteExtractTest50(
void)
2611 SCDetectByteExtractData *bed1 = NULL;
2612 SCDetectByteExtractData *bed2 = NULL;
2620 "(msg:\"Testing bytejump_body\"; "
2622 "byte_extract:4,0,two,string,hex; "
2623 "byte_extract:4,0,three,string,hex; "
2624 "content: \"four\"; within:two; "
2625 "content: \"five\"; within:three; "
2651 printf(
"one failed\n");
2661 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2662 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2663 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2665 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2668 if (bed1->local_id != 0) {
2678 bed2 = (SCDetectByteExtractData *)sm->
ctx;
2691 printf(
"four failed\n");
2705 cd->
within != bed2->local_id ||
2709 printf(
"five failed\n");
2714 if (sm->
next != NULL)
2727 static int DetectByteExtractTest51(
void)
2734 SCDetectByteExtractData *bed = NULL;
2743 "(msg:\"Testing bytejump_body\"; "
2745 "byte_extract:4,0,two,string,hex; "
2746 "byte_test: 2,=,10, two; "
2772 printf(
"one failed\n");
2782 bed = (SCDetectByteExtractData *)sm->
ctx;
2783 if (bed->nbytes != 4 || bed->offset != 0 || strcmp(bed->name,
"two") != 0 ||
2784 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2786 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2789 if (bed->local_id != 0) {
2803 printf(
"three failed\n");
2808 if (sm->
next != NULL)
2821 static int DetectByteExtractTest52(
void)
2828 SCDetectByteExtractData *bed1 = NULL;
2837 "(msg:\"Testing bytejump_body\"; "
2839 "byte_extract:4,0,two,string,hex; "
2840 "byte_extract:4,0,three,string,hex; "
2841 "byte_test: 2,=,two,three; "
2842 "byte_test: 3,=,10,three; "
2868 printf(
"one failed\n");
2878 bed1 = (SCDetectByteExtractData *)sm->
ctx;
2879 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
2880 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
2882 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
2885 if (bed1->local_id != 0) {
2906 printf(
"three failed\n");
2920 printf(
"four failed\n");
2925 if (sm->
next != NULL)
2938 static int DetectByteExtractTest53(
void)
2946 "byte_extract:4,0,two,string,hex; "
2947 "byte_jump: 2,two; "
2960 SCDetectByteExtractData *bed = (SCDetectByteExtractData *)sm->
ctx;
2964 FAIL_IF(strcmp(bed->name,
"two") != 0);
2965 FAIL_IF(bed->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING));
2967 FAIL_IF(bed->align_value != 0);
2968 FAIL_IF(bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
2984 static int DetectByteExtractTest54(
void)
2991 SCDetectByteExtractData *bed1 = NULL;
3000 "(msg:\"Testing bytejump_body\"; "
3002 "byte_extract:4,0,two,string,hex; "
3003 "byte_extract:4,0,three,string,hex; "
3004 "byte_jump: 2,two; "
3005 "byte_jump: 3,three; "
3031 printf(
"one failed\n");
3041 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3042 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3043 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3045 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3048 if (bed1->local_id != 0) {
3066 printf(
"three failed\n");
3080 if (sm->
next != NULL)
3093 static int DetectByteExtractTest55(
void)
3100 SCDetectByteExtractData *bed1 = NULL;
3101 SCDetectByteExtractData *bed2 = NULL;
3109 "(msg:\"Testing byte_extract\"; "
3111 "byte_extract:4,0,two,string,hex; "
3112 "byte_extract:4,0,three,string,hex; "
3113 "byte_extract:4,0,four,string,hex; "
3114 "byte_extract:4,0,five,string,hex; "
3115 "content: \"four\"; within:two; distance:three; "
3138 printf(
"one failed: ");
3146 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3147 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3148 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3150 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3153 if (bed1->local_id != 0) {
3161 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3182 cd->
within != bed1->local_id || cd->
distance != bed2->local_id) {
3183 printf(
"four failed: ");
3187 if (sm->
next != NULL) {
3201 static int DetectByteExtractTest56(
void)
3208 SCDetectByteExtractData *bed1 = NULL;
3209 SCDetectByteExtractData *bed2 = NULL;
3217 "(msg:\"Testing bytejump_body\"; "
3218 "uricontent:\"urione\"; "
3220 "byte_extract:4,0,two,string,hex; "
3221 "byte_extract:4,0,three,string,hex; "
3222 "byte_extract:4,0,four,string,hex; "
3223 "byte_extract:4,0,five,string,hex; "
3224 "content: \"four\"; within:two; distance:three; "
3250 printf(
"one failed\n");
3255 if (sm->
next != NULL)
3272 printf(
"one failed\n");
3282 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3283 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3284 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3286 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3289 if (bed1->local_id != 0) {
3299 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3324 cd->
within != bed1->local_id ||
3326 printf(
"four failed\n");
3331 if (sm->
next != NULL) {
3345 static int DetectByteExtractTest57(
void)
3352 SCDetectByteExtractData *bed1 = NULL;
3353 SCDetectByteExtractData *bed2 = NULL;
3354 SCDetectByteExtractData *bed3 = NULL;
3355 SCDetectByteExtractData *bed4 = NULL;
3363 "(msg:\"Testing bytejump_body\"; "
3365 "uricontent: \"urione\"; "
3366 "byte_extract:4,0,two,string,hex,relative; "
3367 "byte_extract:4,0,three,string,hex,relative; "
3368 "byte_extract:4,0,four,string,hex,relative; "
3369 "byte_extract:4,0,five,string,hex,relative; "
3370 "uricontent: \"four\"; within:two; distance:three; "
3396 printf(
"one failed\n");
3401 if (sm->
next != NULL)
3418 printf(
"one failed\n");
3428 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3429 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3430 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3431 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3433 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3436 if (bed1->local_id != 0) {
3446 bed2 = (SCDetectByteExtractData *)sm->
ctx;
3447 if (bed2->local_id != 1) {
3457 bed3 = (SCDetectByteExtractData *)sm->
ctx;
3458 if (bed3->local_id != 2) {
3468 bed4 = (SCDetectByteExtractData *)sm->
ctx;
3469 if (bed4->local_id != 3) {
3485 cd->
within != bed1->local_id ||
3487 printf(
"four failed\n");
3492 if (sm->
next != NULL) {
3506 static int DetectByteExtractTest58(
void)
3513 SCDetectByteExtractData *bed1 = NULL;
3523 "(msg:\"Testing bytejump_body\"; "
3525 "byte_extract:4,0,two,string,hex; "
3526 "byte_extract:4,0,three,string,hex; "
3527 "byte_jump: 2,two; "
3528 "byte_jump: 3,three; "
3555 printf(
"one failed\n");
3565 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3566 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3567 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE) ||
3569 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3572 if (bed1->local_id != 0) {
3590 printf(
"three failed\n");
3602 printf(
"four failed\n");
3615 printf(
"isdataat failed\n");
3620 if (sm->
next != NULL)
3633 static int DetectByteExtractTest59(
void)
3641 "byte_extract:4,0,two,string,hex; "
3642 "byte_extract:4,0,three,string,hex; "
3643 "byte_jump: 2,two; "
3644 "byte_jump: 3,three; "
3645 "isdataat: three,relative; "
3667 SCDetectByteExtractData *bed1 = (SCDetectByteExtractData *)sm->
ctx;
3670 FAIL_IF(strcmp(bed1->name,
"two") != 0);
3672 FAIL_IF(bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_BASE | DETECT_BYTE_EXTRACT_FLAG_STRING));
3675 FAIL_IF(bed1->align_value != 0);
3676 FAIL_IF(bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT);
3713 static int DetectByteExtractTest60(
void)
3720 SCDetectByteExtractData *bed1 = NULL;
3729 "(msg:\"Testing bytejump_body\"; "
3731 "byte_extract:4,0,two,string,hex,relative; "
3732 "uricontent: \"three\"; "
3733 "byte_extract:4,0,four,string,hex,relative; "
3760 printf(
"one failed\n");
3770 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3771 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3772 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3773 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3775 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3778 if (bed1->local_id != 0) {
3790 isdd->
dataat != bed1->local_id) {
3791 printf(
"isdataat failed\n");
3796 if (sm->
next != NULL)
3811 printf(
"one failed\n");
3821 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3822 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"four") != 0 ||
3823 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3824 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3826 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3829 if (bed1->local_id != 0) {
3834 if (sm->
next != NULL)
3847 static int DetectByteExtractTest61(
void)
3854 SCDetectByteExtractData *bed1 = NULL;
3863 "(msg:\"Testing bytejump_body\"; "
3865 "byte_extract:4,0,two,string,hex,relative; "
3866 "uricontent: \"three\"; "
3867 "byte_extract:4,0,four,string,hex,relative; "
3868 "isdataat: four, relative; "
3894 printf(
"one failed\n");
3904 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3905 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"two") != 0 ||
3906 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3907 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3909 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3912 if (bed1->local_id != 0) {
3917 if (sm->
next != NULL)
3932 printf(
"one failed\n");
3942 bed1 = (SCDetectByteExtractData *)sm->
ctx;
3943 if (bed1->nbytes != 4 || bed1->offset != 0 || strcmp(bed1->name,
"four") != 0 ||
3944 bed1->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
3945 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
3947 bed1->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
3950 if (bed1->local_id != 0) {
3963 isdd->
dataat != bed1->local_id) {
3964 printf(
"isdataat failed\n");
3969 if (sm->
next != NULL)
3982 static int DetectByteExtractTest62(
void)
3988 SCDetectByteExtractData *bed = NULL;
3996 "(file_data; byte_extract:4,2,two,relative,string,hex; "
4009 bed = (SCDetectByteExtractData *)sm->
ctx;
4010 if (bed->nbytes != 4 || bed->offset != 2 || strncmp(bed->name,
"two", 3) != 0 ||
4011 bed->flags != (DETECT_BYTE_EXTRACT_FLAG_STRING | DETECT_BYTE_EXTRACT_FLAG_BASE |
4012 DETECT_BYTE_EXTRACT_FLAG_RELATIVE) ||
4014 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4028 static int DetectByteExtractTest63(
void)
4032 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, -2, one");
4036 if (bed->nbytes != 4 || bed->offset != -2 || strcmp(bed->name,
"one") != 0 || bed->flags != 0 ||
4037 bed->endian != BigEndian || bed->align_value != 0 ||
4038 bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4045 DetectByteExtractFree(NULL, bed);
4049 static int DetectByteExtractTestParseNoBase(
void)
4053 SCDetectByteExtractData *bed = DetectByteExtractParse(NULL,
"4, 2, one, string");
4057 if (bed->nbytes != 4) {
4060 if (bed->offset != 2) {
4063 if (strcmp(bed->name,
"one") != 0) {
4066 if (bed->flags != DETECT_BYTE_EXTRACT_FLAG_STRING) {
4072 if (bed->align_value != 0) {
4075 if (bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
4082 DetectByteExtractFree(NULL, bed);
4086 static void DetectByteExtractRegisterTests(
void)
4091 UtRegisterTest(
"DetectByteExtractTest01", DetectByteExtractTest01);
4092 UtRegisterTest(
"DetectByteExtractTest02", DetectByteExtractTest02);
4093 UtRegisterTest(
"DetectByteExtractTest03", DetectByteExtractTest03);
4094 UtRegisterTest(
"DetectByteExtractTest04", DetectByteExtractTest04);
4095 UtRegisterTest(
"DetectByteExtractTest05", DetectByteExtractTest05);
4096 UtRegisterTest(
"DetectByteExtractTest06", DetectByteExtractTest06);
4097 UtRegisterTest(
"DetectByteExtractTest07", DetectByteExtractTest07);
4098 UtRegisterTest(
"DetectByteExtractTest08", DetectByteExtractTest08);
4099 UtRegisterTest(
"DetectByteExtractTest09", DetectByteExtractTest09);
4100 UtRegisterTest(
"DetectByteExtractTest10", DetectByteExtractTest10);
4101 UtRegisterTest(
"DetectByteExtractTest11", DetectByteExtractTest11);
4102 UtRegisterTest(
"DetectByteExtractTest12", DetectByteExtractTest12);
4103 UtRegisterTest(
"DetectByteExtractTest13", DetectByteExtractTest13);
4104 UtRegisterTest(
"DetectByteExtractTest14", DetectByteExtractTest14);
4105 UtRegisterTest(
"DetectByteExtractTest15", DetectByteExtractTest15);
4106 UtRegisterTest(
"DetectByteExtractTest16", DetectByteExtractTest16);
4107 UtRegisterTest(
"DetectByteExtractTest17", DetectByteExtractTest17);
4108 UtRegisterTest(
"DetectByteExtractTest18", DetectByteExtractTest18);
4109 UtRegisterTest(
"DetectByteExtractTest19", DetectByteExtractTest19);
4110 UtRegisterTest(
"DetectByteExtractTest20", DetectByteExtractTest20);
4111 UtRegisterTest(
"DetectByteExtractTest21", DetectByteExtractTest21);
4112 UtRegisterTest(
"DetectByteExtractTest22", DetectByteExtractTest22);
4113 UtRegisterTest(
"DetectByteExtractTest23", DetectByteExtractTest23);
4114 UtRegisterTest(
"DetectByteExtractTest24", DetectByteExtractTest24);
4115 UtRegisterTest(
"DetectByteExtractTest25", DetectByteExtractTest25);
4116 UtRegisterTest(
"DetectByteExtractTest26", DetectByteExtractTest26);
4117 UtRegisterTest(
"DetectByteExtractTest27", DetectByteExtractTest27);
4118 UtRegisterTest(
"DetectByteExtractTest28", DetectByteExtractTest28);
4119 UtRegisterTest(
"DetectByteExtractTest29", DetectByteExtractTest29);
4120 UtRegisterTest(
"DetectByteExtractTest30", DetectByteExtractTest30);
4121 UtRegisterTest(
"DetectByteExtractTest31", DetectByteExtractTest31);
4122 UtRegisterTest(
"DetectByteExtractTest32", DetectByteExtractTest32);
4123 UtRegisterTest(
"DetectByteExtractTest33", DetectByteExtractTest33);
4124 UtRegisterTest(
"DetectByteExtractTest34", DetectByteExtractTest34);
4125 UtRegisterTest(
"DetectByteExtractTest35", DetectByteExtractTest35);
4126 UtRegisterTest(
"DetectByteExtractTest36", DetectByteExtractTest36);
4127 UtRegisterTest(
"DetectByteExtractTest37", DetectByteExtractTest37);
4128 UtRegisterTest(
"DetectByteExtractTest38", DetectByteExtractTest38);
4129 UtRegisterTest(
"DetectByteExtractTest39", DetectByteExtractTest39);
4130 UtRegisterTest(
"DetectByteExtractTest40", DetectByteExtractTest40);
4131 UtRegisterTest(
"DetectByteExtractTest41", DetectByteExtractTest41);
4132 UtRegisterTest(
"DetectByteExtractTest42", DetectByteExtractTest42);
4134 UtRegisterTest(
"DetectByteExtractTest43", DetectByteExtractTest43);
4135 UtRegisterTest(
"DetectByteExtractTest44", DetectByteExtractTest44);
4137 UtRegisterTest(
"DetectByteExtractTest45", DetectByteExtractTest45);
4138 UtRegisterTest(
"DetectByteExtractTest46", DetectByteExtractTest46);
4140 UtRegisterTest(
"DetectByteExtractTest47", DetectByteExtractTest47);
4141 UtRegisterTest(
"DetectByteExtractTest48", DetectByteExtractTest48);
4143 UtRegisterTest(
"DetectByteExtractTest49", DetectByteExtractTest49);
4144 UtRegisterTest(
"DetectByteExtractTest50", DetectByteExtractTest50);
4146 UtRegisterTest(
"DetectByteExtractTest51", DetectByteExtractTest51);
4147 UtRegisterTest(
"DetectByteExtractTest52", DetectByteExtractTest52);
4149 UtRegisterTest(
"DetectByteExtractTest53", DetectByteExtractTest53);
4150 UtRegisterTest(
"DetectByteExtractTest54", DetectByteExtractTest54);
4152 UtRegisterTest(
"DetectByteExtractTest55", DetectByteExtractTest55);
4153 UtRegisterTest(
"DetectByteExtractTest56", DetectByteExtractTest56);
4154 UtRegisterTest(
"DetectByteExtractTest57", DetectByteExtractTest57);
4156 UtRegisterTest(
"DetectByteExtractTest58", DetectByteExtractTest58);
4157 UtRegisterTest(
"DetectByteExtractTest59", DetectByteExtractTest59);
4158 UtRegisterTest(
"DetectByteExtractTest60", DetectByteExtractTest60);
4159 UtRegisterTest(
"DetectByteExtractTest61", DetectByteExtractTest61);
4160 UtRegisterTest(
"DetectByteExtractTest62", DetectByteExtractTest62);
4161 UtRegisterTest(
"DetectByteExtractTest63", DetectByteExtractTest63);
4164 DetectByteExtractTestParseNoBase);