From 39724df664aa250f092add0e935de1b1befefd59 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 28 Aug 2009 18:19:36 +0200 Subject: [PATCH] 2nd try of fixing some bugs reported by static code analysis tool. --- src/decode-gre.c | 6 +++--- src/detect-flowbits.c | 38 +++++++++++++++++++++----------------- src/detect-flowvar.c | 34 +++++++++++++++++----------------- src/detect-pktvar.c | 33 +++++++++++++++++---------------- 4 files changed, 58 insertions(+), 53 deletions(-) diff --git a/src/decode-gre.c b/src/decode-gre.c index 328bf695bd..49a1e5fcea 100644 --- a/src/decode-gre.c +++ b/src/decode-gre.c @@ -78,8 +78,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u { gsre = (GRESreHdr *)(pkt + header_len); - - if(gsre == NULL) + if (gsre == NULL) return; while (1) @@ -96,7 +95,8 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u header_len += gsre->sre_length; gsre = (GRESreHdr *)(pkt + header_len); - + if (gsre == NULL) + return; } } break; diff --git a/src/detect-flowbits.c b/src/detect-flowbits.c index cc96394902..0b299c7afb 100644 --- a/src/detect-flowbits.c +++ b/src/detect-flowbits.c @@ -139,26 +139,26 @@ int DetectFlowbitSetup (DetectEngineCtx *de_ctx, Signature *s, SigMatch *m, char int ov[MAX_SUBSTRINGS]; ret = pcre_exec(parse_regex, parse_regex_study, rawstr, strlen(rawstr), 0, 0, ov, MAX_SUBSTRINGS); - if (ret > 1) { - const char *str_ptr; - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (ret != 2 && ret != 3) { + printf("ERROR: \"%s\" is not a valid setting for flowbits.\n", rawstr); + return -1; + } + + const char *str_ptr; + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (res < 0) { + printf("DetectPcreSetup: pcre_get_substring failed\n"); + return -1; + } + fb_cmd_str = (char *)str_ptr; + + if (ret == 3) { + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); if (res < 0) { printf("DetectPcreSetup: pcre_get_substring failed\n"); return -1; } - fb_cmd_str = (char *)str_ptr; - - if (ret > 2) { - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); - if (res < 0) { - printf("DetectPcreSetup: pcre_get_substring failed\n"); - return -1; - } - fb_name = (char *)str_ptr; - } - } else { - printf("ERROR: \"%s\" is not a valid setting for flowbits.\n", rawstr); - return -1; + fb_name = (char *)str_ptr; } if (strcmp(fb_cmd_str,"noalert") == 0) { @@ -189,7 +189,11 @@ int DetectFlowbitSetup (DetectEngineCtx *de_ctx, Signature *s, SigMatch *m, char goto error; } - cd->idx = VariableNameGetIdx(de_ctx,fb_name,DETECT_FLOWBITS); + if (fb_name != NULL) { + cd->idx = VariableNameGetIdx(de_ctx,fb_name,DETECT_FLOWBITS); + } else { + cd->idx = 0; + } cd->cmd = fb_cmd; //printf("DetectFlowbitSetup: idx %" PRIu32 ", cmd %s, name %s\n", cd->idx, fb_cmd_str, fb_name ? fb_name : "(null)"); diff --git a/src/detect-flowvar.c b/src/detect-flowvar.c index 6910a556d2..578a9dfc5b 100644 --- a/src/detect-flowvar.c +++ b/src/detect-flowvar.c @@ -91,29 +91,29 @@ int DetectFlowvarSetup (DetectEngineCtx *de_ctx, Signature *s, SigMatch *m, char int ov[MAX_SUBSTRINGS]; ret = pcre_exec(parse_regex, parse_regex_study, rawstr, strlen(rawstr), 0, 0, ov, MAX_SUBSTRINGS); - if (ret > 1) { - const char *str_ptr; - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (ret != 3) { + printf("ERROR: \"%s\" is not a valid setting for flowvar.\n", rawstr); + return -1; + } + + const char *str_ptr; + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (res < 0) { + printf("DetectPcreSetup: pcre_get_substring failed\n"); + return -1; + } + varname = (char *)str_ptr; + + if (ret > 2) { + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); if (res < 0) { printf("DetectPcreSetup: pcre_get_substring failed\n"); return -1; } - varname = (char *)str_ptr; - - if (ret > 2) { - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); - if (res < 0) { - printf("DetectPcreSetup: pcre_get_substring failed\n"); - return -1; - } - varcontent = (char *)str_ptr; - } - } else { - printf("ERROR: \"%s\" is not a valid setting for flowvar.\n", rawstr); - return -1; + varcontent = (char *)str_ptr; } - printf("DetectFlowvarSetup: varname %s, varcontent %s\n", varname, varcontent); + //printf("DetectFlowvarSetup: varname %s, varcontent %s\n", varname, varcontent); if (varcontent[0] == '\"' && varcontent[strlen(varcontent)-1] == '\"') { str = strdup(varcontent+1); diff --git a/src/detect-pktvar.c b/src/detect-pktvar.c index 8b91bbf7a6..120f6936e4 100644 --- a/src/detect-pktvar.c +++ b/src/detect-pktvar.c @@ -85,26 +85,27 @@ int DetectPktvarSetup (DetectEngineCtx *de_ctx, Signature *s, SigMatch *m, char int ov[MAX_SUBSTRINGS]; ret = pcre_exec(parse_regex, parse_regex_study, rawstr, strlen(rawstr), 0, 0, ov, MAX_SUBSTRINGS); - if (ret > 1) { - const char *str_ptr; - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (ret != 3) { + printf("ERROR: \"%s\" is not a valid setting for pktvar.\n", rawstr); + return -1; + + } + + const char *str_ptr; + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 1, &str_ptr); + if (res < 0) { + printf("DetectPcreSetup: pcre_get_substring failed\n"); + return -1; + } + varname = (char *)str_ptr; + + if (ret > 2) { + res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); if (res < 0) { printf("DetectPcreSetup: pcre_get_substring failed\n"); return -1; } - varname = (char *)str_ptr; - - if (ret > 2) { - res = pcre_get_substring((char *)rawstr, ov, MAX_SUBSTRINGS, 2, &str_ptr); - if (res < 0) { - printf("DetectPcreSetup: pcre_get_substring failed\n"); - return -1; - } - varcontent = (char *)str_ptr; - } - } else { - printf("ERROR: \"%s\" is not a valid setting for pktvar.\n", rawstr); - return -1; + varcontent = (char *)str_ptr; } printf("DetectPktvarSetup: varname %s, varcontent %s\n", varname, varcontent);