From 3ca934f07d2f0fcf7f5aec5f5493cdbd3dfa7480 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 30 Jun 2019 23:32:25 +0200 Subject: [PATCH] gen_random: use check_ptr_access --- src/helpers.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/helpers.rs b/src/helpers.rs index b2be90ca999..b9fa7bc2a77 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -1,6 +1,6 @@ use std::mem; -use rustc::ty::{self, layout::{self, Size}}; +use rustc::ty::{self, layout::{self, Size, Align}}; use rustc::hir::def_id::{DefId, CRATE_DEF_INDEX}; use rand::RngCore; @@ -71,14 +71,14 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx fn gen_random( &mut self, len: usize, - dest: Scalar, + ptr: Scalar, ) -> InterpResult<'tcx> { - if len == 0 { - // Nothing to do - return Ok(()); - } let this = self.eval_context_mut(); - let ptr = dest.to_ptr()?; + + let ptr = match this.memory().check_ptr_access(ptr, Size::from_bytes(len as u64), Align::from_bytes(1).unwrap())? { + Some(ptr) => ptr, + None => return Ok(()), // zero-sized access + }; let data = match &mut this.memory_mut().extra.rng { Some(rng) => {