From 9c8ad5f9e199d45b7c2425389ef718ce65071be2 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 16 Apr 2019 19:26:02 +0200 Subject: [PATCH] fix 0-sized getrandom --- src/fn_call.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/fn_call.rs b/src/fn_call.rs index bb6d6aed4905..718f1c24ac79 100644 --- a/src/fn_call.rs +++ b/src/fn_call.rs @@ -241,9 +241,11 @@ pub trait EvalContextExt<'a, 'mir, 'tcx: 'a + 'mir>: crate::MiriEvalContextExt<' // neither of which have any effect on our current PRNG let _flags = this.read_scalar(args[3])?.to_i32()?; - let data = gen_random(this, len as usize)?; - this.memory_mut().get_mut(ptr.alloc_id)? - .write_bytes(tcx, ptr, &data)?; + if len > 0 { + let data = gen_random(this, len as usize)?; + this.memory_mut().get_mut(ptr.alloc_id)? + .write_bytes(tcx, ptr, &data)?; + } this.write_scalar(Scalar::from_uint(len, dest.layout.size), dest)?; } @@ -769,9 +771,11 @@ pub trait EvalContextExt<'a, 'mir, 'tcx: 'a + 'mir>: crate::MiriEvalContextExt<' let ptr = this.read_scalar(args[0])?.to_ptr()?; let len = this.read_scalar(args[1])?.to_usize(this)?; - let data = gen_random(this, len as usize)?; - this.memory_mut().get_mut(ptr.alloc_id)? - .write_bytes(tcx, ptr, &data)?; + if len > 0 { + let data = gen_random(this, len as usize)?; + this.memory_mut().get_mut(ptr.alloc_id)? + .write_bytes(tcx, ptr, &data)?; + } this.write_scalar(Scalar::from_bool(true), dest)?; }