From: Russ Combs (rucombs) Date: Fri, 26 Oct 2018 18:00:59 +0000 (-0400) Subject: Merge pull request #1407 in SNORT/snort3 from ips_context_unit_test_fix to master X-Git-Tag: 3.0.0-249~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca2e90f883e60875c7de3869c0b57d8a96c41668;p=thirdparty%2Fsnort3.git Merge pull request #1407 in SNORT/snort3 from ips_context_unit_test_fix to master Squashed commit of the following: commit b63007603bd955f92551d3ec4f011e5d22460f30 Author: Bhagya Tholpady Date: Fri Oct 26 13:19:55 2018 -0400 detection : add function to clear ips_id from unit tests --- diff --git a/src/detection/ips_context.cc b/src/detection/ips_context.cc index 194cf6372..e22495780 100644 --- a/src/detection/ips_context.cc +++ b/src/detection/ips_context.cc @@ -134,11 +134,10 @@ public: }; int TestData::count = 0; -static unsigned ips_id = 0; TEST_CASE("IpsContext basic", "[IpsContext]") { - ips_id = 0; + IpsContextData::clear_ips_id(); IpsContext ctx(4); int num_data = 0; diff --git a/src/detection/ips_context_data.cc b/src/detection/ips_context_data.cc index 44e38a5c4..230619b58 100644 --- a/src/detection/ips_context_data.cc +++ b/src/detection/ips_context_data.cc @@ -37,9 +37,7 @@ using namespace snort; // context data //-------------------------------------------------------------------------- -// ips_id is not a member of context data so that -// tests (and only tests) can reset the id -static unsigned ips_id = 0; +unsigned IpsContextData::ips_id = 0; static unsigned max_id = IpsContext::max_ips_id; unsigned IpsContextData::get_ips_id() @@ -49,6 +47,11 @@ unsigned IpsContextData::get_ips_id() return ips_id; } +void IpsContextData::clear_ips_id() +{ + ips_id = 0; +} + //-------------------------------------------------------------------------- // unit tests //-------------------------------------------------------------------------- @@ -57,7 +60,7 @@ unsigned IpsContextData::get_ips_id() TEST_CASE("IpsContextData id", "[IpsContextData]") { - ips_id = 0; + IpsContextData::clear_ips_id(); auto id1 = IpsContextData::get_ips_id(); auto id2 = IpsContextData::get_ips_id(); diff --git a/src/detection/ips_context_data.h b/src/detection/ips_context_data.h index 5b79df863..437b55ce5 100644 --- a/src/detection/ips_context_data.h +++ b/src/detection/ips_context_data.h @@ -33,6 +33,9 @@ public: virtual ~IpsContextData() = default; static unsigned get_ips_id(); + // Only unit tests can call this function to clear the id + static void clear_ips_id(); + template static T* get(unsigned ips_id) { @@ -48,6 +51,9 @@ public: protected: IpsContextData() = default; + +private: + static unsigned ips_id; }; } #endif diff --git a/src/service_inspectors/gtp/gtp_inspect.cc b/src/service_inspectors/gtp/gtp_inspect.cc index a6b3b239e..e7edc3bbe 100644 --- a/src/service_inspectors/gtp/gtp_inspect.cc +++ b/src/service_inspectors/gtp/gtp_inspect.cc @@ -65,7 +65,7 @@ GtpFlowData::~GtpFlowData() // ips context stuff //------------------------------------------------------------------------- -static unsigned ips_id = 0; +static unsigned gtp_ips_id = 0; // This table stores all the information elements in a packet // To save memory, only one table for each ips context. @@ -80,14 +80,14 @@ public: { memset(gtp_ies, 0, sizeof(gtp_ies)); } static void init() - { ips_id = IpsContextData::get_ips_id(); } + { gtp_ips_id = IpsContextData::get_ips_id(); } GTP_IEData gtp_ies[MAX_GTP_IE_CODE + 1]; }; GTP_IEData* get_infos() { - GtpContextData* gcd = IpsContextData::get(ips_id); + GtpContextData* gcd = IpsContextData::get(gtp_ips_id); return gcd->gtp_ies; }