Skip to content

Commit c301265

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

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

bindings/rust/src/lib.rs

Lines changed: 7 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);
@@ -932,15 +932,17 @@ mod tests {
932932
// Allow empty slices.
933933
assert!(instance.checked_memory_slice(65535, 0).is_ok());
934934
assert!(instance.checked_memory_slice_mut(65535, 0).is_ok());
935+
assert!(instance.checked_memory_slice(65536, 0).is_ok());
936+
assert!(instance.checked_memory_slice_mut(65536, 0).is_ok());
935937
// Single byte.
936938
assert!(instance.checked_memory_slice(65535, 1).is_ok());
937939
assert!(instance.checked_memory_slice_mut(65535, 1).is_ok());
938940
// Reading over.
939941
assert!(instance.checked_memory_slice(65535, 2).is_err());
940942
assert!(instance.checked_memory_slice_mut(65535, 2).is_err());
941943
// Offset overflow.
942-
assert!(instance.checked_memory_slice(65536, 0).is_err());
943-
assert!(instance.checked_memory_slice_mut(65536, 0).is_err());
944+
assert!(instance.checked_memory_slice(65537, 0).is_err());
945+
assert!(instance.checked_memory_slice_mut(65537, 0).is_err());
944946
}
945947

946948
// Grow with a single page.
@@ -996,7 +998,7 @@ mod tests {
996998
// Set memory via safe helper.
997999
assert!(instance.memory_set(0, &[]).is_ok());
9981000
assert!(instance.memory_set(65536 + 65535, &[]).is_ok());
999-
assert!(instance.memory_set(65536 + 65536, &[]).is_err());
1001+
assert!(instance.memory_set(65536 + 65536, &[]).is_ok());
10001002
assert!(instance.memory_set(65536 + 65537, &[]).is_err());
10011003
assert!(instance.memory_set(0, &[0x11, 0x22, 0x33, 0x44]).is_ok());
10021004
assert!(instance
@@ -1052,7 +1054,7 @@ mod tests {
10521054
// Read into empty slice.
10531055
assert!(instance.memory_get(0, &mut dst[0..0]).is_ok());
10541056
assert!(instance.memory_get(65536 + 65535, &mut dst[0..0]).is_ok());
1055-
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_err());
1057+
assert!(instance.memory_get(65536 + 65536, &mut dst[0..0]).is_ok());
10561058
assert!(instance.memory_get(65536 + 65537, &mut dst[0..0]).is_err());
10571059

10581060
// Read into short slice.

0 commit comments

Comments
 (0)