mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 20:29:18 +00:00
LibWeb: Avoid division by zero with small aspect ratios
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This commit is contained in:
parent
cd0074528e
commit
5478361ba0
Notes:
github-actions[bot]
2025-07-13 03:42:58 +00:00
Author: https://github.com/tcl3
Commit: 5478361ba0
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5421
Reviewed-by: https://github.com/kalenikaliaksandr
4 changed files with 18 additions and 7 deletions
|
@ -1609,6 +1609,8 @@ CSSPixels FormattingContext::calculate_inner_width(Layout::Box const& box, Avail
|
||||||
CSSPixels FormattingContext::calculate_inner_height(Box const& box, AvailableSpace const& available_space, CSS::Size const& height) const
|
CSSPixels FormattingContext::calculate_inner_height(Box const& box, AvailableSpace const& available_space, CSS::Size const& height) const
|
||||||
{
|
{
|
||||||
if (height.is_auto() && box.has_preferred_aspect_ratio()) {
|
if (height.is_auto() && box.has_preferred_aspect_ratio()) {
|
||||||
|
if (*box.preferred_aspect_ratio() == 0)
|
||||||
|
return CSSPixels(0);
|
||||||
return m_state.get(box).content_width() / *box.preferred_aspect_ratio();
|
return m_state.get(box).content_width() / *box.preferred_aspect_ratio();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -604,7 +604,7 @@ void LayoutState::UsedValues::set_node(NodeWithStyle& node, UsedValues const* co
|
||||||
if (m_has_definite_width && m_has_definite_height) {
|
if (m_has_definite_width && m_has_definite_height) {
|
||||||
// Both width and height are definite.
|
// Both width and height are definite.
|
||||||
} else if (m_has_definite_width) {
|
} else if (m_has_definite_width) {
|
||||||
m_content_height = clamp_to_max_dimension_value(m_content_width / *aspect_ratio);
|
m_content_height = *aspect_ratio == 0 ? 0 : clamp_to_max_dimension_value(m_content_width / *aspect_ratio);
|
||||||
m_has_definite_height = true;
|
m_has_definite_height = true;
|
||||||
} else if (m_has_definite_height) {
|
} else if (m_has_definite_height) {
|
||||||
m_content_width = clamp_to_max_dimension_value(m_content_height * *aspect_ratio);
|
m_content_width = clamp_to_max_dimension_value(m_content_height * *aspect_ratio);
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
element height: 10px
|
element height: 10px
|
||||||
|
element height: 0px
|
||||||
|
element height: 0px
|
||||||
|
|
|
@ -2,11 +2,18 @@
|
||||||
<script src="../include.js"></script>
|
<script src="../include.js"></script>
|
||||||
<script>
|
<script>
|
||||||
test(() => {
|
test(() => {
|
||||||
const element = document.createElement("div");
|
const smallAspectRatios = [
|
||||||
element.style.width = "100px";
|
".0000000000001 / .00000000000001",
|
||||||
element.style.aspectRatio = ".0000000000001 / .00000000000001";
|
"1/0.00000000000001",
|
||||||
document.body.appendChild(element);
|
"0.00000000000001/1",
|
||||||
println(`element height: ${element.clientHeight}px`);
|
];
|
||||||
element.remove();
|
for (const ratio of smallAspectRatios) {
|
||||||
|
const element = document.createElement("div");
|
||||||
|
element.style.width = "100px";
|
||||||
|
element.style.aspectRatio = ratio;
|
||||||
|
document.body.appendChild(element);
|
||||||
|
println(`element height: ${element.clientHeight}px`);
|
||||||
|
element.remove();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue