]> granicus.if.org Git - icinga2/commitdiff
Fix: null + null should not be ""
authorGunnar Beutner <gunnar@beutner.name>
Tue, 22 Sep 2015 11:02:35 +0000 (13:02 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 22 Sep 2015 11:13:38 +0000 (13:13 +0200)
fixes #10192

lib/base/value-operators.cpp

index 46d50a5e21fd628cdcdf7ccb43102c04e35b8e06..05f33de4994dcb4556765570157ff40e3901cc5d 100644 (file)
@@ -230,18 +230,18 @@ Value icinga::operator+(const Value& lhs, const Value& rhs)
 {
        if ((lhs.IsEmpty() || lhs.IsNumber()) && !lhs.IsString() && (rhs.IsEmpty() || rhs.IsNumber()) && !rhs.IsString() && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) + static_cast<double>(rhs);
-       if ((lhs.IsString() || lhs.IsEmpty() || lhs.IsNumber()) && (rhs.IsString() || rhs.IsEmpty() || rhs.IsNumber()))
+       if ((lhs.IsString() || lhs.IsEmpty() || lhs.IsNumber()) && (rhs.IsString() || rhs.IsEmpty() || rhs.IsNumber()) && (!(lhs.IsEmpty() && rhs.IsEmpty()) || lhs.IsString() || rhs.IsString()))
                return static_cast<String>(lhs) + static_cast<String>(rhs);
-       else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
+       else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) + static_cast<double>(rhs);
-       else if ((lhs.IsObjectType<Array>() || lhs.IsEmpty()) && (rhs.IsObjectType<Array>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) {
+       else if ((lhs.IsObjectType<Array>() || lhs.IsEmpty()) && (rhs.IsObjectType<Array>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) {
                Array::Ptr result = new Array();
                if (!lhs.IsEmpty())
                        static_cast<Array::Ptr>(lhs)->CopyTo(result);
                if (!rhs.IsEmpty())
                        static_cast<Array::Ptr>(rhs)->CopyTo(result);
                return result;
-       } else if ((lhs.IsObjectType<Dictionary>() || lhs.IsEmpty()) && (rhs.IsObjectType<Dictionary>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) {
+       } else if ((lhs.IsObjectType<Dictionary>() || lhs.IsEmpty()) && (rhs.IsObjectType<Dictionary>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) {
                Dictionary::Ptr result = new Dictionary();
                if (!lhs.IsEmpty())
                        static_cast<Dictionary::Ptr>(lhs)->CopyTo(result);