From 57c1fe97fb4d9f3d707b422b822187626701f941 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 12 Aug 2023 18:22:12 +0200 Subject: [PATCH] LibWeb: Define comparison operators with CSSPixels for AvailableSize This allows to compare CSSPixels with AvailableSize without converting it to CSSPixels, which might leak saturated (infinite) values into layout calculations. --- .../Libraries/LibWeb/Layout/AvailableSpace.h | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Userland/Libraries/LibWeb/Layout/AvailableSpace.h b/Userland/Libraries/LibWeb/Layout/AvailableSpace.h index 98fd17a65c..ca9f1f9455 100644 --- a/Userland/Libraries/LibWeb/Layout/AvailableSpace.h +++ b/Userland/Libraries/LibWeb/Layout/AvailableSpace.h @@ -57,6 +57,33 @@ private: CSSPixels m_value {}; }; +inline bool operator>(CSSPixels left, AvailableSize const& right) +{ + if (right.is_max_content() || right.is_indefinite()) + return false; + if (right.is_min_content()) + return true; + return left > right.to_px_or_zero(); +} + +inline bool operator<(CSSPixels left, AvailableSize const& right) +{ + if (right.is_max_content() || right.is_indefinite()) + return true; + if (right.is_min_content()) + return false; + return left < right.to_px_or_zero(); +} + +inline bool operator<(AvailableSize const& left, CSSPixels right) +{ + if (left.is_min_content()) + return true; + if (left.is_max_content() || left.is_indefinite()) + return false; + return left.to_px_or_zero() < right; +} + class AvailableSpace { public: AvailableSpace(AvailableSize w, AvailableSize h)