Sfoglia il codice sorgente

LibWeb: Fix parsing of "<textarea></textarea>"

When handling a "textarea" start tag, we have to ignore the next token
if it's an LF ('\n'). However, we were not switching the tokenizer
state before fetching the lookahead token, and this caused us to force
the tokenizer into the RCDATA state too late, effectively getting it
stuck in that state for way longer than it should be.

Fixes #2508.
Andreas Kling 5 anni fa
parent
commit
b4591f0037
1 ha cambiato i file con 2 aggiunte e 1 eliminazioni
  1. 2 1
      Libraries/LibWeb/Parser/HTMLDocumentParser.cpp

+ 2 - 1
Libraries/LibWeb/Parser/HTMLDocumentParser.cpp

@@ -1283,12 +1283,13 @@ void HTMLDocumentParser::handle_in_body(HTMLToken& token)
     if (token.is_start_tag() && token.tag_name() == "textarea") {
         insert_html_element(token);
 
+        m_tokenizer.switch_to({}, HTMLTokenizer::State::RCDATA);
+
         // If the next token is a U+000A LINE FEED (LF) character token,
         // then ignore that token and move on to the next one.
         // (Newlines at the start of pre blocks are ignored as an authoring convenience.)
         auto next_token = m_tokenizer.next_token();
 
-        m_tokenizer.switch_to({}, HTMLTokenizer::State::RCDATA);
         m_original_insertion_mode = m_insertion_mode;
         m_frameset_ok = false;
         m_insertion_mode = InsertionMode::Text;