Commit 27397cec authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

LayoutNG: Fix a crash with input[type=file]::after with padding

We had an assumption that line items in input[type=file] didn't have
padding. However, ::before or ::after with padding can be in the line
items.

The |static_width_right| computation was wrong in this case because
NGLogicalLineItem::inline_size doesn't contain padding size.  We should
compute it from NGLogicalLineItem::InlineOffset().

Fixed: 1125428
Change-Id: I290d9f148480569fba75655bae5fd03d80f2132f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404225
Auto-Submit: Kent Tamura <tkent@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806062}
parent c1d5a3d4
......@@ -245,8 +245,11 @@ LayoutUnit NGLineTruncator::TruncateLineInTheMiddle(
const LayoutUnit static_width_left = line[initial_index_left].InlineOffset();
LayoutUnit static_width_right = LayoutUnit(0);
for (wtf_size_t i = initial_index_right + 1; i < line.size(); ++i)
static_width_right += line[i].inline_size;
if (initial_index_right + 1 < line.size()) {
const NGLogicalLineItem& item = line[initial_index_right + 1];
static_width_right =
line_width - item.InlineOffset() + item.margin_line_left;
}
const LayoutUnit available_width =
available_width_ - static_width_left - static_width_right;
if (available_width <= ellipsis_width_)
......
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style>
.c18 {
width: 640px;
}
.c18:after {
content: attr(class);
width: 100%;
padding-right: 100%;
}
</style>
<input type="file">
<script>
test(() => {
const fileInput = document.querySelector('input');
fileInput.classList.add('c18');
fileInput.offsetWidth;
// Ok if no crash.
}, ':after with large padding should not cause a crash.');
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment