diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/XML.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/core/XML.cpp b/src/core/XML.cpp index a610daa..9c23e3b 100644 --- a/src/core/XML.cpp +++ b/src/core/XML.cpp @@ -16,6 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <sstream> + #include <core/common/Rtti.hpp> #include "XML.hpp" @@ -71,6 +73,33 @@ void Element::doSerialize(std::ostream &out, unsigned int tabdepth, bool pretty) } } +static std::string escapePredefinedEntities(const std::string &input) +{ + std::stringstream ss; + for (const char &c : input) { + switch (c) { + case '<': + ss << "<"; + break; + case '>': + ss << ">"; + break; + case '&': + ss << "&"; + break; + case '\'': + ss << "'"; + break; + case '\"': + ss << """; + break; + default: + ss << c; + } + } + return std::move(ss.str()); +} + void Text::doSerialize(std::ostream &out, unsigned int tabdepth, bool pretty) { if (pretty) { @@ -78,7 +107,7 @@ void Text::doSerialize(std::ostream &out, unsigned int tabdepth, bool pretty) out << '\t'; } } - out << text; + out << escapePredefinedEntities(text); if (pretty) { out << '\n'; } |