Prevent stretch from producing a negative size (#33951)

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
Oriol Brufau 2024-10-22 10:04:15 +02:00 committed by GitHub
parent afeaff7f1a
commit 8824c90716
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 17 additions and 4 deletions

View file

@ -1969,11 +1969,12 @@ impl IndependentFormattingContext {
let max_box_size = style.content_max_box_size(containing_block, &pbm); let max_box_size = style.content_max_box_size(containing_block, &pbm);
let min_box_size = style.content_min_box_size(containing_block, &pbm); let min_box_size = style.content_min_box_size(containing_block, &pbm);
let available_inline_size = containing_block.inline_size - pbm_sums.inline_sum(); let available_inline_size =
(containing_block.inline_size - pbm_sums.inline_sum()).max(Au::zero());
let available_block_size = containing_block let available_block_size = containing_block
.block_size .block_size
.non_auto() .non_auto()
.map(|block_size| block_size - pbm_sums.block_sum()); .map(|block_size| (block_size - pbm_sums.block_sum()).max(Au::zero()));
let tentative_block_size = box_size let tentative_block_size = box_size
.block .block
.maybe_resolve_extrinsic(available_block_size) .maybe_resolve_extrinsic(available_block_size)

View file

@ -569290,14 +569290,14 @@
] ]
], ],
"keyword-sizes-on-floated-element.html": [ "keyword-sizes-on-floated-element.html": [
"adfffba8061aa983800822746a0cd5fc8f6f0fa8", "42ea7ba26d7e1ffd26f8f12bad37e3b18abba0f6",
[ [
null, null,
{} {}
] ]
], ],
"keyword-sizes-on-inline-block.html": [ "keyword-sizes-on-inline-block.html": [
"d91d8e6ed9cd2ab7c7f0e418b7715fc88a03b4e1", "7c41d902aa89c9f46a936dbac1d20b80bb5cdd98",
[ [
null, null,
{} {}

View file

@ -119,6 +119,12 @@
<div class="test max-height stretch" data-expected-height="90">XXXXX XXXXX</div> <div class="test max-height stretch" data-expected-height="90">XXXXX XXXXX</div>
</div> </div>
<!-- Stretch sizes can't result in a negative content size -->
<div class="wrapper" style="width: 0px; height: 0px">
<div class="test width min-width max-width stretch" data-expected-width="10"></div>
<div class="test height min-height max-height stretch" data-expected-height="10"></div>
</div>
<!-- Indefinite stretch --> <!-- Indefinite stretch -->
<div style="width: 100px; max-height: 100px"> <div style="width: 100px; max-height: 100px">
<div class="test height stretch indefinite" data-expected-height="30">X X</div> <div class="test height stretch indefinite" data-expected-height="30">X X</div>

View file

@ -125,6 +125,12 @@
<div class="test max-height stretch" data-expected-height="90">XXXXX XXXXX</div> <div class="test max-height stretch" data-expected-height="90">XXXXX XXXXX</div>
</div> </div>
<!-- Stretch sizes can't result in a negative content size -->
<div class="wrapper" style="width: 0px; height: 0px">
<div class="test width min-width max-width stretch" data-expected-width="10"></div>
<div class="test height min-height max-height stretch" data-expected-height="10"></div>
</div>
<!-- Indefinite stretch --> <!-- Indefinite stretch -->
<div class="wrapper" style="width: 100px; max-height: 100px"> <div class="wrapper" style="width: 100px; max-height: 100px">
<div class="test height stretch indefinite" data-expected-height="30">X X</div> <div class="test height stretch indefinite" data-expected-height="30">X X</div>