#include "detect-ipopts.h"
#include "util-unittest.h"
-#define PARSE_REGEX "\\S[A-z]"
-
-static DetectParseRegex parse_regex;
-
static int DetectIpOptsMatch (DetectEngineThreadCtx *, Packet *,
const Signature *, const SigMatchCtx *);
static int DetectIpOptsSetup (DetectEngineCtx *, Signature *, const char *);
#ifdef UNITTESTS
sigmatch_table[DETECT_IPOPTS].RegisterTests = IpOptsRegisterTests;
#endif
- DetectSetupParseRegexes(PARSE_REGEX, &parse_regex);
}
/**
*/
static DetectIpOptsData *DetectIpOptsParse (const char *rawstr)
{
+ if (rawstr == NULL || strlen(rawstr) == 0)
+ return NULL;
+
int i;
- DetectIpOptsData *de = NULL;
bool found = false;
-
- pcre2_match_data *match = NULL;
- int ret = DetectParsePcreExec(&parse_regex, &match, rawstr, 0, 0);
- if (ret < 1) {
- SCLogError("pcre_exec parse error, ret %" PRId32 ", string %s", ret, rawstr);
- goto error;
- }
-
for(i = 0; ipopts[i].ipopt_name != NULL; i++) {
if((strcasecmp(ipopts[i].ipopt_name,rawstr)) == 0) {
found = true;
if (!found) {
SCLogError("unknown IP option specified \"%s\"", rawstr);
- goto error;
+ return NULL;
}
- de = SCMalloc(sizeof(DetectIpOptsData));
+ DetectIpOptsData *de = SCMalloc(sizeof(DetectIpOptsData));
if (unlikely(de == NULL))
- goto error;
+ return NULL;
de->ipopt = ipopts[i].code;
- pcre2_match_data_free(match);
return de;
-
-error:
- if (match) {
- pcre2_match_data_free(match);
- }
- if (de) SCFree(de);
- return NULL;
}
/**
PASS;
}
+/**
+ * \test IpOptsTestParse05 tests the NULL and empty string
+ */
+static int IpOptsTestParse05(void)
+{
+ DetectIpOptsData *de = DetectIpOptsParse("");
+ FAIL_IF_NOT_NULL(de);
+
+ de = DetectIpOptsParse(NULL);
+ FAIL_IF_NOT_NULL(de);
+
+ PASS;
+}
+
/**
* \brief this function registers unit tests for IpOpts
*/
UtRegisterTest("IpOptsTestParse02", IpOptsTestParse02);
UtRegisterTest("IpOptsTestParse03", IpOptsTestParse03);
UtRegisterTest("IpOptsTestParse04", IpOptsTestParse04);
+ UtRegisterTest("IpOptsTestParse05", IpOptsTestParse05);
}
#endif /* UNITTESTS */