mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-26 04:02:27 +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: 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;
|
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 (tokens.peek_token().is(Token::Type::Ident)) {
|
||||||
if (transition.property_name) {
|
if (transition.property_name) {
|
||||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has multiple property identifiers");
|
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();
|
auto ident = tokens.next_token().token().ident();
|
||||||
if (auto property = property_id_from_string(ident); property.has_value())
|
if (auto property = property_id_from_string(ident); property.has_value())
|
||||||
transition.property_name = CustomIdentStyleValue::create(ident);
|
transition.property_name = CustomIdentStyleValue::create(ident);
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto easing = parse_easing_value(tokens)) {
|
dbgln_if(CSS_PARSER_DEBUG, "Transition property has unexpected token \"{}\"", tokens.peek_token().to_string());
|
||||||
if (transition.easing) {
|
return {};
|
||||||
dbgln_if(CSS_PARSER_DEBUG, "Transition property has multiple easing values");
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
transition.easing = easing->as_easing();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!transition.property_name)
|
if (!transition.property_name)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue