]> granicus.if.org Git - icinga2/commitdiff
Don't validate arguments/parameters that aren't strings
authorGunnar Beutner <gunnar@beutner.name>
Tue, 10 Nov 2015 06:59:10 +0000 (07:59 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 10 Nov 2015 06:59:10 +0000 (07:59 +0100)
refs #10539

lib/base/object.cpp
lib/icinga/command.cpp

index 4eeef78db92d35084f8fdc1b62e225becbaf7014..b15965ca76b1673089bfcaf1a410baa71cdd2ef5 100644 (file)
@@ -48,7 +48,7 @@ Object::~Object(void)
  */
 String Object::ToString(void) const
 {
-       return "Object of type '" + Utility::GetTypeName(typeid(*this)) + "'";
+       return "Object of type '" + GetReflectionType()->GetName() + "'";
 }
 
 #ifdef I2_DEBUG
index e029322f5ffbf6bd2e08022121f5abc3b724a2d8..1a01421bfdea9ec0162da37d98faa781a35dd2a2 100644 (file)
@@ -50,30 +50,21 @@ void Command::Validate(int types, const ValidationUtils& utils)
                                Dictionary::Ptr argdict = arginfo;
 
                                if (argdict->Contains("value")) {
-                                       String argvalue = argdict->Get("value");
+                                       Value argvalue = argdict->Get("value");
 
-                                       if (!MacroProcessor::ValidateMacroString(argvalue))
+                                       if (argvalue.IsString() && !MacroProcessor::ValidateMacroString(argvalue))
                                                BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of<String>("arguments")(kv.first)("value"), "Validation failed: Closing $ not found in macro format string '" + argvalue + "'."));
                                }
 
                                if (argdict->Contains("set_if")) {
-                                       String argsetif = argdict->Get("set_if");
+                                       Value argsetif = argdict->Get("set_if");
 
-                                       if (!MacroProcessor::ValidateMacroString(argsetif))
+                                       if (argsetif.IsString() && !MacroProcessor::ValidateMacroString(argsetif))
                                                BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of<String>("arguments")(kv.first)("set_if"), "Closing $ not found in macro format string '" + argsetif + "'."));
                                }
-                       } else if (arginfo.IsObjectType<Function>()) {
-                               continue; /* we cannot evaluate macros in functions */
-                       } else {
-                               argval = arginfo;
-
-                               if (argval.IsEmpty())
-                                       continue;
-
-                               String argstr = argval;
-
-                               if (!MacroProcessor::ValidateMacroString(argstr))
-                                       BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of<String>("arguments")(kv.first), "Closing $ not found in macro format string '" + argstr + "'."));
+                       } else if (arginfo.IsString()) {
+                               if (!MacroProcessor::ValidateMacroString(arginfo))
+                                       BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of<String>("arguments")(kv.first), "Closing $ not found in macro format string '" + arginfo + "'."));
                        }
                }
        }