Use XML-sanitized strings when serializing stanzas for the XMPP server
This commit is contained in:
@@ -97,6 +97,14 @@ int main()
|
|||||||
});
|
});
|
||||||
xml.feed(doc.data(), doc.size(), true);
|
xml.feed(doc.data(), doc.size(), true);
|
||||||
|
|
||||||
|
const std::string doc2 = "<stream xmlns='s'><stanza>coucou\r\n\a</stanza></stream>";
|
||||||
|
xml.add_stanza_callback([](const Stanza& stanza)
|
||||||
|
{
|
||||||
|
std::cout << stanza.to_string() << std::endl;
|
||||||
|
assert(stanza.get_inner() == "coucou\r\n");
|
||||||
|
});
|
||||||
|
xml.feed(doc2.data(), doc.size(), true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XML escape/escape
|
* XML escape/escape
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -192,12 +192,13 @@ std::string XmlNode::to_string() const
|
|||||||
std::string res("<");
|
std::string res("<");
|
||||||
res += this->name;
|
res += this->name;
|
||||||
for (const auto& it: this->attributes)
|
for (const auto& it: this->attributes)
|
||||||
res += " " + it.first + "='" + it.second + "'";
|
res += " " + utils::remove_invalid_xml_chars(it.first) + "='" +
|
||||||
|
utils::remove_invalid_xml_chars(it.second) + "'";
|
||||||
if (this->closed && !this->has_children() && this->inner.empty())
|
if (this->closed && !this->has_children() && this->inner.empty())
|
||||||
res += "/>";
|
res += "/>";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res += ">" + this->inner;
|
res += ">" + utils::remove_invalid_xml_chars(this->inner);
|
||||||
for (const auto& child: this->children)
|
for (const auto& child: this->children)
|
||||||
res += child->to_string();
|
res += child->to_string();
|
||||||
if (this->closed)
|
if (this->closed)
|
||||||
@@ -205,7 +206,7 @@ std::string XmlNode::to_string() const
|
|||||||
res += "</" + this->name + ">";
|
res += "</" + this->name + ">";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res += this->tail;
|
res += utils::remove_invalid_xml_chars(this->tail);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user