Merge pull request #942 from MihailRis/xml-fixes

fix xml escapes in attribute values
This commit is contained in:
MihailRis 2026-08-22 17:33:21 +03:00 • committed by GitHub
commit e229c1ebb9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -208,6 +208,14 @@ namespace {
class Parser : BasicParser<char> {
std::unique_ptr<Document> document;
void processEscapes(std::string& text) {
util::replaceAll(text, "&quot;", "\"");
util::replaceAll(text, "&apos;", "'");
util::replaceAll(text, "&lt;", "<");
util::replaceAll(text, "&gt;", ">");
util::replaceAll(text, "&amp;", "&");
}
std::unique_ptr<Node> parseOpenTag() {
std::string tag = parseXMLName();
auto node = std::make_unique<Node>(tag);
@ -230,6 +238,7 @@ class Parser : BasicParser<char> {
}
skip(1);
attrtext = parseString(quote);
processEscapes(attrtext);
}
node->set(attrname, attrtext);
}
@ -241,11 +250,7 @@ class Parser : BasicParser<char> {
if (peek() != '<') {
auto element = std::make_unique<Node>("#");
auto text = parseText();
util::replaceAll(text, "&quot;", "\"");
util::replaceAll(text, "&apos;", "'");
util::replaceAll(text, "&lt;", "<");
util::replaceAll(text, "&gt;", ">");
util::replaceAll(text, "&amp;", "&");
processEscapes(text);
element->set("#", text);
return element;
}