From 1e5ba09d76e914f67c92c4cf585b6bd40c7c2b9d Mon Sep 17 00:00:00 2001 From: Hendiadyoin1 Date: Fri, 4 Aug 2023 16:55:47 +0200 Subject: [PATCH] LibWeb: Saturate PixelUnits on creation when needed --- Userland/Libraries/LibWeb/PixelUnits.cpp | 17 ++++++++++++++--- Userland/Libraries/LibWeb/PixelUnits.h | 3 +++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/PixelUnits.cpp b/Userland/Libraries/LibWeb/PixelUnits.cpp index fc13a0c39a..195fa3ba6e 100644 --- a/Userland/Libraries/LibWeb/PixelUnits.cpp +++ b/Userland/Libraries/LibWeb/PixelUnits.cpp @@ -11,17 +11,28 @@ namespace Web { CSSPixels::CSSPixels(int value) { - m_value = value * fixed_point_denominator; + if (value > max_integer_value) [[unlikely]] + m_value = NumericLimits::max(); + else if (value < min_integer_value) [[unlikely]] + m_value = NumericLimits::min(); + else + m_value = value << fractional_bits; } CSSPixels::CSSPixels(unsigned int value) { - m_value = value * fixed_point_denominator; + if (value > max_integer_value) [[unlikely]] + m_value = NumericLimits::max(); + else + m_value = static_cast(value) << fractional_bits; } CSSPixels::CSSPixels(unsigned long value) { - m_value = value * fixed_point_denominator; + if (value > max_integer_value) [[unlikely]] + m_value = NumericLimits::max(); + else + m_value = static_cast(value) << fractional_bits; } CSSPixels::CSSPixels(float value) diff --git a/Userland/Libraries/LibWeb/PixelUnits.h b/Userland/Libraries/LibWeb/PixelUnits.h index e1dd8a1a42..39d4606d07 100644 --- a/Userland/Libraries/LibWeb/PixelUnits.h +++ b/Userland/Libraries/LibWeb/PixelUnits.h @@ -57,6 +57,9 @@ public: static constexpr i32 radix_mask = fixed_point_denominator - 1; + static constexpr i32 max_integer_value = NumericLimits::max() >> fractional_bits; + static constexpr i32 min_integer_value = NumericLimits::min() >> fractional_bits; + CSSPixels() = default; CSSPixels(int value); CSSPixels(unsigned int value);