From 415b810abf705f6b744f09553ea6293392f484e1 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Tue, 27 Jun 2023 12:53:08 +0200 Subject: [PATCH] IcingaDB::PrepareObject(): round Notification#times.{begin,end} not to crash Go daemon The latter expects ints, not floats - not to mention strings. Luckily Icinga already enforces numeric strings so that we can cast it to number. --- lib/icingadb/icingadb-objects.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/icingadb/icingadb-objects.cpp b/lib/icingadb/icingadb-objects.cpp index 7a306c35a..9f5d2e3cc 100644 --- a/lib/icingadb/icingadb-objects.cpp +++ b/lib/icingadb/icingadb-objects.cpp @@ -1383,8 +1383,16 @@ bool IcingaDB::PrepareObject(const ConfigObject::Ptr& object, Dictionary::Ptr& a attributes->Set("timeperiod_id", GetObjectIdentifier(timeperiod)); if (notification->GetTimes()) { - attributes->Set("times_begin", notification->GetTimes()->Get("begin")); - attributes->Set("times_end",notification->GetTimes()->Get("end")); + auto begin (notification->GetTimes()->Get("begin")); + auto end (notification->GetTimes()->Get("end")); + + if (begin != Empty) { + attributes->Set("times_begin", std::round((double)begin)); + } + + if (end != Empty) { + attributes->Set("times_end", std::round((double)end)); + } } attributes->Set("notification_interval", notification->GetInterval());