From: Gunnar Beutner Date: Mon, 24 Mar 2014 10:23:05 +0000 (+0100) Subject: Improve error message for invalid inline service definitions. X-Git-Tag: v0.0.9~34^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8bfb60b7fab924a3410e1997364fe2256067a457;p=icinga2 Improve error message for invalid inline service definitions. Refs #5846 --- diff --git a/lib/base/array.cpp b/lib/base/array.cpp index 102d679e4..9d236954b 100644 --- a/lib/base/array.cpp +++ b/lib/base/array.cpp @@ -157,6 +157,14 @@ void Array::Resize(size_t new_size) m_Data.resize(new_size); } +void Array::Clear(void) +{ + ASSERT(!OwnsLock()); + ObjectLock olock(this); + + m_Data.clear(); +} + void Array::CopyTo(const Array::Ptr& dest) const { ASSERT(!OwnsLock()); diff --git a/lib/base/array.h b/lib/base/array.h index 744c790ca..0e53fbf78 100644 --- a/lib/base/array.h +++ b/lib/base/array.h @@ -56,6 +56,7 @@ public: void Remove(Iterator it); void Resize(size_t new_size); + void Clear(void); void CopyTo(const Array::Ptr& dest) const; Array::Ptr ShallowClone(void) const; diff --git a/lib/config/aexpression.cpp b/lib/config/aexpression.cpp index 5a56aa423..0f6a4fb63 100644 --- a/lib/config/aexpression.cpp +++ b/lib/config/aexpression.cpp @@ -68,7 +68,12 @@ void AExpression::ExtractPath(const std::vector& path, const Array::Ptr& AExpression::Ptr exprl = m_Operand2; if (path.size() == 1) { - VERIFY(exprl->m_Operator == &AExpression::OpDict); + if (m_Operator == &AExpression::OpSet) + result->Clear(); + + if (exprl->m_Operator != &AExpression::OpDict) + BOOST_THROW_EXCEPTION(ConfigError("The '" + path[0] + "' attribute must be a dictionary.") << errinfo_debuginfo(m_DebugInfo)); + Array::Ptr subexprl = exprl->m_Operand1; ObjectLock olock(subexprl); BOOST_FOREACH(const AExpression::Ptr& expr, subexprl) {