]> granicus.if.org Git - icinga2/commitdiff
Improve error logging for match/regex/cidr_match functions and unsupported dictionary... 6497/head
authorMichael Friedrich <michael.friedrich@icinga.com>
Fri, 27 Jul 2018 14:34:50 +0000 (16:34 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Fri, 27 Jul 2018 14:34:50 +0000 (16:34 +0200)
fixes #6442

lib/base/scriptutils.cpp

index cbedd9f975eac53f0a45419a6ba6518632fb1f96..2c65fae3b92c96afa6e61d3fdeca9163fc82bcea 100644 (file)
@@ -108,10 +108,14 @@ bool ScriptUtils::CastBool(const Value& value)
 bool ScriptUtils::Regex(const std::vector<Value>& args)
 {
        if (args.size() < 2)
-               BOOST_THROW_EXCEPTION(std::invalid_argument("Regular expression and text must be specified."));
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Regular expression and text must be specified for regex()."));
 
        String pattern = args[0];
        const Value& argTexts = args[1];
+
+       if (argTexts.IsObjectType<Dictionary>())
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Dictionaries are not supported by regex()."));
+
        MatchType mode;
 
        if (args.size() > 2)
@@ -158,10 +162,14 @@ bool ScriptUtils::Regex(const std::vector<Value>& args)
 bool ScriptUtils::Match(const std::vector<Value>& args)
 {
        if (args.size() < 2)
-               BOOST_THROW_EXCEPTION(std::invalid_argument("Pattern and text must be specified."));
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Pattern and text must be specified for match()."));
 
        String pattern = args[0];
        const Value& argTexts = args[1];
+
+       if (argTexts.IsObjectType<Dictionary>())
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Dictionaries are not supported by match()."));
+
        MatchType mode;
 
        if (args.size() > 2)
@@ -199,10 +207,14 @@ bool ScriptUtils::Match(const std::vector<Value>& args)
 bool ScriptUtils::CidrMatch(const std::vector<Value>& args)
 {
        if (args.size() < 2)
-               BOOST_THROW_EXCEPTION(std::invalid_argument("CIDR and IP address must be specified."));
+               BOOST_THROW_EXCEPTION(std::invalid_argument("CIDR and IP address must be specified for cidr_match()."));
 
        String pattern = args[0];
        const Value& argIps = args[1];
+
+       if (argIps.IsObjectType<Dictionary>())
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Dictionaries are not supported by cidr_match()."));
+
        MatchType mode;
 
        if (args.size() > 2)