mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-30 16:28:48 +00:00
LibWeb: Treat '<' characters as part of the text inside <script>
When we encounter a '<' during HTML parsing, we now look ahead to see if there is a full </script> coming, otherwise we treat it as text. This makes it possible to use '<' in inline scripts. :^)
This commit is contained in:
parent
fc5067afd2
commit
42f47da75d
Notes:
sideshowbarker
2024-07-19 07:56:07 +09:00
Author: https://github.com/awesomekling
Commit: 42f47da75d
1 changed files with 19 additions and 4 deletions
|
@ -174,10 +174,26 @@ static bool parse_html_document(const StringView& html, Document& document, Pare
|
|||
switch (state) {
|
||||
case State::Free:
|
||||
if (ch == '<') {
|
||||
is_slash_tag = false;
|
||||
move_to_state(State::BeforeTagName);
|
||||
break;
|
||||
bool should_treat_as_text = false;
|
||||
if (node_stack.last().tag_name() == "script") {
|
||||
bool is_script_close_tag = peek(1) == '/'
|
||||
&& tolower(peek(2)) == 's'
|
||||
&& tolower(peek(3)) == 'c'
|
||||
&& tolower(peek(4)) == 'r'
|
||||
&& tolower(peek(5)) == 'i'
|
||||
&& tolower(peek(6)) == 'p'
|
||||
&& tolower(peek(7)) == 't'
|
||||
&& tolower(peek(8)) == '>';
|
||||
if (!is_script_close_tag)
|
||||
should_treat_as_text = true;
|
||||
}
|
||||
if (!should_treat_as_text) {
|
||||
is_slash_tag = false;
|
||||
move_to_state(State::BeforeTagName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ch != '&') {
|
||||
text_buffer.append(ch);
|
||||
} else {
|
||||
|
@ -394,5 +410,4 @@ RefPtr<Document> parse_html_document(const StringView& html, const URL& url)
|
|||
|
||||
return document;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue