]> granicus.if.org Git - icinga2/commitdiff
Fix the !in operator.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 18 Mar 2014 14:48:50 +0000 (15:48 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 19 Mar 2014 11:46:23 +0000 (12:46 +0100)
Refs #5789

lib/config/aexpression.cpp

index 0521c17c3c05b35c6610ae5f8d2d1f90ac186355..637b46d0e1e22946ef068577ce11b372e689f172 100644 (file)
@@ -94,7 +94,19 @@ Value AExpression::Evaluate(const Dictionary::Ptr& locals) const
 
                        return found;
                case AENotIn:
-                       return left != right;
+                       if (!right.IsObjectType<Array>())
+                               BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid right side argument for 'in' operator: " + JsonSerialize(right)));
+
+                       arr = right;
+                       found = false;
+                       BOOST_FOREACH(const Value& value, arr) {
+                               if (value == left) {
+                                       found = true;
+                                       break;
+                               }
+                       }
+
+                       return !found;
                case AELogicalAnd:
                        return (long)left && (long)right;
                case AELogicalOr: