From: Michael Friedrich <michael.friedrich@icinga.com>
Date: Fri, 27 Jul 2018 14:34:50 +0000 (+0200)
Subject: Improve error logging for match/regex/cidr_match functions and unsupported dictionary... 
X-Git-Tag: v2.9.2~7
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5cb39ea78b4395b3daef4bb65c96bea84c2e6c05;p=icinga2

Improve error logging for match/regex/cidr_match functions and unsupported dictionary usage

fixes #6442
refs #6497
---

diff --git a/lib/base/scriptutils.cpp b/lib/base/scriptutils.cpp
index f8ab8ce00..3c1a4e5a5 100644
--- a/lib/base/scriptutils.cpp
+++ b/lib/base/scriptutils.cpp
@@ -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)
@@ -159,10 +163,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)
@@ -201,10 +209,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)