diff --git a/src/detect-reference.c b/src/detect-reference.c index ee515a38a8..55d33d2f6d 100644 --- a/src/detect-reference.c +++ b/src/detect-reference.c @@ -118,8 +118,8 @@ static DetectReference *DetectReferenceParse(char *rawstr, DetectEngineCtx *de_c #define MAX_SUBSTRINGS 30 int ret = 0, res = 0; int ov[MAX_SUBSTRINGS]; - const char *key = NULL; - const char *content = NULL; + char key[64] = ""; + char content[1024] = ""; ret = pcre_exec(parse_regex, parse_regex_study, rawstr, strlen(rawstr), 0, 0, ov, MAX_SUBSTRINGS); @@ -135,19 +135,19 @@ static DetectReference *DetectReferenceParse(char *rawstr, DetectEngineCtx *de_c } memset(ref, 0, sizeof(DetectReference)); - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &key); + res = pcre_copy_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, key, sizeof(key)); if (res < 0) { - SCLogError(SC_ERR_PCRE_GET_SUBSTRING, "pcre_get_substring failed"); + SCLogError(SC_ERR_PCRE_GET_SUBSTRING, "pcre_copy_substring failed"); goto error; } - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &content); + res = pcre_copy_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, content, sizeof(content)); if (res < 0) { SCLogError(SC_ERR_PCRE_GET_SUBSTRING, "pcre_get_substring failed"); goto error; } - if (key == NULL || content == NULL) + if (strlen(key) == 0 || strlen(content) == 0) goto error; SCRConfReference *lookup_ref_conf = SCRConfGetReference(key, de_ctx); @@ -168,15 +168,9 @@ static DetectReference *DetectReferenceParse(char *rawstr, DetectEngineCtx *de_c } /* free the substrings */ - pcre_free_substring(key); - pcre_free_substring(content); SCReturnPtr(ref, "Reference"); error: - if (key != NULL) - pcre_free_substring(key); - if (content != NULL) - pcre_free_substring(content); if (ref != NULL) DetectReferenceFree(ref);