@@ -292,20 +292,19 @@ impl Instance {
292292 /// Ensure the range is valid according to the currently available memory size.
293293 fn checked_memory_range (
294294 & self ,
295+ memory_data : * mut u8 ,
296+ memory_size : usize ,
295297 offset : u32 ,
296298 size : usize ,
297299 ) -> Result < core:: ops:: Range < usize > , ( ) > {
298300 // This is safe given usize::BITS >= u32::BITS, see https://doc.rust-lang.org/std/primitive.usize.html.
299301 let offset = offset as usize ;
300302 let has_memory = unsafe { sys:: fizzy_module_has_memory ( self . get_module ( ) ) } ;
301- let memory_size = self . memory_size ( ) ;
302303 if !has_memory || offset. checked_add ( size) . is_none ( ) || ( offset + size) > memory_size {
303304 return Err ( ( ) ) ;
304305 }
305306 // Slices allow empty length, but data must be a valid pointer.
306- debug_assert ! (
307- unsafe { sys:: fizzy_get_instance_memory_data( self . 0 . as_ptr( ) ) } != std:: ptr:: null_mut( )
308- ) ;
307+ debug_assert ! ( memory_data != std:: ptr:: null_mut( ) ) ;
309308 Ok ( offset..offset + size)
310309 }
311310
@@ -314,11 +313,10 @@ impl Instance {
314313 /// # Safety
315314 /// These slices turn invalid if the memory is resized (i.e. via the WebAssembly `memory.grow` instruction)
316315 pub unsafe fn checked_memory_slice ( & self , offset : u32 , size : usize ) -> Result < & [ u8 ] , ( ) > {
317- let range = self . checked_memory_range ( offset, size) ?;
318- let memory = std:: slice:: from_raw_parts (
319- sys:: fizzy_get_instance_memory_data ( self . 0 . as_ptr ( ) ) ,
320- sys:: fizzy_get_instance_memory_size ( self . 0 . as_ptr ( ) ) ,
321- ) ;
316+ let memory_data = sys:: fizzy_get_instance_memory_data ( self . 0 . as_ptr ( ) ) ;
317+ let memory_size = sys:: fizzy_get_instance_memory_size ( self . 0 . as_ptr ( ) ) ;
318+ let range = self . checked_memory_range ( memory_data, memory_size, offset, size) ?;
319+ let memory = std:: slice:: from_raw_parts ( memory_data, memory_size) ;
322320 Ok ( & memory[ range] )
323321 }
324322
@@ -331,11 +329,10 @@ impl Instance {
331329 offset : u32 ,
332330 size : usize ,
333331 ) -> Result < & mut [ u8 ] , ( ) > {
334- let range = self . checked_memory_range ( offset, size) ?;
335- let memory = std:: slice:: from_raw_parts_mut (
336- sys:: fizzy_get_instance_memory_data ( self . 0 . as_ptr ( ) ) ,
337- sys:: fizzy_get_instance_memory_size ( self . 0 . as_ptr ( ) ) ,
338- ) ;
332+ let memory_data = sys:: fizzy_get_instance_memory_data ( self . 0 . as_ptr ( ) ) ;
333+ let memory_size = sys:: fizzy_get_instance_memory_size ( self . 0 . as_ptr ( ) ) ;
334+ let range = self . checked_memory_range ( memory_data, memory_size, offset, size) ?;
335+ let memory = std:: slice:: from_raw_parts_mut ( memory_data, memory_size) ;
339336 Ok ( & mut memory[ range] )
340337 }
341338
0 commit comments