From dac0ff9343b371b2cf8938e681308437b91edf72 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 26 Aug 2016 10:36:53 +0200 Subject: [PATCH] Improve config validation for arrays of object names fixes #12556 --- lib/remote/zone.cpp | 5 ++++- tools/mkclass/classcompiler.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/remote/zone.cpp b/lib/remote/zone.cpp index d6a6973f9..a72a7a244 100644 --- a/lib/remote/zone.cpp +++ b/lib/remote/zone.cpp @@ -41,7 +41,10 @@ void Zone::OnAllConfigLoaded(void) if (endpoints) { ObjectLock olock(endpoints); for (const String& endpoint : endpoints) { - Endpoint::GetByName(endpoint)->SetCachedZone(this); + Endpoint::Ptr ep = Endpoint::GetByName(endpoint); + + if (ep) + ep->SetCachedZone(this); } } diff --git a/tools/mkclass/classcompiler.cpp b/tools/mkclass/classcompiler.cpp index a4a6cc28c..217b56320 100644 --- a/tools/mkclass/classcompiler.cpp +++ b/tools/mkclass/classcompiler.cpp @@ -535,7 +535,14 @@ void ClassCompiler::HandleClass(const Klass& klass, const ClassDebugInfo&) std::string ftype = FieldTypeToIcingaName(field, true); if (field.Type.IsName) { - m_Impl << "\t" << "if (!avalue.IsEmpty() && !utils.ValidateName(\"" << field.Type.TypeName << "\", avalue))" << std::endl + m_Impl << "\t" << "if ("; + + if (field.Type.ArrayRank > 0) + m_Impl << "avalue.IsEmpty() || "; + else + m_Impl << "!avalue.IsEmpty() && "; + + m_Impl << "!utils.ValidateName(\"" << field.Type.TypeName << "\", avalue))" << std::endl << "\t\t" << "BOOST_THROW_EXCEPTION(ValidationError(dynamic_cast(this), boost::assign::list_of(\"" << field.Name << "\"), \"Object '\" + avalue + \"' of type '" << field.Type.TypeName << "' does not exist.\"));" << std::endl; } else if (field.Type.ArrayRank > 0 && (ftype == "Number" || ftype == "Boolean")) { -- 2.40.0