From 4e31b122ca5ff06e2c44044f8253d283b613df41 Mon Sep 17 00:00:00 2001 From: Heeill Wang Date: Wed, 20 Sep 2023 21:58:08 +0900 Subject: [PATCH] modify to use saturating ops to prevent arith overflow --- src/layout.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/layout.rs b/src/layout.rs index b290cdde7..b3400ce89 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -206,7 +206,7 @@ impl Rect { } pub const fn area(self) -> u16 { - self.width * self.height + self.width.saturating_mul(self.height) } pub const fn left(self) -> u16 { @@ -226,14 +226,17 @@ impl Rect { } pub fn inner(self, margin: &Margin) -> Rect { - if self.width < 2 * margin.horizontal || self.height < 2 * margin.vertical { + let doubled_margin_horizontal = margin.horizontal.saturating_mul(2); + let doubled_margin_vertical = margin.vertical.saturating_mul(2); + + if self.width < doubled_margin_horizontal || self.height < doubled_margin_vertical { Rect::default() } else { Rect { - x: self.x + margin.horizontal, - y: self.y + margin.vertical, - width: self.width - 2 * margin.horizontal, - height: self.height - 2 * margin.vertical, + x: self.x.saturating_add(margin.horizontal), + y: self.y.saturating_add(margin.vertical), + width: self.width.saturating_sub(doubled_margin_horizontal), + height: self.height.saturating_sub(doubled_margin_vertical), } } }