mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibWeb: Fix infinite loop in CSS::Parser::parse_transition_value()
This commit is contained in:
parent
906c69c6d1
commit
87155c7b1d
Notes:
sideshowbarker
2024-07-18 02:13:10 +09:00
Author: https://github.com/mattco98 Commit: https://github.com/SerenityOS/serenity/commit/87155c7b1d Pull-request: https://github.com/SerenityOS/serenity/pull/23768
3 changed files with 30 additions and 8 deletions
|
@ -0,0 +1 @@
|
|||
PASS! (Did not crash/timeout)
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
#foo {
|
||||
transition: background-color 1s 2s linear,
|
||||
opacity,
|
||||
this is an invalid property value;
|
||||
}
|
||||
</style>
|
||||
<div id="foo"></div>
|
||||
<script src="../../include.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
println("PASS! (Did not crash/timeout)");
|
||||
});
|
||||
</script>
|
|
@ -5367,6 +5367,16 @@ RefPtr<StyleValue> Parser::parse_transition_value(TokenStream<ComponentValue>& t
|
|||
continue;
|
||||
}
|
||||
|
||||
if (auto easing = parse_easing_value(tokens)) {
|
||||
if (transition.easing) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has multiple easing values");
|
||||
return {};
|
||||
}
|
||||
|
||||
transition.easing = easing->as_easing();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tokens.peek_token().is(Token::Type::Ident)) {
|
||||
if (transition.property_name) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has multiple property identifiers");
|
||||
|
@ -5376,16 +5386,12 @@ RefPtr<StyleValue> Parser::parse_transition_value(TokenStream<ComponentValue>& t
|
|||
auto ident = tokens.next_token().token().ident();
|
||||
if (auto property = property_id_from_string(ident); property.has_value())
|
||||
transition.property_name = CustomIdentStyleValue::create(ident);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (auto easing = parse_easing_value(tokens)) {
|
||||
if (transition.easing) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has multiple easing values");
|
||||
return {};
|
||||
}
|
||||
|
||||
transition.easing = easing->as_easing();
|
||||
}
|
||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has unexpected token \"{}\"", tokens.peek_token().to_string());
|
||||
return {};
|
||||
}
|
||||
|
||||
if (!transition.property_name)
|
||||
|
|
Loading…
Add table
Reference in a new issue