From: Gunnar Beutner Date: Tue, 13 Oct 2015 07:38:31 +0000 (+0200) Subject: Fix parsing performance data labels which contain '=' X-Git-Tag: v2.3.11~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d741ca6c7465768e14ee65015a7e45ae72646994;p=icinga2 Fix parsing performance data labels which contain '=' fixes #10254 --- diff --git a/lib/base/string.hpp b/lib/base/string.hpp index d0945be32..5d393f6f9 100644 --- a/lib/base/string.hpp +++ b/lib/base/string.hpp @@ -192,6 +192,16 @@ public: return m_Data.find_first_not_of(ch, pos); } + inline SizeType FindLastOf(const char *s, SizeType pos = NPos) const + { + return m_Data.find_last_of(s, pos); + } + + inline SizeType FindLastOf(char ch, SizeType pos = NPos) const + { + return m_Data.find_last_of(ch, pos); + } + inline String SubStr(SizeType first, SizeType len = NPos) const { return m_Data.substr(first, len); diff --git a/lib/icinga/perfdatavalue.cpp b/lib/icinga/perfdatavalue.cpp index b3e0ae1be..ae8e27f00 100644 --- a/lib/icinga/perfdatavalue.cpp +++ b/lib/icinga/perfdatavalue.cpp @@ -50,7 +50,7 @@ PerfdataValue::PerfdataValue(String label, double value, bool counter, PerfdataValue::Ptr PerfdataValue::Parse(const String& perfdata) { - size_t eqp = perfdata.FindFirstOf('='); + size_t eqp = perfdata.FindLastOf('='); if (eqp == String::NPos) BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid performance data value: " + perfdata));