]> granicus.if.org Git - icinga2/commitdiff
Fix crash in CheckResult cluster handlers
authorMichael Friedrich <michael.friedrich@icinga.com>
Thu, 10 Nov 2016 19:00:38 +0000 (20:00 +0100)
committerMichael Friedrich <michael.friedrich@icinga.com>
Fri, 11 Nov 2016 15:29:51 +0000 (16:29 +0100)
fixes #13151

lib/icinga/clusterevents.cpp

index 2e15fdb3f95bc8e0bfab7280ae2a4a9a6d401c70..1f09523562c974e7f032435fd2a8231c8dd3f8ce 100644 (file)
@@ -132,9 +132,15 @@ Value ClusterEvents::CheckResultAPIHandler(const MessageOrigin::Ptr& origin, con
        if (params->Contains("cr")) {
                cr = new CheckResult();
                Dictionary::Ptr vcr = params->Get("cr");
-               vperf = vcr->Get("performance_data");
-               vcr->Remove("performance_data");
-               Deserialize(cr, vcr, true);
+
+               if (vcr && vcr->Contains("performance_data")) {
+                       vperf = vcr->Get("performance_data");
+
+                       if (vperf)
+                               vcr->Remove("performance_data");
+
+                       Deserialize(cr, vcr, true);
+               }
        }
 
        if (!cr)
@@ -833,13 +839,20 @@ Value ClusterEvents::SendNotificationsAPIHandler(const MessageOrigin::Ptr& origi
        }
 
        CheckResult::Ptr cr;
+       Array::Ptr vperf;
 
        if (params->Contains("cr")) {
                cr = new CheckResult();
                Dictionary::Ptr vcr = params->Get("cr");
-               Array::Ptr vperf = vcr->Get("performance_data");
-               vcr->Remove("performance_data");
-               Deserialize(cr, vcr, true);
+
+               if (vcr && vcr->Contains("performance_data")) {
+                       vperf = vcr->Get("performance_data");
+
+                       if (vperf)
+                               vcr->Remove("performance_data");
+
+                       Deserialize(cr, vcr, true);
+               }
        }
 
        NotificationType type = static_cast<NotificationType>(static_cast<int>(params->Get("type")));
@@ -919,13 +932,20 @@ Value ClusterEvents::NotificationSentUserAPIHandler(const MessageOrigin::Ptr& or
        }
 
        CheckResult::Ptr cr;
+       Array::Ptr vperf;
 
        if (params->Contains("cr")) {
                cr = new CheckResult();
                Dictionary::Ptr vcr = params->Get("cr");
-               Array::Ptr vperf = vcr->Get("performance_data");
-               vcr->Remove("performance_data");
-               Deserialize(cr, vcr, true);
+
+               if (vcr && vcr->Contains("performance_data")) {
+                       vperf = vcr->Get("performance_data");
+
+                       if (vperf)
+                               vcr->Remove("performance_data");
+
+                       Deserialize(cr, vcr, true);
+               }
        }
 
        NotificationType type = static_cast<NotificationType>(static_cast<int>(params->Get("type")));
@@ -1027,13 +1047,20 @@ Value ClusterEvents::NotificationSentToAllUsersAPIHandler(const MessageOrigin::P
        }
 
        CheckResult::Ptr cr;
+       Array::Ptr vperf;
 
        if (params->Contains("cr")) {
                cr = new CheckResult();
                Dictionary::Ptr vcr = params->Get("cr");
-               Array::Ptr vperf = vcr->Get("performance_data");
-               vcr->Remove("performance_data");
-               Deserialize(cr, vcr, true);
+
+               if (vcr && vcr->Contains("performance_data")) {
+                       vperf = vcr->Get("performance_data");
+
+                       if (vperf)
+                               vcr->Remove("performance_data");
+
+                       Deserialize(cr, vcr, true);
+               }
        }
 
        NotificationType type = static_cast<NotificationType>(static_cast<int>(params->Get("type")));