]> 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>
Wed, 21 Feb 2018 12:47:46 +0000 (13:47 +0100)
This is used to fix a number of possible nullptr dereferences

23 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/dummychecktask.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 3a59b7fb8519b624d824b97e63531bca676217c6..089fa3f67f6d81f6350420966a56ac5ab6eb0787 100644 (file)
@@ -30,6 +30,7 @@ static double ArrayLen()
 {
        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()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        self->Clear();
 }
 
@@ -84,6 +91,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();
 
@@ -107,6 +115,7 @@ static Array::Ptr ArrayShallowClone()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->ShallowClone();
 }
 
@@ -114,6 +123,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;
@@ -136,6 +146,7 @@ static Array::Ptr ArrayReverse()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Reverse();
 }
 
@@ -143,6 +154,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."));
@@ -161,6 +173,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."));
@@ -182,6 +195,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."));
@@ -201,6 +215,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."));
@@ -218,6 +233,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."));
@@ -234,6 +250,7 @@ static Array::Ptr ArrayUnique()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
+       RequireNotNull(self);
 
        std::set<Value> result;
 
index d2cdba45b2b265a920e1ab47183e8a092612f174..7ca590d57a5f1829f4d94302b3baa8d4f072695d 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 4a16a0aa21e52b8f8fd1fbb3708672ae78108384..1a3a407915f29022089c8aa6ddda935164a96a04 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 547f814b1000e42fcda63d11c9d329606a71120b..709e7304f68d32e8354c19d789833c0630bab9f1 100644 (file)
@@ -29,6 +29,7 @@ static double DictionaryLen()
 {
        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()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->ShallowClone();
 }
 
@@ -71,6 +77,8 @@ static Array::Ptr DictionaryKeys()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
+
        ArrayData keys;
        ObjectLock olock(self);
        for (const Dictionary::Pair& kv : self) {
@@ -83,6 +91,8 @@ static Array::Ptr DictionaryValues()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
+       RequireNotNull(self);
+
        ArrayData values;
        ObjectLock olock(self);
        for (const Dictionary::Pair& kv : self) {
index 757eb4e2de479ade4448cdbf8d9ef88a33f3e2eb..a11fde1c8a5e8e28f267a903d85b3adb5a637259 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->InvokeThis(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 8c42314d6a9169cdbb8e38b6f9abead2c5e7846c..3b198f6f7c328dbbbf44960ced777b6775780fa1 100644 (file)
@@ -29,6 +29,7 @@ static String ObjectToString()
 {
        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()
 {
        ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
        Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
+       RequireNotNull(self);
        return self->Clone();
 }
 
index e814228795ffa19f4298f257a968470375eead79..007ef3eb27bebb363351466ee29c5709cdb30d2a 100644 (file)
@@ -290,3 +290,9 @@ void icinga::DefaultObjectFactoryCheckArgs(const std::vector<Value>& args)
        if (!args.empty())
                BOOST_THROW_EXCEPTION(std::invalid_argument("Constructor does not take any arguments."));
 }
+
+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)));
+}
\ No newline at end of file
index bd1128f57ed9672969d78533379cfc85df812425..9904421e5aa317ad1862090e11b304a8580ff727 100644 (file)
@@ -57,6 +57,10 @@ extern Value Empty;
        DECLARE_PTR_TYPEDEFS(klass); \
        IMPL_TYPE_LOOKUP();
 
+#define RequireNotNull(ptr) RequireNotNullInternal(ptr, #ptr)
+
+void RequireNotNullInternal(const intrusive_ptr<Object>& object, const char *description);
+
 void DefaultObjectFactoryCheckArgs(const std::vector<Value>& args);
 
 template<typename T>
index 0a6cfbc1dd9fc0613b0a79fea99605ee42ce98cb..9cef98f55fbbd8c9e4e1bee06e84563e2ebef358 100644 (file)
@@ -35,6 +35,7 @@ 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, std::bind(&InvokeAttributeHandlerHelper, callback, _1, _2));
index 5d969e3f4cb683c282ff484d5da72e434f8c45a7..e1384e2c6389e4997e8242887dd0a1f3c59f1d70 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 d0c4fde8c9eee68586e25229af1c72aa24618b9f..f4dda9a35f13d363a4536efdc33f4127832e67c9 100644 (file)
@@ -37,6 +37,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())
@@ -436,6 +439,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, nullptr,
index 85604dd621bcae0ebb1fddb2fbdac30b19840ab8..b54a9ac75ad2bd59d226bc9a506ce25bb3284876 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 4bb1146907dad64b38aeeb31580c3a9f54147722..08e77b6e55b50d13b984b84de5270b3b414ce2c0 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 10378e64a4e25083563e9ba4cba3026fda770dff..32955f92c235d38db7cd846d1491fc2acc58bb20 100644 (file)
@@ -36,6 +36,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, DummyCheck, &DummyCheckTask::ScriptFunc, "c
 void DummyCheckTask::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 a808036de7d11ab354a3df78aac41d9d66bd6604..aabeb107c543a7c51a089df0ce57b4c471c1351f 100644 (file)
@@ -31,9 +31,12 @@ using namespace icinga;
 
 REGISTER_SCRIPTFUNCTION_NS(Internal, ExceptionCheck, &ExceptionCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
 
-void ExceptionCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
+void ExceptionCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
        const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
 {
+       RequireNotNull(checkable);
+       RequireNotNull(cr);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
index 16f58e71d294e08af691ed232b02c4b5750c0140..98056d3d46df40b19eee313054701eae64c0666f 100644 (file)
@@ -38,6 +38,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, IcingaCheck, &IcingaCheckTask::ScriptFunc,
 void IcingaCheckTask::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 64d64b03448c5981105593977501926a563a629a..0e6f641420403a4efa56eaf313584c682e2a2143 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;
 
@@ -47,5 +50,5 @@ void NullCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult:
        }));
        cr->SetState(ServiceOK);
 
-       service->ProcessCheckResult(cr);
+       checkable->ProcessCheckResult(cr);
 }
index d37e8a7b0b59cd7e7d7ac498ab3eef98cc0e235a..ab64a2f7e627ab3c8e41b84e2705574b781a86f8 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 18928fa20ff10375443faad78416552ef318edc3..885f81fbeae89f376ffd6fcb26948114079d1638 100644 (file)
@@ -36,6 +36,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 48b8881c23406ce472acdd8e8066cf4d0bfa339e..40cafb98eaea119092f5eaf84587f6b93af954a9 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 4e98aa4fb857d334af4402055910fed01b98d2a5..8566eda7f2321b0b8308cf1725e8806c995efb9e 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();
 
        auto type = static_cast<NotificationType>(itype);
index 0f55745f9a8e81d5fb95a1d56b1aade953ff33b9..d041b17f7ebda0a420da24db9b7a63067a8e6e11 100644 (file)
@@ -31,9 +31,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;
 
@@ -58,5 +61,5 @@ void RandomCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResul
 
        cr->SetState(static_cast<ServiceState>(Utility::Random() % 4));
 
-       service->ProcessCheckResult(cr);
+       checkable->ProcessCheckResult(cr);
 }
index cc4e9b51c1f63e47e786487046dc0ca04d1e6aaf..a6554b3ce78fb45323ed5590fa30a700718e4e58 100644 (file)
@@ -25,14 +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)
 {
+       RequireNotNull(tp);
+
        ArrayData segments;
 
        for (long t = begin / 60 - 1; t * 60 < end; t++) {