mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 12:05:15 +00:00
LibHTML+IRCClient: Add an escape_html_entities() helper
This simple helper escapes '<', '>' and '&' so they can be used in HTML text without interfering with the parser. Use this in IRCClient to prevent incoming messages from messing with the DOM :^)
This commit is contained in:
parent
d17930d9e2
commit
a377e8d3f5
Notes:
sideshowbarker
2024-07-19 11:20:30 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/a377e8d3f53
3 changed files with 19 additions and 2 deletions
|
@ -54,7 +54,7 @@ void IRCLogBuffer::add_message(char prefix, const String& name, const String& te
|
|||
color.to_string().characters(),
|
||||
timestamp_string().characters(),
|
||||
nick_string.characters(),
|
||||
text.characters());
|
||||
escape_html_entities(text).characters());
|
||||
auto fragment = parse_html_fragment(*m_document, html);
|
||||
m_container_element->append_child(fragment->remove_child(*fragment->first_child()));
|
||||
m_document->force_layout();
|
||||
|
@ -69,7 +69,7 @@ void IRCLogBuffer::add_message(const String& text, Color color)
|
|||
"</div>",
|
||||
color.to_string().characters(),
|
||||
timestamp_string().characters(),
|
||||
text.characters());
|
||||
escape_html_entities(text).characters());
|
||||
auto fragment = parse_html_fragment(*m_document, html);
|
||||
m_container_element->append_child(fragment->remove_child(*fragment->first_child()));
|
||||
m_document->force_layout();
|
||||
|
|
|
@ -339,3 +339,19 @@ RefPtr<Document> parse_html_document(const StringView& html, const URL& url)
|
|||
|
||||
return document;
|
||||
}
|
||||
|
||||
String escape_html_entities(const StringView& html)
|
||||
{
|
||||
StringBuilder builder;
|
||||
for (int i = 0; i < html.length(); ++i) {
|
||||
if (html[i] == '<')
|
||||
builder.append("<");
|
||||
else if (html[i] == '>')
|
||||
builder.append(">");
|
||||
else if (html[i] == '&')
|
||||
builder.append("&");
|
||||
else
|
||||
builder.append(html[i]);
|
||||
}
|
||||
return builder.to_string();
|
||||
}
|
||||
|
|
|
@ -7,3 +7,4 @@ class DocumentFragment;
|
|||
|
||||
RefPtr<Document> parse_html_document(const StringView&, const URL& = URL());
|
||||
RefPtr<DocumentFragment> parse_html_fragment(Document&, const StringView&);
|
||||
String escape_html_entities(const StringView&);
|
||||
|
|
Loading…
Add table
Reference in a new issue