From e19f6ebaf40c0222e52994e6f92dadc7f2e48436 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 25 Mar 2011 17:09:26 +0100 Subject: [PATCH] Various fixes for issues reported by clang. --- src/counters.c | 14 ++++++++--- src/detect-bytejump.c | 4 ++-- src/detect-detection-filter.c | 22 +++++++++++++----- src/detect-engine-sigorder.c | 44 +++++++++++++++++++++++++---------- src/detect-engine-state.c | 2 -- src/detect-engine-tag.c | 9 +++---- src/detect-flowvar.c | 3 +++ src/detect-fragbits.c | 13 +++++++---- src/detect-pktvar.c | 3 +++ src/detect-tag.c | 7 ++++++ src/detect-threshold.c | 12 ++++++++-- src/tmqh-flow.c | 6 ++++- src/util-decode-asn1.c | 2 +- src/util-radix-tree.c | 9 ++----- 14 files changed, 105 insertions(+), 45 deletions(-) diff --git a/src/counters.c b/src/counters.c index 1ca5ab1785..173d547d29 100644 --- a/src/counters.c +++ b/src/counters.c @@ -1108,12 +1108,14 @@ static int SCPerfOutputCounterFileIface() break; } - pc_heads[u] = pc_heads[u]->next; + if (pc_heads[u] != NULL) + pc_heads[u] = pc_heads[u]->next; if (pc_heads[u] == NULL || (pc_heads[0] != NULL && - strcmp(pctmi->tm_name, pc_heads[0]->name->tm_name))) + strcmp(pctmi->tm_name, pc_heads[0]->name->tm_name))) { flag = 0; + } } if (pc->disp == 0 || pc->value == NULL) @@ -1839,6 +1841,10 @@ static int SCPerfTestGetCntArray05() id = SCPerfRegisterCounter("t1", "c1", SC_PERF_TYPE_UINT64, NULL, &tv.sc_perf_pctx); + if (id != 1) { + printf("id %d: ", id); + return 0; + } tv.sc_perf_pca = SCPerfGetAllCountersArray(NULL); @@ -1855,6 +1861,8 @@ static int SCPerfTestGetCntArray06() id = SCPerfRegisterCounter("t1", "c1", SC_PERF_TYPE_UINT64, NULL, &tv.sc_perf_pctx); + if (id != 1) + return 0; tv.sc_perf_pca = SCPerfGetAllCountersArray(&tv.sc_perf_pctx); @@ -1874,7 +1882,7 @@ static int SCPerfTestCntArraySize07() memset(&tv, 0, sizeof(ThreadVars)); - pca = (SCPerfCounterArray *)&tv.sc_perf_pca; + //pca = (SCPerfCounterArray *)&tv.sc_perf_pca; SCPerfRegisterCounter("t1", "c1", SC_PERF_TYPE_UINT64, NULL, &tv.sc_perf_pctx); diff --git a/src/detect-bytejump.c b/src/detect-bytejump.c index 2019cdb384..8b3d2b322d 100644 --- a/src/detect-bytejump.c +++ b/src/detect-bytejump.c @@ -353,10 +353,10 @@ DetectBytejumpData *DetectBytejumpParse(char *optstr) * supports 9 substrings, sigh. */ res = pcre_get_substring((char *)optstr, ov, - MAX_SUBSTRINGS, i + 1, (const char **)&str_ptr); + MAX_SUBSTRINGS, 1, (const char **)&str_ptr); if (res < 0) { SCLogError(SC_ERR_PCRE_GET_SUBSTRING,"pcre_get_substring failed " - "for arg %d", i + 1); + "for arg 1"); goto error; } diff --git a/src/detect-detection-filter.c b/src/detect-detection-filter.c index 0935176fba..66aee5f1f0 100644 --- a/src/detect-detection-filter.c +++ b/src/detect-detection-filter.c @@ -116,6 +116,9 @@ DetectThresholdData *DetectDetectionFilterParse (char *rawstr) { int i = 0; copy_str = SCStrdup(rawstr); + if (copy_str == NULL) { + goto error; + } for(pos = 0, df_opt = strtok(copy_str,","); pos < strlen(copy_str) && df_opt != NULL; pos++, df_opt = strtok(NULL,",")) { @@ -127,8 +130,10 @@ DetectThresholdData *DetectDetectionFilterParse (char *rawstr) { track_found++; } - if(copy_str) + if (copy_str) { SCFree(copy_str); + copy_str = NULL; + } if(count_found != 1 || seconds_found != 1 || track_found != 1) goto error; @@ -185,16 +190,21 @@ DetectThresholdData *DetectDetectionFilterParse (char *rawstr) { goto error; } - for (i = 0; i < (ret - 1); i++){ - if (args[i] != NULL) SCFree(args[i]); + for (i = 0; i < 6; i++){ + if (args[i] != NULL) + SCFree(args[i]); } return df; error: - for (i = 0; i < (ret - 1); i++){ - if (args[i] != NULL) SCFree(args[i]); + for (i = 0; i < 6; i++){ + if (args[i] != NULL) + SCFree(args[i]); } - if (df) SCFree(df); + if (df != NULL) + SCFree(df); + if (copy_str != NULL) + SCFree(copy_str); return NULL; } diff --git a/src/detect-engine-sigorder.c b/src/detect-engine-sigorder.c index 186206fc46..4aa145f7a4 100644 --- a/src/detect-engine-sigorder.c +++ b/src/detect-engine-sigorder.c @@ -180,7 +180,7 @@ static inline int SCSigGetFlowvarType(Signature *sig) sm = sig->sm_lists[DETECT_SM_LIST_MATCH]; pd = NULL; while (sm != NULL) { - pd = (DetectPcreData *)sm->ctx; + //pd = (DetectPcreData *)sm->ctx; if (sm->type == DETECT_FLOWVAR) { type = DETECT_FLOWVAR_TYPE_READ; return type; @@ -228,7 +228,7 @@ static inline int SCSigGetPktvarType(Signature *sig) sm = sig->sm_lists[DETECT_SM_LIST_MATCH]; pd = NULL; while (sm != NULL) { - pd = (DetectPcreData *)sm->ctx; + //pd = (DetectPcreData *)sm->ctx; if (sm->type == DETECT_PKTVAR) { type = DETECT_PKTVAR_TYPE_READ; return type; @@ -344,17 +344,21 @@ static void SCSigOrderByAction(DetectEngineCtx *de_ctx, if (min == max && prev != sw) { if (sw->next != NULL) { sw->next->prev = sw->prev; + } + if (sw->prev != NULL) { sw->prev->next = sw->next; } if (min == NULL) { - prev->next = sw; + if (prev != NULL) + prev->next = sw; sw->prev = prev; sw->next = NULL; } else { sw->prev = min->prev; sw->next = min; - min->prev->next = sw; + if (min->prev != NULL) + min->prev->next = sw; min->prev = sw; } } @@ -449,17 +453,21 @@ static void SCSigOrderByFlowbits(DetectEngineCtx *de_ctx, if (min == max && prev != sw) { if (sw->next != NULL) { sw->next->prev = sw->prev; + } + if (sw->prev != NULL) { sw->prev->next = sw->next; } if (min == NULL) { - prev->next = sw; + if (prev != NULL) + prev->next = sw; sw->prev = prev; sw->next = NULL; } else { sw->prev = min->prev; sw->next = min; - min->prev->next = sw; + if (min->prev != NULL) + min->prev->next = sw; min->prev = sw; } } @@ -557,17 +565,21 @@ static void SCSigOrderByFlowvar(DetectEngineCtx *de_ctx, if (min == max && prev != sw) { if (sw->next != NULL) { sw->next->prev = sw->prev; + } + if (sw->prev != NULL) { sw->prev->next = sw->next; } if (min == NULL) { - prev->next = sw; + if (prev != NULL) + prev->next = sw; sw->prev = prev; sw->next = NULL; } else { sw->prev = min->prev; sw->next = min; - min->prev->next = sw; + if (min->prev != NULL) + min->prev->next = sw; min->prev = sw; } } @@ -663,17 +675,21 @@ static void SCSigOrderByPktvar(DetectEngineCtx *de_ctx, if (min == max && prev != sw) { if (sw->next != NULL) { sw->next->prev = sw->prev; + } + if (sw->prev != NULL) { sw->prev->next = sw->next; } if (min == NULL) { - prev->next = sw; + if (prev != NULL) + prev->next = sw; sw->prev = prev; sw->next = NULL; } else { sw->prev = min->prev; sw->next = min; - min->prev->next = sw; + if (min->prev != NULL) + min->prev->next = sw; min->prev = sw; } } @@ -770,17 +786,21 @@ static void SCSigOrderByPriority(DetectEngineCtx *de_ctx, if (min == max && prev != sw) { if (sw->next != NULL) { sw->next->prev = sw->prev; + } + if (sw->prev != NULL) { sw->prev->next = sw->next; } if (min == NULL) { - prev->next = sw; + if (prev != NULL) + prev->next = sw; sw->prev = prev; sw->next = NULL; } else { sw->prev = min->prev; sw->next = min; - min->prev->next = sw; + if (min->prev != NULL) + min->prev->next = sw; min->prev = sw; } } diff --git a/src/detect-engine-state.c b/src/detect-engine-state.c index e10aa78b05..a83ec93b9c 100644 --- a/src/detect-engine-state.c +++ b/src/detect-engine-state.c @@ -229,8 +229,6 @@ static void DeStateSignatureAppend(DetectEngineState *state, Signature *s, state->tail->next = store; state->tail = store; } - } else { - store = state->tail; } } diff --git a/src/detect-engine-tag.c b/src/detect-engine-tag.c index 770613090a..8a6d19e954 100644 --- a/src/detect-engine-tag.c +++ b/src/detect-engine-tag.c @@ -270,11 +270,12 @@ int TagHashAddTag(DetectTagHostCtx *tag_ctx, DetectTagDataEntry *tde, Packet *p) entry = TagHashSearch(tag_ctx, &tdl, p); if (entry == NULL) { DetectTagDataEntryList *new = SCMalloc(sizeof(DetectTagDataEntryList)); - if (new == NULL) { - SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate a new session"); + if (new != NULL) { + memcpy(new, &tdl, sizeof(DetectTagDataEntryList)); + TagHashAdd(tag_ctx, new, p); + } else { + SCLogDebug("Failed to allocate a new session"); } - memcpy(new, &tdl, sizeof(DetectTagDataEntryList)); - TagHashAdd(tag_ctx, new, p); } else { /* Append the tag to the list of this host */ diff --git a/src/detect-flowvar.c b/src/detect-flowvar.c index 5fe5aa6165..865dca6772 100644 --- a/src/detect-flowvar.c +++ b/src/detect-flowvar.c @@ -140,6 +140,9 @@ static int DetectFlowvarSetup (DetectEngineCtx *de_ctx, Signature *s, char *raws if (varcontent[0] == '\"' && varcontent[strlen(varcontent)-1] == '\"') { str = SCStrdup(varcontent+1); + if (str == NULL) { + return -1; + } str[strlen(varcontent)-2] = '\0'; dubbed = 1; } diff --git a/src/detect-fragbits.c b/src/detect-fragbits.c index b60c1fbc38..600d2c5195 100644 --- a/src/detect-fragbits.c +++ b/src/detect-fragbits.c @@ -248,16 +248,19 @@ static DetectFragBitsData *DetectFragBitsParse (char *rawstr) if(found == 0) goto error; - for (i = 0; i < (ret - 1); i++){ - if (args[i] != NULL) SCFree(args[i]); + for (i = 0; i < 2; i++) { + if (args[i] != NULL) + SCFree(args[i]); } return de; error: - for (i = 0; i < (ret - 1); i++){ - if (args[i] != NULL) SCFree(args[i]); + for (i = 0; i < 2; i++) { + if (args[i] != NULL) + SCFree(args[i]); } - if (de) SCFree(de); + if (de != NULL) + SCFree(de); return NULL; } diff --git a/src/detect-pktvar.c b/src/detect-pktvar.c index 572d10eba8..bb2b6470f0 100644 --- a/src/detect-pktvar.c +++ b/src/detect-pktvar.c @@ -136,6 +136,9 @@ static int DetectPktvarSetup (DetectEngineCtx *de_ctx, Signature *s, char *rawst if (varcontent[0] == '\"' && varcontent[strlen(varcontent)-1] == '\"') { str = SCStrdup(varcontent+1); + if (str == NULL) { + return -1; + } str[strlen(varcontent)-2] = '\0'; dubbed = 1; } diff --git a/src/detect-tag.c b/src/detect-tag.c index 9d3cfb5d5f..676b3a7d1a 100644 --- a/src/detect-tag.c +++ b/src/detect-tag.c @@ -124,6 +124,9 @@ int DetectTagFlowAdd(Packet *p, DetectTagDataEntry *tde) { if (p->flow->tag_list == NULL) { p->flow->tag_list = SCMalloc(sizeof(DetectTagDataEntryList)); + if (p->flow->tag_list == NULL) { + goto error; + } memset(p->flow->tag_list, 0, sizeof(DetectTagDataEntryList)); } else { iter = p->flow->tag_list->header_entry; @@ -158,6 +161,10 @@ int DetectTagFlowAdd(Packet *p, DetectTagDataEntry *tde) { SCMutexUnlock(&p->flow->m); return updated; + +error: + SCMutexUnlock(&p->flow->m); + return 1; } /** diff --git a/src/detect-threshold.c b/src/detect-threshold.c index f75ead5f82..bca1fb3767 100644 --- a/src/detect-threshold.c +++ b/src/detect-threshold.c @@ -121,6 +121,9 @@ static DetectThresholdData *DetectThresholdParse (char *rawstr) int i = 0; copy_str = SCStrdup(rawstr); + if (copy_str == NULL) { + goto error; + } for(pos = 0, threshold_opt = strtok(copy_str,","); pos < strlen(copy_str) && threshold_opt != NULL; pos++, threshold_opt = strtok(NULL,",")) { @@ -134,8 +137,10 @@ static DetectThresholdData *DetectThresholdParse (char *rawstr) track_found++; } - if(copy_str) + if (copy_str != NULL) { SCFree(copy_str); + copy_str = NULL; + } if(count_found != 1 || second_found != 1 || type_found != 1 || track_found != 1) goto error; @@ -203,7 +208,10 @@ error: for (i = 0; i < (ret - 1); i++){ if (args[i] != NULL) SCFree(args[i]); } - if (de) SCFree(de); + if (de != NULL) + SCFree(de); + if (copy_str != NULL) + SCFree(copy_str); return NULL; } diff --git a/src/tmqh-flow.c b/src/tmqh-flow.c index 9f72e33c05..036bf29c44 100644 --- a/src/tmqh-flow.c +++ b/src/tmqh-flow.c @@ -135,6 +135,9 @@ void *TmqhOutputFlowSetupCtx(char *queue_str) { memset(ctx,0x00,sizeof(TmqhFlowCtx)); char *str = SCStrdup(queue_str); + if (str == NULL) { + goto error; + } char *tstr = str; /* parse the comma separated string */ @@ -159,7 +162,8 @@ void *TmqhOutputFlowSetupCtx(char *queue_str) { return (void *)ctx; error: SCFree(ctx); - SCFree(str); + if (str != NULL) + SCFree(str); return NULL; } diff --git a/src/util-decode-asn1.c b/src/util-decode-asn1.c index c926b7df7b..b1ac363a19 100644 --- a/src/util-decode-asn1.c +++ b/src/util-decode-asn1.c @@ -389,7 +389,7 @@ Asn1Node *SCAsn1CtxNewFrame(Asn1Ctx *ac, uint16_t node) { if (ac->asn1_stack[node] == NULL) ac->asn1_stack[node] = SCMalloc(sizeof(Asn1Node)); - if (&ac->asn1_stack[node] == NULL) + if (ac->asn1_stack[node] == NULL) return NULL; memset(ac->asn1_stack[node], 0, sizeof(Asn1Node)); diff --git a/src/util-radix-tree.c b/src/util-radix-tree.c index 00f678d0e2..8694abbd36 100644 --- a/src/util-radix-tree.c +++ b/src/util-radix-tree.c @@ -450,7 +450,6 @@ static void SCRadixReleasePrefix(SCRadixPrefix *prefix, SCRadixTree *tree) SCFree(prefix->stream); user_data_temp1 = prefix->user_data; - user_data_temp2 = user_data_temp1; if (tree->Free != NULL) { while (user_data_temp1 != NULL) { user_data_temp2 = user_data_temp1; @@ -1041,8 +1040,7 @@ SCRadixNode *SCRadixAddKeyIPV4String(const char *str, SCRadixTree *tree, void *u } /* Validate the IP */ - int r; - if ((r = inet_pton(AF_INET, ip_str, &addr)) <= 0) { + if (inet_pton(AF_INET, ip_str, &addr) <= 0) { return NULL; } ip = addr.s_addr; @@ -1132,7 +1130,6 @@ static void SCRadixTransferNetmasksBWNodes(SCRadixNode *dest, SCRadixNode *src) static void SCRadixRemoveNetblockEntry(SCRadixNode *node, uint8_t netmask) { SCRadixNode *parent = NULL; - SCRadixNode *local_node = node; int i = 0; if (node == NULL) { @@ -1145,10 +1142,8 @@ static void SCRadixRemoveNetblockEntry(SCRadixNode *node, uint8_t netmask) if (netmask == 32 || netmask == 128) return; - local_node = node; - parent = local_node->parent; + parent = node->parent; while (parent != NULL && netmask < (parent->bit + 1)) { - local_node = parent; parent = parent->parent; }