]> granicus.if.org Git - icinga2/commitdiff
Fix integer overflow in len()
authorGunnar Beutner <gunnar@beutner.name>
Sat, 20 Dec 2014 08:36:35 +0000 (09:36 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Sat, 20 Dec 2014 08:36:35 +0000 (09:36 +0100)
fixes #8041

lib/base/scriptutils.cpp
lib/base/scriptutils.hpp

index d3f4478cfa1f05bc5485c4e641661626e7374f30..ceabf1ec83a7c965c6cb0156ec7856f9e5f016e7 100644 (file)
@@ -80,7 +80,7 @@ bool ScriptUtils::Regex(const String& pattern, const String& text)
        return res;
 }
 
-int ScriptUtils::Len(const Value& value)
+double ScriptUtils::Len(const Value& value)
 {
        if (value.IsObjectType<Dictionary>()) {
                Dictionary::Ptr dict = value;
@@ -88,8 +88,10 @@ int ScriptUtils::Len(const Value& value)
        } else if (value.IsObjectType<Array>()) {
                Array::Ptr array = value;
                return array->GetLength();
-       } else {
+       } else if (value.IsString()) {
                return Convert::ToString(value).GetLength();
+       } else {
+               return 0;
        }
 }
 
index 452635bd58d70c42ee15c5d5cb5d7f6de96a4e82..b6c98470e61b3d2b435132b0af256389569573d0 100644 (file)
@@ -40,7 +40,7 @@ public:
        static double CastNumber(const Value& value);
        static bool CastBool(const Value& value);
        static bool Regex(const String& pattern, const String& text);
-       static int Len(const Value& value);
+       static double Len(const Value& value);
        static Array::Ptr Union(const std::vector<Value>& arguments);
        static Array::Ptr Intersection(const std::vector<Value>& arguments);
        static void Log(const std::vector<Value>& arguments);