From b8cb27f38fc4e053ea9413a4f772f224db22df3a Mon Sep 17 00:00:00 2001 From: toka Date: Mon, 4 Sep 2023 16:32:09 +0200 Subject: [PATCH] checked_sub/checked_div --- src/meta/header.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/meta/header.rs b/src/meta/header.rs index 55198770..b322b18f 100644 --- a/src/meta/header.rs +++ b/src/meta/header.rs @@ -533,7 +533,9 @@ impl Header { CompressedBlock::ScanLine(ref block) => { let size = self.compression.scan_lines_per_block() as i32; - let y = (block.y_coordinate - self.own_attributes.layer_position.y()) / size; + + let diff = block.y_coordinate.checked_sub(self.own_attributes.layer_position.y()).ok_or(Error::invalid("invalid header"))?; + let y = diff.checked_div(size).ok_or(Error::invalid("invalid header"))?; if y < 0 { return Err(Error::invalid("scan block y coordinate")); @@ -552,7 +554,9 @@ impl Header { /// Computes the absolute tile coordinate data indices, which start at `0`. pub fn get_scan_line_block_tile_coordinates(&self, block_y_coordinate: i32) -> Result { let size = self.compression.scan_lines_per_block() as i32; - let y = (block_y_coordinate - self.own_attributes.layer_position.1) / size; + + let diff = block_y_coordinate.checked_sub(self.own_attributes.layer_position.1).ok_or(Error::invalid("invalid header"))?; + let y = diff.checked_div(size).ok_or(Error::invalid("invalid header"))?; if y < 0 { return Err(Error::invalid("scan block y coordinate"));