message: Fixed Array deref
diff: @@ -155,27 +155,32 @@ impl<T: Copy + ValueType> WasmPtr<T, Array> {
  pub fn deref(self, memory: &Memory, index: u32, length: u32) -> Option<Vec<WasmCell<T>>> {
  // gets the size of the item in the array with padding added such that
  // for any index, we will always result an aligned memory access
  - let item_size = mem::size_of::<T>();
  - let slice_full_len = index as usize + length as usize;
  - let memory_size = memory.size().bytes().0;
  + let item_size = mem::size_of::<T>() as u32;
  + let slice_full_len = index + length;
  + let memory_size = memory.size().bytes().0 as u32;
  - if (self.offset as usize) + (item_size * slice_full_len) > memory_size
  - || self.offset as usize >= memory_size
  - || mem::size_of::<T>() == 0
  + if self.offset + (item_size * slice_full_len) > memory_size
  + || self.offset >= memory_size
  + || item_size == 0
  {
  return None;
  }
  - unsafe {
  + Some(
  + (0..length)
  + .map(|i| unsafe {
  let cell_ptr = align_pointer(
  - memory.view::<u8>().as_ptr().add(self.offset as usize) as usize,
  + memory
  + .view::<u8>()
  + .as_ptr()
  + .add((self.offset + i * item_size) as usize)
  + as usize,
  mem::align_of::<T>(),
  - ) as *const WasmCell<T>;
  - let cell_ptrs = std::slice::from_raw_parts(cell_ptr, slice_full_len)
  - [index as usize..slice_full_len]
  - .to_owned();
  - Some(cell_ptrs)
  - }
  + ) as *const Cell<T>;
  + WasmCell::new(&*cell_ptr)
  + })
  + .collect::<Vec<_>>(),
  + )
  }
  // /// Mutably dereference this `WasmPtr` getting a `&mut [Cell<T>]` allowing for
  