Sfoglia il codice sorgente

LibWeb: Verify that the Tokenizer doesn't produce Dimensions from %

If `12.34%` ever produces a Dimension token instead of a Percentage,
then something has gone wrong and we want to know about it!
Sam Atkins 3 anni fa
parent
commit
d37f62fd54
1 ha cambiato i file con 4 aggiunte e 3 eliminazioni
  1. 4 3
      Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

+ 4 - 3
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -1905,9 +1905,7 @@ Optional<Length> Parser::parse_length(StyleComponentValueRule const& component_v
         numeric_value = component_value.token().dimension_value();
         numeric_value = component_value.token().dimension_value();
         auto unit_string = component_value.token().m_unit.string_view();
         auto unit_string = component_value.token().m_unit.string_view();
 
 
-        if (unit_string.equals_ignoring_case("%")) {
-            type = Length::Type::Percentage;
-        } else if (unit_string.equals_ignoring_case("px")) {
+        if (unit_string.equals_ignoring_case("px")) {
             type = Length::Type::Px;
             type = Length::Type::Px;
         } else if (unit_string.equals_ignoring_case("pt")) {
         } else if (unit_string.equals_ignoring_case("pt")) {
             type = Length::Type::Pt;
             type = Length::Type::Pt;
@@ -1937,6 +1935,9 @@ Optional<Length> Parser::parse_length(StyleComponentValueRule const& component_v
             type = Length::Type::In;
             type = Length::Type::In;
         } else if (unit_string.equals_ignoring_case("Q")) {
         } else if (unit_string.equals_ignoring_case("Q")) {
             type = Length::Type::Q;
             type = Length::Type::Q;
+        } else if (unit_string.equals_ignoring_case("%")) {
+            // A number followed by `%` must always result in a Percentage token.
+            VERIFY_NOT_REACHED();
         } else {
         } else {
             return {};
             return {};
         }
         }