diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp index 9834a643e..82470822f 100644 --- a/lib/base/utility.cpp +++ b/lib/base/utility.cpp @@ -939,7 +939,7 @@ String Utility::NaturalJoin(const std::vector& tokens) return result; } -String Utility::Join(const Array::Ptr& tokens, char separator) +String Utility::Join(const Array::Ptr& tokens, char separator, bool escapeSeparator) { String result; bool first = true; @@ -947,15 +947,18 @@ String Utility::Join(const Array::Ptr& tokens, char separator) ObjectLock olock(tokens); BOOST_FOREACH(const Value& vtoken, tokens) { String token = Convert::ToString(vtoken); - boost::algorithm::replace_all(token, "\\", "\\\\"); - char sep_before[2], sep_after[3]; - sep_before[0] = separator; - sep_before[1] = '\0'; - sep_after[0] = '\\'; - sep_after[1] = separator; - sep_after[2] = '\0'; - boost::algorithm::replace_all(token, sep_before, sep_after); + if (escapeSeparator) { + boost::algorithm::replace_all(token, "\\", "\\\\"); + + char sep_before[2], sep_after[3]; + sep_before[0] = separator; + sep_before[1] = '\0'; + sep_after[0] = '\\'; + sep_after[1] = separator; + sep_after[2] = '\0'; + boost::algorithm::replace_all(token, sep_before, sep_after); + } if (first) first = false; diff --git a/lib/base/utility.hpp b/lib/base/utility.hpp index ea5bf3f12..0e1fcc29f 100644 --- a/lib/base/utility.hpp +++ b/lib/base/utility.hpp @@ -89,7 +89,7 @@ public: static void QueueAsyncCallback(const boost::function& callback, SchedulerPolicy policy = DefaultScheduler); static String NaturalJoin(const std::vector& tokens); - static String Join(const Array::Ptr& tokens, char separator); + static String Join(const Array::Ptr& tokens, char separator, bool escapeSeparator = true); static String FormatDuration(double duration); static String FormatDateTime(const char *format, double ts); diff --git a/lib/perfdata/influxdbwriter.cpp b/lib/perfdata/influxdbwriter.cpp index 6eb8d0091..239db8995 100644 --- a/lib/perfdata/influxdbwriter.cpp +++ b/lib/perfdata/influxdbwriter.cpp @@ -235,6 +235,8 @@ String InfluxdbWriter::EscapeKey(const String& str) { // Iterate over the key name and escape commas and spaces with a backslash String result = str; + boost::algorithm::replace_all(result, "\"", "\\\""); + boost::algorithm::replace_all(result, "=", "\\="); boost::algorithm::replace_all(result, ",", "\\,"); boost::algorithm::replace_all(result, " ", "\\ "); @@ -366,7 +368,7 @@ void InfluxdbWriter::Flush(void) // Ensure you hold a lock against m_DataBuffer so that things // don't go missing after creating the body and clearing the buffer - String body = Utility::Join(m_DataBuffer, '\n'); + String body = Utility::Join(m_DataBuffer, '\n', false); m_DataBuffer->Clear(); HttpRequest req(stream);