Commit 6b6e870d authored by Chege Gitau's avatar Chege Gitau Committed by Commit Bot

[Media Session] Avoid undefined behavior when scoring images

Given an image whose shortest dimension is zero,
|GetImageAspectRatioScore| would run into a division by zero, which
leads to undefined behavior.

This CL prevents that by returning early. We return zero because such
an image is not desirable, and should rank lower than images with
non-zero heights and widths.

Change-Id: I80f3b9b3d832d8363994c11bdd073af011b963ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2185835Reviewed-by: default avatarBecca Hughes <beccahughes@chromium.org>
Commit-Queue: Chege Gitau <dagitau@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#766475}
parent cf759126
...@@ -26,6 +26,9 @@ const double kXIconTypeScore = 0.4; ...@@ -26,6 +26,9 @@ const double kXIconTypeScore = 0.4;
const double kGIFTypeScore = 0.3; const double kGIFTypeScore = 0.3;
double GetImageAspectRatioScore(const gfx::Size& size) { double GetImageAspectRatioScore(const gfx::Size& size) {
if (size.width() == 0 || size.height() == 0)
return 0;
double long_edge = std::max(size.width(), size.height()); double long_edge = std::max(size.width(), size.height());
double short_edge = std::min(size.width(), size.height()); double short_edge = std::min(size.width(), size.height());
return short_edge / long_edge; return short_edge / long_edge;
......
...@@ -182,4 +182,26 @@ TEST_F(MediaImageManagerTest, MinAndIdealAndImageSizeAreSame) { ...@@ -182,4 +182,26 @@ TEST_F(MediaImageManagerTest, MinAndIdealAndImageSizeAreSame) {
EXPECT_TRUE(manager.SelectImage(images)); EXPECT_TRUE(manager.SelectImage(images));
} }
TEST_F(MediaImageManagerTest, PreferImagesWithNonZeroArea) {
std::vector<MediaImage> images;
MediaImage image1;
image1.sizes.push_back(gfx::Size(kMinSize, kMinSize));
images.push_back(image1);
MediaImage image2;
image2.sizes.push_back(gfx::Size(kIdealSize, 0));
images.push_back(image2);
MediaImage image3;
image3.sizes.push_back(gfx::Size(0, kIdealSize));
images.push_back(image3);
MediaImage image4;
image4.sizes.push_back(gfx::Size(0, 0));
images.push_back(image4);
EXPECT_EQ(image1, manager()->SelectImage(images));
}
} // namespace media_session } // namespace media_session
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