]> granicus.if.org Git - icinga2/commitdiff
Don't allow comparison of strings and numbers
authorGunnar Beutner <gunnar@beutner.name>
Fri, 30 Jan 2015 09:30:31 +0000 (10:30 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Fri, 30 Jan 2015 09:30:31 +0000 (10:30 +0100)
fixes #8305

lib/base/value-operators.cpp

index 3c5e8d989734350ef61d5548c137c784263eb690..561a9622a9447a16c79d3b2d4f8ea5394b2689cb 100644 (file)
@@ -561,8 +561,6 @@ bool icinga::operator<(const Value& lhs, const Value& rhs)
                return static_cast<String>(lhs) < static_cast<String>(rhs);
        else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) < static_cast<double>(rhs);
-       else if (lhs.GetTypeName() != rhs.GetTypeName())
-               return lhs.GetTypeName() < rhs.GetTypeName();
        else
                BOOST_THROW_EXCEPTION(std::invalid_argument("Operator < cannot be applied to values of type '" + lhs.GetTypeName() + "' and '" + rhs.GetTypeName() + "'"));
 }
@@ -593,8 +591,6 @@ bool icinga::operator>(const Value& lhs, const Value& rhs)
                return static_cast<String>(lhs) > static_cast<String>(rhs);
        else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) > static_cast<double>(rhs);
-       else if (lhs.GetTypeName() != rhs.GetTypeName())
-               return lhs.GetTypeName() > rhs.GetTypeName();
        else
                BOOST_THROW_EXCEPTION(std::invalid_argument("Operator > cannot be applied to values of type '" + lhs.GetTypeName() + "' and '" + rhs.GetTypeName() + "'"));
 }
@@ -625,8 +621,6 @@ bool icinga::operator<=(const Value& lhs, const Value& rhs)
                return static_cast<String>(lhs) <= static_cast<String>(rhs);
        else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) <= static_cast<double>(rhs);
-       else if (lhs.GetTypeName() != rhs.GetTypeName())
-               return lhs.GetTypeName() <= rhs.GetTypeName();
        else
                BOOST_THROW_EXCEPTION(std::invalid_argument("Operator <= cannot be applied to values of type '" + lhs.GetTypeName() + "' and '" + rhs.GetTypeName() + "'"));
 }
@@ -657,8 +651,6 @@ bool icinga::operator>=(const Value& lhs, const Value& rhs)
                return static_cast<String>(lhs) >= static_cast<String>(rhs);
        else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
                return static_cast<double>(lhs) >= static_cast<double>(rhs);
-       else if (lhs.GetTypeName() != rhs.GetTypeName())
-               return lhs.GetTypeName() >= rhs.GetTypeName();
        else
                BOOST_THROW_EXCEPTION(std::invalid_argument("Operator >= cannot be applied to values of type '" + lhs.GetTypeName() + "' and '" + rhs.GetTypeName() + "'"));
 }