if (bed->flags & DETECT_BYTE_EXTRACT_FLAG_STRING) {
if (bed->base == DETECT_BYTE_EXTRACT_BASE_NONE) {
- SCLogError(SC_ERR_INVALID_SIGNATURE, "Base not specified for "
- "byte_extract, though string was specified. "
- "The right options are (string, hex), (string, oct) "
- "or (string, dec)");
- goto error;
+ /* Default to decimal if base not specified. */
+ bed->base = DETECT_BYTE_EXTRACT_BASE_DEC;
}
if (bed->endian != DETECT_BYTE_EXTRACT_ENDIAN_NONE) {
SCLogError(SC_ERR_INVALID_SIGNATURE, "byte_extract can't have "
return result;
}
+int DetectByteExtractTestParseNoBase(void)
+{
+ int result = 0;
+
+ DetectByteExtractData *bed = DetectByteExtractParse("4, 2, one, string");
+ if (bed == NULL)
+ goto end;
+
+ if (bed->nbytes != 4) {
+ goto end;
+ }
+ if (bed->offset != 2) {
+ goto end;
+ }
+ if (strcmp(bed->name, "one") != 0) {
+ goto end;
+ }
+ if (bed->flags != DETECT_BYTE_EXTRACT_FLAG_STRING) {
+ goto end;
+ }
+ if (bed->endian != DETECT_BYTE_EXTRACT_ENDIAN_NONE) {
+ goto end;
+ }
+ if (bed->base != DETECT_BYTE_EXTRACT_BASE_DEC) {
+ goto end;
+ }
+ if (bed->align_value != 0) {
+ goto end;
+ }
+ if (bed->multiplier_value != DETECT_BYTE_EXTRACT_MULTIPLIER_DEFAULT) {
+ goto end;
+ }
+
+ result = 1;
+ end:
+ if (bed != NULL)
+ DetectByteExtractFree(bed);
+ return result;
+}
+
#endif /* UNITTESTS */
void DetectByteExtractRegisterTests(void)
UtRegisterTest("DetectByteExtractTest61", DetectByteExtractTest61, 1);
UtRegisterTest("DetectByteExtractTest62", DetectByteExtractTest62, 1);
UtRegisterTest("DetectByteExtractTest63", DetectByteExtractTest63, 1);
+
+ UtRegisterTest("DetectByteExtractTestParseNoBase",
+ DetectByteExtractTestParseNoBase, 1);
#endif /* UNITTESTS */
return;