Skip to content

Commit f6cf2a8

Browse files
committed
rust: allow 65536,0 as a valid slice
1 parent ac9d1a2 commit f6cf2a8

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

bindings/rust/src/lib.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ impl Instance {
299299
let offset = offset as usize;
300300
let memory_size = self.memory_size();
301301
// Empty slices are allowed, but ensure both starting and ending offsets are valid.
302-
if offset >= memory_size || (offset + size) > memory_size {
302+
if memory_size == 0 || offset > memory_size || (offset + size) > memory_size {
303303
return Err(());
304304
}
305305
debug_assert!(memory_size != 0);
@@ -942,15 +942,19 @@ mod tests {
942942
// Allow empty slices.
943943
assert!(instance.checked_memory_slice(65535, 0).is_ok());
944944
assert!(instance.checked_memory_slice_mut(65535, 0).is_ok());
945+
assert!(instance.checked_memory_slice(65536, 0).is_ok());
946+
assert!(instance.checked_memory_slice_mut(65536, 0).is_ok());
945947
// Single byte.
946948
assert!(instance.checked_memory_slice(65535, 1).is_ok());
947949
assert!(instance.checked_memory_slice_mut(65535, 1).is_ok());
948950
// Reading over.
949951
assert!(instance.checked_memory_slice(65535, 2).is_err());
950952
assert!(instance.checked_memory_slice_mut(65535, 2).is_err());
953+
assert!(instance.checked_memory_slice(65536, 1).is_err());
954+
assert!(instance.checked_memory_slice_mut(65536, 1).is_err());
951955
// Offset overflow.
952-
assert!(instance.checked_memory_slice(65536, 0).is_err());
953-
assert!(instance.checked_memory_slice_mut(65536, 0).is_err());
956+
assert!(instance.checked_memory_slice(65537, 0).is_err());
957+
assert!(instance.checked_memory_slice_mut(65537, 0).is_err());
954958
}
955959

956960
// Grow with a single page.
@@ -1006,7 +1010,7 @@ mod tests {
10061010
// Set memory via safe helper.
10071011
assert!(instance.memory_set(0, &[]).is_ok());
10081012
assert!(instance.memory_set(65536 + 65535, &[]).is_ok());
1009-
assert!(instance.memory_set(65536 + 65536, &[]).is_err());
1013+
assert!(instance.memory_set(65536 + 65536, &[]).is_ok());
10101014
assert!(instance.memory_set(65536 + 65537, &[]).is_err());
10111015
assert!(instance.memory_set(0, &[0x11, 0x22, 0x33, 0x44]).is_ok());
10121016
assert!(instance
@@ -1062,7 +1066,7 @@ mod tests {
10621066
// Read into empty slice.
10631067
assert!(instance.memory_get(0, &mut dst[0..0]).is_ok());
10641068
assert!(instance.memory_get(65536 + 65535, &mut dst[0..0]).is_ok());
1065-
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_err());
1069+
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_ok());
10661070
assert!(instance.memory_get(65536 + 65537, &mut dst[0..0]).is_err());
10671071

10681072
// Read into short slice.

0 commit comments

Comments
 (0)