Skip to content

Commit

Permalink
LibWeb: Fix extra validation for EasingStyleValue intervals
Browse files Browse the repository at this point in the history
(cherry picked from commit b342758dbf8d1138353db89708964e75b9128400)
  • Loading branch information
shlyakpavel authored and nico committed Nov 25, 2024
1 parent dad7557 commit fcb45f4
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Computed animation-timing-function: ease
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<style>
@keyframes test-animation {
from {
transform: translateX(0);
}
to {
transform: translateX(100px);
}
}

.animate {
animation: test-animation 2s steps(1, jump-none) infinite;
}
</style>
<div class="box animate" style="width: 50px; height: 50px; background-color: red;"></div>
<script src="../../include.js"></script>
<script>
test(() => {
// Apply animation dynamically to trigger re-computation.
document.querySelector('.box').classList.add('animate');

// Log computed style to confirm the animation is parsed and applied correctly.
const animation = getComputedStyle(document.querySelector('.box')).animationTimingFunction;
println('Computed animation-timing-function: ' + animation);
});
</script>
10 changes: 5 additions & 5 deletions Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6824,13 +6824,13 @@ RefPtr<CSSStyleValue> Parser::parse_easing_value(TokenStream<ComponentValue>& to
}

// Perform extra validation
// https://drafts.csswg.org/css-easing/#funcdef-step-easing-function-steps
// The first parameter specifies the number of intervals in the function. It must be a positive integer greater than 0
// unless the second parameter is jump-none in which case it must be a positive integer greater than 1.
// https://drafts.csswg.org/css-easing/#step-easing-functions
// If the <step-position> is jump-none, the <integer> must be at least 2, or the function is invalid.
// Otherwise, the <integer> must be at least 1, or the function is invalid.
if (steps.position == EasingStyleValue::Steps::Position::JumpNone) {
if (intervals < 1)
if (intervals <= 1)
return nullptr;
} else if (intervals < 0) {
} else if (intervals <= 0) {
return nullptr;
}

Expand Down

0 comments on commit fcb45f4

Please sign in to comment.