From 84f21584ea68c36e30935216b7ed18523e0bb861 Mon Sep 17 00:00:00 2001 From: Scott Olson Date: Fri, 15 Apr 2016 03:16:35 -0600 Subject: [PATCH] Fix drop fill checking on 32-bit hosts. --- src/interpreter.rs | 5 +++-- src/memory.rs | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/interpreter.rs b/src/interpreter.rs index e52aaf37f2e..91682207ed6 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -393,8 +393,9 @@ fn drop(&mut self, ptr: Pointer, ty: ty::Ty<'tcx>) -> EvalResult<()> { try!(self.memory.deallocate(contents_ptr)); } Err(EvalError::ReadBytesAsPointer) => { - let possible_drop_fill = try!(self.memory.read_usize(ptr)); - if possible_drop_fill == mem::POST_DROP_U64 { + let size = self.memory.pointer_size; + let possible_drop_fill = try!(self.memory.read_bytes(ptr, size)); + if possible_drop_fill.iter().all(|&b| b == mem::POST_DROP_U8) { return Ok(()); } else { return Err(EvalError::ReadBytesAsPointer); diff --git a/src/memory.rs b/src/memory.rs index 21ab8e36c56..b99dae15970 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -284,6 +284,10 @@ pub fn copy(&mut self, src: Pointer, dest: Pointer, size: usize) -> EvalResult<( Ok(()) } + pub fn read_bytes(&self, ptr: Pointer, size: usize) -> EvalResult<&[u8]> { + self.get_bytes(ptr, size) + } + pub fn write_bytes(&mut self, ptr: Pointer, src: &[u8]) -> EvalResult<()> { let bytes = try!(self.get_bytes_mut(ptr, src.len())); bytes.clone_from_slice(src); -- 2.44.0