From be6abce44f5a7d6601b2238f6a136cc8dcc7e558 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 6 Jun 2020 16:32:27 +0200 Subject: [PATCH] LibWeb: Handle EOF tokens during "text" insertion --- Libraries/LibWeb/DOM/HTMLScriptElement.h | 1 + Libraries/LibWeb/Parser/HTMLDocumentParser.cpp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/Libraries/LibWeb/DOM/HTMLScriptElement.h b/Libraries/LibWeb/DOM/HTMLScriptElement.h index f5bfe82286b..9aba63d8659 100644 --- a/Libraries/LibWeb/DOM/HTMLScriptElement.h +++ b/Libraries/LibWeb/DOM/HTMLScriptElement.h @@ -44,6 +44,7 @@ public: void set_parser_document(Badge, Document&); void set_non_blocking(Badge, bool); + void set_already_started(Badge, bool b) { m_already_started = b; } void prepare_script(Badge); void execute_script(); diff --git a/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp b/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp index 31747bf6096..15b57ccfce1 100644 --- a/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp +++ b/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp @@ -1431,6 +1431,15 @@ void HTMLDocumentParser::handle_text(HTMLToken& token) insert_character(token.codepoint()); return; } + if (token.is_end_of_file()) { + PARSE_ERROR(); + if (current_node().tag_name() == "script") + to(current_node()).set_already_started({}, true); + m_stack_of_open_elements.pop(); + m_insertion_mode = m_original_insertion_mode; + process_using_the_rules_for(m_insertion_mode, token); + return; + } if (token.is_end_tag() && token.tag_name() == "script") { NonnullRefPtr script = to(current_node()); m_stack_of_open_elements.pop();