diff --git a/Tests/LibWeb/Layout/expected/grid/grid-area-non-token-parts-crash.txt b/Tests/LibWeb/Layout/expected/grid/grid-area-non-token-parts-crash.txt new file mode 100644 index 0000000000..9c6f931a1f --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/grid-area-non-token-parts-crash.txt @@ -0,0 +1,12 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x0 children: not-inline + BlockContainer
at (8,8) content-size 784x0 children: not-inline + BlockContainer <(anonymous)> at (8,16) content-size 784x0 children: inline + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x600] + PaintableWithLines (BlockContainer) [8,8 784x0] overflow: [8,16 784x0] + PaintableWithLines (BlockContainer
) [8,8 784x0] + PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0] diff --git a/Tests/LibWeb/Layout/input/grid/grid-area-non-token-parts-crash.html b/Tests/LibWeb/Layout/input/grid/grid-area-non-token-parts-crash.html new file mode 100644 index 0000000000..dd591aad13 --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/grid-area-non-token-parts-crash.html @@ -0,0 +1 @@ +
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 70d2a9f93e..49b04d3b9f 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5520,18 +5520,17 @@ RefPtr Parser::parse_grid_track_size_list_shorthand_value(PropertyID RefPtr Parser::parse_grid_area_shorthand_value(Vector const& component_values) { auto tokens = TokenStream { component_values }; - Token current_token; auto parse_placement_tokens = [&](Vector& placement_tokens, bool check_for_delimiter = true) -> void { - current_token = tokens.next_token().token(); + auto current_token = tokens.next_token(); while (true) { - if (check_for_delimiter && current_token.is(Token::Type::Delim) && current_token.delim() == "/"sv) + if (check_for_delimiter && current_token.is_delim('/')) break; placement_tokens.append(current_token); tokens.skip_whitespace(); if (!tokens.has_next_token()) break; - current_token = tokens.next_token().token(); + current_token = tokens.next_token(); } };