@@ -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