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