From 4846d21ff9d0a77190c4468413cace07f2b40714 Mon Sep 17 00:00:00 2001 From: Ron Williams Date: Fri, 28 Jul 2023 01:50:39 -0700 Subject: [PATCH] block-io-wrapper: allow up to MAX offset + len --- block-io-wrapper/src/lib.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/block-io-wrapper/src/lib.rs b/block-io-wrapper/src/lib.rs index 278c88cc54..ced957f2a6 100644 --- a/block-io-wrapper/src/lib.rs +++ b/block-io-wrapper/src/lib.rs @@ -18,11 +18,13 @@ pub fn read( if buf.len() == 0 { return Ok(0); } - let _ = offset.checked_add(buf.len() as u64).ok_or(Error::new( - ErrorKind::InvalidInput, - "Offset + Length greater than 2^64", - ))?; - let mut curr_buf = buf; + let (_, would_overflow) = offset.overflowing_add(buf.len() as u64); + let to_copy = if would_overflow { + usize::try_from(u64::MAX - offset).map_err(|_| Error::new(ErrorKind::Unsupported, "offset + len exceeds usize::MAX"))? + } else { + buf.len() + }; + let mut curr_buf = &mut buf[..to_copy]; let mut curr_offset = offset; let blk_size = usize::try_from(blksize).expect("blksize larger than usize"); let mut total_read = 0;