]> granicus.if.org Git - icinga2/commitdiff
Improve error message for invalid inline service definitions.
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 24 Mar 2014 10:23:05 +0000 (11:23 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 24 Mar 2014 10:23:05 +0000 (11:23 +0100)
Refs #5846

lib/base/array.cpp
lib/base/array.h
lib/config/aexpression.cpp

index 102d679e4c7716d4446ebabdd763da17e6db07c8..9d236954b7bc8e03a2a86dcb36167a4bc4224d38 100644 (file)
@@ -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());
index 744c790ca9958b9d818c2b60c0b0807b08ad0f13..0e53fbf783ae36d5f132bcbe67c689d4ef83617b 100644 (file)
@@ -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;
index 5a56aa4231a1d4a5adc4320b3b07451ae324e1d9..0f6a4fb63bd7103fb580244caec9909a26ecf27a 100644 (file)
@@ -68,7 +68,12 @@ void AExpression::ExtractPath(const std::vector<String>& 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) {