diff --git a/Libraries/LibWeb/Parser/HTMLParser.cpp b/Libraries/LibWeb/Parser/HTMLParser.cpp
index c21fd30806..359121ab46 100644
--- a/Libraries/LibWeb/Parser/HTMLParser.cpp
+++ b/Libraries/LibWeb/Parser/HTMLParser.cpp
@@ -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 parse_html_document(const StringView& html, const URL& url)
return document;
}
-
}