From: Jean Flach Date: Tue, 9 Feb 2016 08:38:12 +0000 (+0100) Subject: Refactor String-Escape in repositoryutility X-Git-Tag: v2.5.0~542 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4d87c96d0692c28b403a820ed9fe6c249b54b549;p=icinga2 Refactor String-Escape in repositoryutility fixes #10989 --- diff --git a/lib/base/configwriter.hpp b/lib/base/configwriter.hpp index 7f746e6af..bc7862a48 100644 --- a/lib/base/configwriter.hpp +++ b/lib/base/configwriter.hpp @@ -73,10 +73,9 @@ public: static void EmitFunctionCall(std::ostream& fp, const String& name, const Array::Ptr& arguments); static const std::vector& GetKeywords(void); + static String EscapeIcingaString(const String& str); private: ConfigWriter(void); - - static String EscapeIcingaString(const String& str); }; } diff --git a/lib/cli/repositoryutility.cpp b/lib/cli/repositoryutility.cpp index eabe0bba5..1f028a948 100644 --- a/lib/cli/repositoryutility.cpp +++ b/lib/cli/repositoryutility.cpp @@ -22,6 +22,7 @@ #include "base/logger.hpp" #include "base/application.hpp" #include "base/convert.hpp" +#include "base/configwriter.hpp" #include "base/scriptglobal.hpp" #include "base/json.hpp" #include "base/netstring.hpp" @@ -683,7 +684,7 @@ void RepositoryUtility::FormatChangelogEntry(std::ostream& fp, const Dictionary: */ void RepositoryUtility::SerializeObject(std::ostream& fp, const String& name, const String& type, const Dictionary::Ptr& object) { - fp << "object " << type << " \"" << EscapeIcingaString(name) << "\" {\n"; + fp << "object " << type << " \"" << ConfigWriter::EscapeIcingaString(name) << "\" {\n"; if (!object) { fp << "}\n"; @@ -712,19 +713,6 @@ void RepositoryUtility::SerializeObject(std::ostream& fp, const String& name, co fp << "}\n"; } -String RepositoryUtility::EscapeIcingaString(const String& str) -{ - String result = str; - boost::algorithm::replace_all(result, "\\", "\\\\"); - boost::algorithm::replace_all(result, "\n", "\\n"); - boost::algorithm::replace_all(result, "\t", "\\t"); - boost::algorithm::replace_all(result, "\r", "\\r"); - boost::algorithm::replace_all(result, "\b", "\\b"); - boost::algorithm::replace_all(result, "\f", "\\f"); - boost::algorithm::replace_all(result, "\"", "\\\""); - return result; -} - void RepositoryUtility::FormatValue(std::ostream& fp, const Value& val) { if (val.IsObjectType()) { @@ -733,11 +721,11 @@ void RepositoryUtility::FormatValue(std::ostream& fp, const Value& val) } if (val.IsString()) { - fp << "\"" << EscapeIcingaString(val) << "\""; + fp << "\"" << ConfigWriter::EscapeIcingaString(val) << "\""; return; } - fp << EscapeIcingaString(val); + fp << ConfigWriter::EscapeIcingaString(val); } void RepositoryUtility::FormatArray(std::ostream& fp, const Array::Ptr& arr) diff --git a/lib/cli/repositoryutility.hpp b/lib/cli/repositoryutility.hpp index 02ea03dff..23d2a6926 100644 --- a/lib/cli/repositoryutility.hpp +++ b/lib/cli/repositoryutility.hpp @@ -96,7 +96,6 @@ private: /* config print helpers */ static void SerializeObject(std::ostream& fp, const String& name, const String& type, const Dictionary::Ptr& object); - static String EscapeIcingaString(const String& str); static void FormatValue(std::ostream& fp, const Value& val); static void FormatArray(std::ostream& fp, const Array::Ptr& arr);