mirror of https://github.com/Icinga/icinga2.git
Do not escape backslashes and separators twice
fixes #12227 Signed-off-by: Gunnar Beutner <gunnar.beutner@netways.de>
This commit is contained in:
parent
162e31b083
commit
5c0b3c58bd
|
@ -939,7 +939,7 @@ String Utility::NaturalJoin(const std::vector<String>& 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;
|
||||
|
|
|
@ -89,7 +89,7 @@ public:
|
|||
static void QueueAsyncCallback(const boost::function<void (void)>& callback, SchedulerPolicy policy = DefaultScheduler);
|
||||
|
||||
static String NaturalJoin(const std::vector<String>& 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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue