layout: Avoid a division by zero in tile_image().

Fixes a crash on Facebook Timeline.
This commit is contained in:
Patrick Walton 2015-08-18 18:41:55 -07:00
parent 19d466b062
commit 02b15e016d
4 changed files with 19 additions and 2 deletions

View file

@ -390,9 +390,13 @@ impl ImageFragmentInfo {
}
/// Tile an image
pub fn tile_image(position: &mut Au, size: &mut Au,
virtual_position: Au, image_size: u32) {
pub fn tile_image(position: &mut Au, size: &mut Au, virtual_position: Au, image_size: u32) {
// Avoid division by zero below!
let image_size = image_size as i32;
if image_size == 0 {
return
}
let delta_pixels = (virtual_position - *position).to_px();
let tile_count = (delta_pixels + image_size - 1) / image_size;
let offset = Au::from_px(image_size * tile_count);

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<style>
body {
background-image: url(400x400_green.png);
background-size: 0 0;
}
</style>
Don't crash!

View file

@ -0,0 +1,3 @@
<!DOCTYPE html>
Don't crash!

View file

@ -37,6 +37,7 @@ flaky_cpu == append_style_a.html append_style_b.html
== background_repeat_y_a.html background_repeat_y_b.html
== background_size_a.html background_size_ref.html
== background_size_shorthand_a.html background_size_shorthand_ref.html
== background_size_zero_a.html background_size_zero_ref.html
== background_style_attr.html background_ref.html
== basic_width_px.html basic_width_em.html
== block_formatting_context_a.html block_formatting_context_ref.html