diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp
index 0f542730c..10a8d3cd5 100644
--- a/lib/symboldatabase.cpp
+++ b/lib/symboldatabase.cpp
@@ -2074,6 +2074,32 @@ void SymbolDatabase::printOut(const char *title) const
}
}
+static std::string toxml(const std::string &str)
+{
+ std::ostringstream xml;
+ for (std::size_t i = 0U; i < str.length(); i++) {
+ char c = str[i];
+ switch (c) {
+ case '<':
+ xml << "<";
+ break;
+ case '>':
+ xml << ">";
+ break;
+ case '&':
+ xml << "&";
+ break;
+ case '\"':
+ xml << """;
+ break;
+ default:
+ xml << c;
+ break;
+ }
+ }
+ return xml.str();
+}
+
void SymbolDatabase::printXml(std::ostream &out) const
{
// Scopes..
@@ -2083,7 +2109,7 @@ void SymbolDatabase::printXml(std::ostream &out) const
out << " id=\"" << &*scope << "\"";
out << " type=\"" << scope->type << "\"";
if (!scope->className.empty())
- out << " className=\"" << scope->className << "\"";
+ out << " className=\"" << toxml(scope->className) << "\"";
if (scope->nestedIn)
out << " nestedIn=\"" << scope->nestedIn << "\"";
if (scope->functionList.empty() && scope->varlist.empty()) {
@@ -2107,14 +2133,14 @@ void SymbolDatabase::printXml(std::ostream &out) const
}
out << " " << std::endl;
}
+ if (!scope->varlist.empty()) {
+ out << " " << std::endl;
+ for (std::list::const_iterator var = scope->varlist.begin(); var != scope->varlist.end(); ++var)
+ out << " " << std::endl;
+ out << " " << std::endl;
+ }
+ out << " " << std::endl;
}
- if (!scope->varlist.empty()) {
- out << " " << std::endl;
- for (std::list::const_iterator var = scope->varlist.begin(); var != scope->varlist.end(); ++var)
- out << " " << std::endl;
- out << " " << std::endl;
- }
- out << " " << std::endl;
}
out << " " << std::endl;