]> granicus.if.org Git - icinga2/commitdiff
Add marco RequireNotNull
authorNoah Hilverling <noah.hilverling@icinga.com>
Tue, 30 Jan 2018 10:26:07 +0000 (11:26 +0100)
committerJean Flach <jean-marcel.flach@icinga.com>
Thu, 22 Feb 2018 13:55:42 +0000 (14:55 +0100)
This is used to fix a number of possible nullptr dereferences

22 files changed:
lib/base/array-script.cpp
lib/base/configobject-script.cpp
lib/base/datetime-script.cpp
lib/base/dictionary-script.cpp
lib/base/function-script.cpp
lib/base/object-script.cpp
lib/base/object.cpp
lib/base/object.hpp
lib/base/typetype-script.cpp
lib/icinga/checkable-script.cpp
lib/icinga/macroprocessor.cpp
lib/methods/clusterchecktask.cpp
lib/methods/clusterzonechecktask.cpp
lib/methods/exceptionchecktask.cpp
lib/methods/icingachecktask.cpp
lib/methods/nullchecktask.cpp
lib/methods/nulleventtask.cpp
lib/methods/pluginchecktask.cpp
lib/methods/plugineventtask.cpp
lib/methods/pluginnotificationtask.cpp
lib/methods/randomchecktask.cpp
lib/methods/timeperiodtask.cpp

index 568037d9ed9f3142866226e38420866d9ad3e9e0..b9535ef983198bc102e962e26c6f05c3fccadb5d 100644 (file)
@@ -30,6 +30,7 @@ static double ArrayLen(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->GetLength();
 }
 
@@ -37,6 +38,7 @@ static void ArraySet(int index, const Value& value)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Set(index, value);
 }
 
@@ -44,6 +46,7 @@ static Value ArrayGet(int index)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Get(index);
 }
 
@@ -51,6 +54,7 @@ static void ArrayAdd(const Value& value)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Add(value);
 }
 
@@ -58,6 +62,7 @@ static void ArrayRemove(int index)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Remove(index);
 }
 
@@ -65,6 +70,7 @@ static bool ArrayContains(const Value& value)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Contains(value);
 }
 
@@ -72,6 +78,7 @@ static void ArrayClear(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Clear();
 }
 
@@ -87,6 +94,7 @@ static Array::Ptr ArraySort(const std::vector<Value>& args)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        Array::Ptr arr = self->ShallowClone();
 
@@ -110,6 +118,7 @@ static Array::Ptr ArrayShallowClone(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->ShallowClone();
 }
 
@@ -117,6 +126,7 @@ static Value ArrayJoin(const Value& separator)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        Value result;
        bool first = true;
@@ -139,6 +149,7 @@ static Array::Ptr ArrayReverse(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Reverse();
 }
 
@@ -146,6 +157,7 @@ static Array::Ptr ArrayMap(const Function::Ptr& function)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        if (vframe->Sandboxed && !function->IsSideEffectFree())
                BOOST_THROW_EXCEPTION(ScriptError("Map function must be side-effect free."));
@@ -166,6 +178,7 @@ static Value ArrayReduce(const Function::Ptr& function)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        if (vframe->Sandboxed && !function->IsSideEffectFree())
                BOOST_THROW_EXCEPTION(ScriptError("Reduce function must be side-effect free."));
@@ -190,6 +203,7 @@ static Array::Ptr ArrayFilter(const Function::Ptr& function)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        if (vframe->Sandboxed && !function->IsSideEffectFree())
                BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
@@ -211,6 +225,7 @@ static bool ArrayAny(const Function::Ptr& function)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        if (vframe->Sandboxed && !function->IsSideEffectFree())
                BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
@@ -230,6 +245,7 @@ static bool ArrayAll(const Function::Ptr& function)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        if (vframe->Sandboxed && !function->IsSideEffectFree())
                BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
@@ -248,6 +264,7 @@ static Array::Ptr ArrayUnique(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        std::set<Value> result;
 
index dfe4455b6dbaeca0d2cdbfe6309aad6a5402cb21..30d22ceff16921303b0fe4c28ba49d0ef13281ac 100644 (file)
@@ -29,6 +29,7 @@ static void ConfigObjectModifyAttribute(const String& attr, const Value& value)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        ConfigObject::Ptr self = vframe->Self;
+       RequireNotNull(self);
        return self->ModifyAttribute(attr, value);
 }
 
@@ -36,6 +37,7 @@ static void ConfigObjectRestoreAttribute(const String& attr)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        ConfigObject::Ptr self = vframe->Self;
+       RequireNotNull(self);
        return self->RestoreAttribute(attr);
 }
 
index 7d9a14cc2e3ba2c45d606eff72d68a0c9d9e2a9a..2e2f2f10b9c583e7dd4b72843384efb9d0e0aa3f 100644 (file)
@@ -29,6 +29,7 @@ static String DateTimeFormat(const String& format)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        DateTime::Ptr self = static_cast<DateTime::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        return self->Format(format);
 }
index 66aa26cbd7249876c24b1971c115c542cfbe68cc..9059a0a514cb502821e7e2414308eea659ceb5ac 100644 (file)
@@ -29,6 +29,7 @@ static double DictionaryLen(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->GetLength();
 }
 
@@ -36,6 +37,7 @@ static void DictionarySet(const String& key, const Value& value)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Set(key, value);
 }
 
@@ -43,6 +45,7 @@ static Value DictionaryGet(const String& key)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Get(key);
 }
 
@@ -50,6 +53,7 @@ static void DictionaryRemove(const String& key)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Remove(key);
 }
 
@@ -57,6 +61,7 @@ static bool DictionaryContains(const String& key)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Contains(key);
 }
 
@@ -64,6 +69,7 @@ static Dictionary::Ptr DictionaryShallowClone(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->ShallowClone();
 }
 
@@ -72,6 +78,8 @@ static Array::Ptr DictionaryKeys(void)
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
        Array::Ptr keys = new Array();
+       RequireNotNull(self);
+
        ObjectLock olock(self);
        for (const Dictionary::Pair& kv : self) {
                keys->Add(kv.first);
@@ -84,6 +92,8 @@ static Array::Ptr DictionaryValues(void)
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
        Array::Ptr keys = new Array();
+       RequireNotNull(self);
+
        ObjectLock olock(self);
        for (const Dictionary::Pair& kv : self) {
                keys->Add(kv.second);
index dab4255dee2d4b91b07ce1fa7eb0fc95c37ffbaa..cd40feacba7a730233deaa4d9ba5d3921d690643 100644 (file)
@@ -32,6 +32,7 @@ static Value FunctionCall(const std::vector<Value>& args)
 
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Function::Ptr self = static_cast<Function::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        std::vector<Value> uargs(args.begin() + 1, args.end());
        return self->Invoke(args[0], uargs);
@@ -41,6 +42,7 @@ static Value FunctionCallV(const Value& thisArg, const Array::Ptr& args)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Function::Ptr self = static_cast<Function::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        std::vector<Value> uargs;
 
index c8112a402414247dfa378614e3f59bf8479aae96..27bc487da2a01b029e68627a10484606901c4005 100644 (file)
@@ -29,6 +29,7 @@ static String ObjectToString(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->ToString();
 }
 
@@ -36,6 +37,7 @@ static void ObjectNotifyAttribute(const String& attribute)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->NotifyField(self->GetReflectionType()->GetFieldId(attribute));
 }
 
@@ -43,6 +45,7 @@ static Object::Ptr ObjectClone(void)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Clone();
 }
 
index e9f3cd1bd494bb8778bdf898ec2cb27da073fca6..b261fefe6850483cbed5f1631e5d88eb6c758358 100644 (file)
@@ -261,3 +261,8 @@ INITIALIZE_ONCE([]() {
 });
 #endif /* I2_LEAK_DEBUG */
 
+void icinga::RequireNotNullInternal(const intrusive_ptr<Object>& object, const char *description)
+{
+       if (!object)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Pointer must not be null: " + String(description)));
+}
index d3abc464814cf431c4e576c67745e50668f7c903..6159c5b5eab224df4e1ee990e606350c27fdecff 100644 (file)
@@ -62,6 +62,10 @@ extern I2_BASE_API Value Empty;
        DECLARE_PTR_TYPEDEFS(klass); \
        IMPL_TYPE_LOOKUP();
 
+#define RequireNotNull(ptr) RequireNotNullInternal(ptr, #ptr)
+
+I2_BASE_API void RequireNotNullInternal(const intrusive_ptr<Object>& object, const char *description);
+
 template<typename T>
 intrusive_ptr<Object> DefaultObjectFactory(const std::vector<Value>& args)
 {
index 5189845b3e1340505668e52b64cfc6b924a525fb..591de4667d517c1657c0831d00bbbf79dc3e09eb 100644 (file)
@@ -37,7 +37,8 @@ static void TypeRegisterAttributeHandler(const String& fieldName, const Function
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Type::Ptr self = static_cast<Type::Ptr>(vframe->Self);
-       
+       RequireNotNull(self);
+
        int fid = self->GetFieldId(fieldName);
        self->RegisterAttributeHandler(fid, boost::bind(&InvokeAttributeHandlerHelper, callback, _1, _2));
 }
index 40626fef916771213347f410586d2e259d97a96c..f7ba56e80224dfc5967d875acea7da8d8511ae5c 100644 (file)
@@ -30,6 +30,7 @@ static void CheckableProcessCheckResult(const CheckResult::Ptr& cr)
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Checkable::Ptr self = vframe->Self;
+       RequireNotNull(self);
        self->ProcessCheckResult(cr);
 }
 
index 2027ef82f8416ec8e8d78b13de74115d02dd101c..ac45f1c9014c95a4406d881cda826da788ccc9b5 100644 (file)
@@ -40,6 +40,9 @@ Value MacroProcessor::ResolveMacros(const Value& str, const ResolverList& resolv
     const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros,
     bool useResolvedMacros, int recursionLevel)
 {
+       if (useResolvedMacros)
+               RequireNotNull(resolvedMacros);
+
        Value result;
 
        if (str.IsEmpty())
@@ -454,6 +457,9 @@ Value MacroProcessor::ResolveArguments(const Value& command, const Dictionary::P
     const MacroProcessor::ResolverList& resolvers, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros, int recursionLevel)
 {
+       if (useResolvedMacros)
+               RequireNotNull(resolvedMacros);
+
        Value resolvedCommand;
        if (!arguments || command.IsObjectType<Array>() || command.IsObjectType<Function>())
                resolvedCommand = MacroProcessor::ResolveMacros(command, resolvers, cr, NULL,
index 2ad7f6578c567823890f20839d19fc92b2b6c03f..513a5a4753f9efe5c98a240c2eb24f316d6f0028 100644 (file)
@@ -38,6 +38,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, ClusterCheck, &ClusterCheckTask::ScriptFunc
 void ClusterCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
index 919e7fbedca82bac1f5b117fa5ea4cf8f6f159a7..699ef9bf3db336fa73436f58eaff120436d8648e 100644 (file)
@@ -34,6 +34,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, ClusterZoneCheck, &ClusterZoneCheckTask::Sc
 void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        ApiListener::Ptr listener = ApiListener::GetInstance();
 
        if (!listener) {
index 0410621ab8535c484962503651375349d6acc93e..12026432784ca42885ad6b4660fa077f754a98c6 100644 (file)
@@ -34,6 +34,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, ExceptionCheck, &ExceptionCheckTask::Script
 void ExceptionCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(service);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
index 3a4b668a9526ccbfd4fe6111021cf35533f5d719..d96dfedd1c1b28ade193c078242067f934e75e08 100644 (file)
@@ -35,6 +35,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, IcingaCheck, &IcingaCheckTask::ScriptFunc,
 void IcingaCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(service);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
index 09b060c2b52cecc1e1a848470325a59dbbfb8df2..50d2409a1bce952613768399dcb90c9598e7abde 100644 (file)
@@ -32,9 +32,12 @@ using namespace icinga;
 
 REGISTER_SCRIPTFUNCTION_NS(Internal, NullCheck, &NullCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
 
-void NullCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
+void NullCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
@@ -48,5 +51,5 @@ void NullCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult:
        cr->SetPerformanceData(perfdata);
        cr->SetState(ServiceOK);
 
-       service->ProcessCheckResult(cr);
+       checkable->ProcessCheckResult(cr);
 }
index 2d56e8a34d955fb4891875166e2ef8c4801fe174..f80edd4e0b5fa6aabb7faf3894f0947d5356e617 100644 (file)
@@ -25,5 +25,7 @@ using namespace icinga;
 
 REGISTER_SCRIPTFUNCTION_NS(Internal, NullEvent, &NullEventTask::ScriptFunc, "checkable:resolvedMacros:useResolvedMacros");
 
-void NullEventTask::ScriptFunc(const Checkable::Ptr&, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
-{ }
+void NullEventTask::ScriptFunc(const Checkable::Ptr& checkable, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
+{
+       RequireNotNull(checkable);
+}
index abf2b0cd511cd33d4b64579268290deeb8c765d3..ddd8dba38144b710133836e9d5eddc56c86f3c6c 100644 (file)
@@ -38,6 +38,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, PluginCheck,  &PluginCheckTask::ScriptFunc,
 void PluginCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        CheckCommand::Ptr commandObj = checkable->GetCheckCommand();
 
        Host::Ptr host;
index 48a0b9ce05649c2e7bc03a9344c1b52784c98c60..a1a49f0661068c4ebfdff0b2812f111b68600d9e 100644 (file)
@@ -36,6 +36,8 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, PluginEvent, &PluginEventTask::ScriptFunc,
 void PluginEventTask::ScriptFunc(const Checkable::Ptr& checkable,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+
        EventCommand::Ptr commandObj = checkable->GetEventCommand();
 
        Host::Ptr host;
index 42403e7bbe8fe5bf3ea17b132b3da4ad2c885548..730ae677093e361ae2a18c1f2097e13477f3e410 100644 (file)
@@ -39,6 +39,9 @@ void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification,
     const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros,
     bool useResolvedMacros)
 {
+       RequireNotNull(notification);
+       RequireNotNull(user);
+
        NotificationCommand::Ptr commandObj = notification->GetCommand();
 
        NotificationType type = static_cast<NotificationType>(itype);
index 0d31e795aecf85c53be47ea6b3b9cbad35222456..7afa0c7afa5e7948a19bb5a175c6107c4c8fb743 100644 (file)
@@ -32,9 +32,12 @@ using namespace icinga;
 
 REGISTER_SCRIPTFUNCTION_NS(Internal, RandomCheck, &RandomCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
 
-void RandomCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
+void RandomCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
     const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
@@ -48,5 +51,5 @@ void RandomCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResul
        cr->SetPerformanceData(perfdata);
        cr->SetState(static_cast<ServiceState>(Utility::Random() % 4));
 
-       service->ProcessCheckResult(cr);
+       checkable->ProcessCheckResult(cr);
 }
index c26b4cedd0506477e918643c79d684ecc1e46524..92c57b3cf0003f9a4b32fcdf92f2bed397ecfed4 100644 (file)
@@ -25,15 +25,18 @@ using namespace icinga;
 REGISTER_SCRIPTFUNCTION_NS(Internal, EmptyTimePeriod, &TimePeriodTask::EmptyTimePeriodUpdate, "tp:begin:end");
 REGISTER_SCRIPTFUNCTION_NS(Internal, EvenMinutesTimePeriod, &TimePeriodTask::EvenMinutesTimePeriodUpdate, "tp:begin:end");
 
-Array::Ptr TimePeriodTask::EmptyTimePeriodUpdate(const TimePeriod::Ptr&, double, double)
+Array::Ptr TimePeriodTask::EmptyTimePeriodUpdate(const TimePeriod::Ptr& tp, double, double)
 {
+       RequireNotNull(tp);
+
        Array::Ptr segments = new Array();
        return segments;
 }
 
-Array::Ptr TimePeriodTask::EvenMinutesTimePeriodUpdate(const TimePeriod::Ptr&, double begin, double end)
+Array::Ptr TimePeriodTask::EvenMinutesTimePeriodUpdate(const TimePeriod::Ptr& tp, double begin, double end)
 {
        Array::Ptr segments = new Array();
+       RequireNotNull(tp);
 
        for (long t = begin / 60 - 1; t * 60 < end; t++) {
                if ((t % 2) == 0) {