(&self, offset: u32, len: u32)
| 272 | } |
| 273 | |
| 274 | fn validate_range<T>(&self, offset: u32, len: u32) -> Result<Range<usize>, GuestError> |
| 275 | where |
| 276 | T: GuestTypeTransparent, |
| 277 | { |
| 278 | let byte_len = len |
| 279 | .checked_mul(T::guest_size()) |
| 280 | .ok_or(GuestError::PtrOverflow)?; |
| 281 | let region = Region { |
| 282 | start: offset, |
| 283 | len: byte_len, |
| 284 | }; |
| 285 | let offset = usize::try_from(offset)?; |
| 286 | let byte_len = usize::try_from(byte_len)?; |
| 287 | |
| 288 | let range = offset..offset + byte_len; |
| 289 | let oob = match self { |
| 290 | GuestMemory::Unshared(b) => b.get(range.clone()).is_none(), |
| 291 | GuestMemory::Shared(b) => b.get(range.clone()).is_none(), |
| 292 | }; |
| 293 | if oob { |
| 294 | Err(GuestError::PtrOutOfBounds(region)) |
| 295 | } else { |
| 296 | Ok(range) |
| 297 | } |
| 298 | } |
| 299 | |
| 300 | /// Returns whether this is a shared memory or not. |
| 301 | pub fn is_shared_memory(&self) -> bool { |
nothing calls this directly
no test coverage detected