فهرست منبع

LibWeb: Emit the current token before EOF on invalid comments

The spec for each of these state:

    -> EOF:
    This is an eof-in-comment parse error. Emit the current comment
    token. Emit an end-of-file token.

We were neglecting to emit the current comment token before emitting an
EOF token. Note the existing EMIT_CURRENT_TOKEN macro was unused.
Timothy Flynn 1 سال پیش
والد
کامیت
feddecde5b
1فایلهای تغییر یافته به همراه12 افزوده شده و 6 حذف شده
  1. 12 6
      Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp

+ 12 - 6
Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp

@@ -137,11 +137,17 @@ namespace Web::HTML {
         return m_queued_tokens.dequeue();               \
         return m_queued_tokens.dequeue();               \
     } while (0)
     } while (0)
 
 
-#define EMIT_CURRENT_TOKEN                              \
+#define EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF              \
     do {                                                \
     do {                                                \
         VERIFY(m_current_builder.is_empty());           \
         VERIFY(m_current_builder.is_empty());           \
         will_emit(m_current_token);                     \
         will_emit(m_current_token);                     \
         m_queued_tokens.enqueue(move(m_current_token)); \
         m_queued_tokens.enqueue(move(m_current_token)); \
+                                                        \
+        m_has_emitted_eof = true;                       \
+        create_new_token(HTMLToken::Type::EndOfFile);   \
+        will_emit(m_current_token);                     \
+        m_queued_tokens.enqueue(move(m_current_token)); \
+                                                        \
         return m_queued_tokens.dequeue();               \
         return m_queued_tokens.dequeue();               \
     } while (0)
     } while (0)
 
 
@@ -1428,7 +1434,7 @@ _StartOfFunction:
                 ON_EOF
                 ON_EOF
                 {
                 {
                     log_parse_error();
                     log_parse_error();
-                    EMIT_EOF;
+                    EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF;
                 }
                 }
                 ANYTHING_ELSE
                 ANYTHING_ELSE
                 {
                 {
@@ -1460,7 +1466,7 @@ _StartOfFunction:
                 {
                 {
                     log_parse_error();
                     log_parse_error();
                     m_current_token.set_comment(consume_current_builder());
                     m_current_token.set_comment(consume_current_builder());
-                    EMIT_EOF;
+                    EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF;
                 }
                 }
                 ANYTHING_ELSE
                 ANYTHING_ELSE
                 {
                 {
@@ -1491,7 +1497,7 @@ _StartOfFunction:
                 {
                 {
                     log_parse_error();
                     log_parse_error();
                     m_current_token.set_comment(consume_current_builder());
                     m_current_token.set_comment(consume_current_builder());
-                    EMIT_EOF;
+                    EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF;
                 }
                 }
                 ANYTHING_ELSE
                 ANYTHING_ELSE
                 {
                 {
@@ -1519,7 +1525,7 @@ _StartOfFunction:
                 {
                 {
                     log_parse_error();
                     log_parse_error();
                     m_current_token.set_comment(consume_current_builder());
                     m_current_token.set_comment(consume_current_builder());
-                    EMIT_EOF;
+                    EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF;
                 }
                 }
                 ANYTHING_ELSE
                 ANYTHING_ELSE
                 {
                 {
@@ -1540,7 +1546,7 @@ _StartOfFunction:
                 {
                 {
                     log_parse_error();
                     log_parse_error();
                     m_current_token.set_comment(consume_current_builder());
                     m_current_token.set_comment(consume_current_builder());
-                    EMIT_EOF;
+                    EMIT_CURRENT_TOKEN_FOLLOWED_BY_EOF;
                 }
                 }
                 ANYTHING_ELSE
                 ANYTHING_ELSE
                 {
                 {