From b342b4dfb8cc957e397c2c00227896b172121eb1 Mon Sep 17 00:00:00 2001 From: Hendiadyoin1 Date: Fri, 18 Aug 2023 16:09:11 +0200 Subject: [PATCH] LibWeb: Fix a rounding issue on CSSPixels multiplication Co-Authored-By: ronak69 --- Tests/LibWeb/TestCSSPixels.cpp | 7 +++++++ Userland/Libraries/LibWeb/PixelUnits.h | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Tests/LibWeb/TestCSSPixels.cpp b/Tests/LibWeb/TestCSSPixels.cpp index 357432acd0..66b7059466 100644 --- a/Tests/LibWeb/TestCSSPixels.cpp +++ b/Tests/LibWeb/TestCSSPixels.cpp @@ -55,6 +55,13 @@ TEST_CASE(multiplication1) b = CSSPixels::from_raw(0b01'100000); EXPECT_EQ(a * b, CSSPixels(a.to_double() * b.to_double())); EXPECT_EQ(a * -b, CSSPixels(a.to_double() * -b.to_double())); + + EXPECT_EQ( + CSSPixels::from_raw(0b01'0000011) * CSSPixels::from_raw(0b00'010000), + CSSPixels::from_raw(0b00'0100001)); + EXPECT_EQ( + CSSPixels::from_raw(0b01'0000111) * CSSPixels::from_raw(0b00'010000), + CSSPixels::from_raw(0b00'0100010)); } TEST_CASE(addition2) diff --git a/Userland/Libraries/LibWeb/PixelUnits.h b/Userland/Libraries/LibWeb/PixelUnits.h index 36b49a47e2..b816660d30 100644 --- a/Userland/Libraries/LibWeb/PixelUnits.h +++ b/Userland/Libraries/LibWeb/PixelUnits.h @@ -170,8 +170,8 @@ public: // Rounding: // If last bit cut off was 1: if (value & (1u << (fractional_bits - 1))) { - // If the bit after was 1 as well - if (value & (radix_mask >> 2u)) { + // If any bit after was 1 as well + if (value & (radix_mask >> 1u)) { // We need to round away from 0 int_value = Checked::saturating_add(int_value, 1); } else {