From: Russ Combs Date: Wed, 1 Oct 2014 14:20:25 +0000 (-0400) Subject: added value type checks X-Git-Tag: 3.0.0-233~1397^2~40 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cd53d4b7095e582bf93f610bc0625662d9bf7aa6;p=thirdparty%2Fsnort3.git added value type checks --- diff --git a/ChangeLog b/ChangeLog index efa3f7ebd..81e2a5be5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,7 @@ -- fixed byte_extract leak, session flow data leak -- changed pcre JIT to be optional by #define; need autofoo -- added support for name / type bindings +-- added value type checks 121 -- valgrind fixes diff --git a/src/framework/parameter.cc b/src/framework/parameter.cc index dd0d517ce..5b6488697 100644 --- a/src/framework/parameter.cc +++ b/src/framework/parameter.cc @@ -38,6 +38,9 @@ static bool valid_bool(Value& v, const char*) // FIXIT-L allow multiple , separated ranges static bool valid_int(Value& v, const char* r) { + if ( v.get_type() != Value::VT_NUM ) + return false; + if ( !r ) return true; @@ -70,6 +73,9 @@ static bool valid_int(Value& v, const char* r) // FIXIT-L allow multiple , separated ranges static bool valid_real(Value& v, const char* r) { + if ( v.get_type() != Value::VT_NUM ) + return false; + if ( !r ) return true; @@ -101,6 +107,9 @@ static bool valid_real(Value& v, const char* r) static bool valid_string(Value& v, const char* r) { + if ( v.get_type() != Value::VT_STR ) + return false; + if ( r && !strcmp(r, "(optional)") ) return true; @@ -115,6 +124,9 @@ static bool valid_string(Value& v, const char* r) static bool valid_select(Value& v, const char* r) { + if ( v.get_type() != Value::VT_STR ) + return false; + if ( !r ) return false; @@ -142,6 +154,9 @@ static unsigned get_index(const char* r, const char* t) static bool valid_enum(Value& v, const char* r) { + if ( v.get_type() != Value::VT_STR ) + return false; + if ( !r ) return false; @@ -182,6 +197,9 @@ static unsigned split(const string& txt, vector& strs) static bool valid_multi(Value& v, const char* r) { + if ( v.get_type() != Value::VT_STR ) + return false; + if ( !r ) return false; @@ -208,6 +226,9 @@ static bool valid_multi(Value& v, const char* r) static bool valid_mac(Value& v, const char*) { + if ( v.get_type() != Value::VT_STR ) + return false; + struct addr a; if ( addr_pton(v.get_string(), &a) ) @@ -224,6 +245,9 @@ static bool valid_mac(Value& v, const char*) static bool valid_ip4(Value& v, const char*) { + if ( v.get_type() != Value::VT_STR ) + return false; + uint32_t ip4 = inet_addr(v.get_string()); if ( ip4 == INADDR_NONE ) @@ -235,6 +259,9 @@ static bool valid_ip4(Value& v, const char*) static bool valid_addr(Value& v, const char*) { + if ( v.get_type() != Value::VT_STR ) + return false; + struct addr a; if ( addr_pton(v.get_string(), &a) ) @@ -254,6 +281,9 @@ static bool valid_addr(Value& v, const char*) static bool valid_bit_list(Value& v, const char* r) { + if ( v.get_type() != Value::VT_STR ) + return false; + string pl = v.get_string(); string bs; diff --git a/src/managers/module_manager.cc b/src/managers/module_manager.cc index d35ffe9d2..bf5c514e4 100644 --- a/src/managers/module_manager.cc +++ b/src/managers/module_manager.cc @@ -340,7 +340,7 @@ static bool set_value(const char* fqn, Value& v) } if ( v.get_type() == Value::VT_STR ) - ErrorMessage("ERROR invalid %s = %s\n", fqn, v.get_string()); + ErrorMessage("ERROR invalid %s = '%s'\n", fqn, v.get_string()); else if ( v.get_real() == v.get_long() ) ErrorMessage("ERROR invalid %s = %ld\n", fqn, v.get_long()); else