Skip to content

Commit

Permalink
rust: allow 65536,0 as a valid slice
Browse files Browse the repository at this point in the history
  • Loading branch information
axic committed Feb 9, 2021
1 parent c985664 commit c301265
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions bindings/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ impl Instance {
let offset = offset as usize;
let memory_size = self.memory_size();
// Empty slices are allowed, but ensure both starting and ending offsets are valid.
if offset >= memory_size || (offset + size) > memory_size {
if memory_size == 0 || offset > memory_size || (offset + size) > memory_size {
return Err(());
}
debug_assert!(memory_size != 0);
Expand Down Expand Up @@ -932,15 +932,17 @@ mod tests {
// Allow empty slices.
assert!(instance.checked_memory_slice(65535, 0).is_ok());
assert!(instance.checked_memory_slice_mut(65535, 0).is_ok());
assert!(instance.checked_memory_slice(65536, 0).is_ok());
assert!(instance.checked_memory_slice_mut(65536, 0).is_ok());
// Single byte.
assert!(instance.checked_memory_slice(65535, 1).is_ok());
assert!(instance.checked_memory_slice_mut(65535, 1).is_ok());
// Reading over.
assert!(instance.checked_memory_slice(65535, 2).is_err());
assert!(instance.checked_memory_slice_mut(65535, 2).is_err());
// Offset overflow.
assert!(instance.checked_memory_slice(65536, 0).is_err());
assert!(instance.checked_memory_slice_mut(65536, 0).is_err());
assert!(instance.checked_memory_slice(65537, 0).is_err());
assert!(instance.checked_memory_slice_mut(65537, 0).is_err());
}

// Grow with a single page.
Expand Down Expand Up @@ -996,7 +998,7 @@ mod tests {
// Set memory via safe helper.
assert!(instance.memory_set(0, &[]).is_ok());
assert!(instance.memory_set(65536 + 65535, &[]).is_ok());
assert!(instance.memory_set(65536 + 65536, &[]).is_err());
assert!(instance.memory_set(65536 + 65536, &[]).is_ok());
assert!(instance.memory_set(65536 + 65537, &[]).is_err());
assert!(instance.memory_set(0, &[0x11, 0x22, 0x33, 0x44]).is_ok());
assert!(instance
Expand Down Expand Up @@ -1052,7 +1054,7 @@ mod tests {
// Read into empty slice.
assert!(instance.memory_get(0, &mut dst[0..0]).is_ok());
assert!(instance.memory_get(65536 + 65535, &mut dst[0..0]).is_ok());
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_err());
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_ok());
assert!(instance.memory_get(65536 + 65537, &mut dst[0..0]).is_err());

// Read into short slice.
Expand Down

0 comments on commit c301265

Please sign in to comment.