diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs index a33d4cf07..fff95e6fe 100644 --- a/bindings/rust/src/lib.rs +++ b/bindings/rust/src/lib.rs @@ -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); @@ -932,6 +932,8 @@ 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()); @@ -939,8 +941,8 @@ mod tests { 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. @@ -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 @@ -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.