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);