From: Russ Combs Date: Thu, 2 Jul 2015 19:07:38 +0000 (-0400) Subject: fix sip stats and misc static analysis issues X-Git-Tag: 3.0.0-233~925 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f95b4c6dafdd668c2790e05d7e2d98bb6ff37715;p=thirdparty%2Fsnort3.git fix sip stats and misc static analysis issues --- diff --git a/src/service_inspectors/sip/ips_sip_method.cc b/src/service_inspectors/sip/ips_sip_method.cc index 43e98e24c..df2bf7bcb 100644 --- a/src/service_inspectors/sip/ips_sip_method.cc +++ b/src/service_inspectors/sip/ips_sip_method.cc @@ -196,6 +196,7 @@ bool SipMethodModule::set(const char*, Value& v, SnortConfig*) if(!method) { ParseError("Failed to add a new method to sip_method\n"); + return false; } smod.flags |= 1 << (method->methodFlag - 1); diff --git a/src/service_inspectors/sip/sip_config.h b/src/service_inspectors/sip/sip_config.h index f4d75b7a2..544eed47f 100644 --- a/src/service_inspectors/sip/sip_config.h +++ b/src/service_inspectors/sip/sip_config.h @@ -60,8 +60,8 @@ struct SIP_Stats PegCount dialogs; PegCount ignoreChannels; PegCount ignoreSessions; - PegCount requests[NUM_OF_REQUEST_TYPES]; - PegCount responses[NUM_OF_RESPONSE_TYPES]; + PegCount requests; // [NUM_OF_REQUEST_TYPES]; // FIXIT-L support this + PegCount responses; // [NUM_OF_RESPONSE_TYPES]; // FIXIT-L support this }; extern THREAD_LOCAL SIP_Stats sip_stats; diff --git a/src/service_inspectors/sip/sip_dialog.cc b/src/service_inspectors/sip/sip_dialog.cc index 750d6a7cc..8a38ca28b 100644 --- a/src/service_inspectors/sip/sip_dialog.cc +++ b/src/service_inspectors/sip/sip_dialog.cc @@ -80,9 +80,13 @@ static int SIP_processRequest(SIPMsg* sipMsg, SIP_DialogData* dialog, SIP_Dialog } methodFlag = sipMsg->methodFlag; +#if 1 + sip_stats.requests++; +#else sip_stats.requests[TOTAL_REQUESTS]++; if (methodFlag > 0) sip_stats.requests[methodFlag]++; +#endif switch (methodFlag) { case SIP_METHOD_INVITE: @@ -233,9 +237,13 @@ static int SIP_processResponse(SIPMsg* sipMsg, SIP_DialogData* dialog, SIP_Dialo assert (NULL != sipMsg); statusType = sipMsg->status_code / 100; +#if 1 + sip_stats.responses++; +#else sip_stats.responses[TOTAL_RESPONSES]++; if (statusType < NUM_OF_RESPONSE_TYPES) sip_stats.responses[statusType]++; +#endif if (NULL == dialog) return false; diff --git a/src/service_inspectors/sip/sip_module.cc b/src/service_inspectors/sip/sip_module.cc index e31776fb8..5a69de5b0 100644 --- a/src/service_inspectors/sip/sip_module.cc +++ b/src/service_inspectors/sip/sip_module.cc @@ -131,13 +131,13 @@ static const RuleMap sip_rules[] = THREAD_LOCAL SIP_Stats sip_stats; -const PegInfo sip_pegs[] = +static const PegInfo sip_pegs[] = { { "sessions", "total sessions" }, { "events", "events generated" }, { "dialogs", "total dialogs" }, - { "ignoreChannels", "total channels ignored" }, - { "ignoreSessions", "total sessions ignored" }, + { "ignored channels", "total channels ignored" }, + { "ignored sessions", "total sessions ignored" }, { "requests", "total requests" }, { "responses", "total responses" }, { nullptr, nullptr } @@ -165,7 +165,7 @@ const PegInfo* SipModule::get_pegs() const { return sip_pegs; } PegCount* SipModule::get_counts() const -{ return (PegCount*)&sipstats; } +{ return (PegCount*)&sip_stats; } ProfileStats* SipModule::get_profile() const { return &sipPerfStats; } diff --git a/src/service_inspectors/sip/sip_module.h b/src/service_inspectors/sip/sip_module.h index daa22732d..2ff0553d0 100644 --- a/src/service_inspectors/sip/sip_module.h +++ b/src/service_inspectors/sip/sip_module.h @@ -61,7 +61,6 @@ struct SnortConfig; -extern const PegInfo sip_pegs[]; extern THREAD_LOCAL SimpleStats sipstats; extern THREAD_LOCAL ProfileStats sipPerfStats; diff --git a/src/service_inspectors/sip/sip_parser.cc b/src/service_inspectors/sip/sip_parser.cc index 860a5a7c6..7b03f0cf6 100644 --- a/src/service_inspectors/sip/sip_parser.cc +++ b/src/service_inspectors/sip/sip_parser.cc @@ -250,12 +250,13 @@ static int sip_process_bodyField(SIPMsg* msg, const char* start, const char* end ********************************************************************/ static int sip_find_linebreak(const char* start, char* end, char** lineEnd) { - int numCRLF; - char* s = (char*)start; + int numCRLF = 0; *lineEnd = NULL; - numCRLF = 0; + if (start >= end) - return 0; + return numCRLF; + + char* s = (char*)start; while ((s < end) && !('\r' ==*s || '\n' == *s)) { @@ -263,7 +264,7 @@ static int sip_find_linebreak(const char* start, char* end, char** lineEnd) } if (s == end) - return 0; + return numCRLF; s++; numCRLF = 1; @@ -519,9 +520,12 @@ static int sip_body_parse(SIPMsg* msg, const char* buff, char* end, char** bodyE char* next; char* start; int numOfLineBreaks; + +#ifdef DEBUG_MSGS length = end - buff; DEBUG_WRAP(DebugMessage(DEBUG_SIP, "Body length: %d\n", length); ); DEBUG_WRAP(DebugMessage(DEBUG_SIP, "Body line: %.*s\n", length, buff); ); +#endif // Initialize it *bodyEnd = end;