]> git.lizzy.rs Git - rust.git/commitdiff
fix 0-sized getrandom
authorRalf Jung <post@ralfj.de>
Tue, 16 Apr 2019 17:26:02 +0000 (19:26 +0200)
committerRalf Jung <post@ralfj.de>
Tue, 16 Apr 2019 17:26:02 +0000 (19:26 +0200)
src/fn_call.rs

index bb6d6aed490549660418d35b4c796bc73b7a4b87..718f1c24ac79ce16791d43527bf7d66cbe1ab8c5 100644 (file)
@@ -241,9 +241,11 @@ fn emulate_foreign_item(
                         // 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 @@ fn emulate_foreign_item(
                 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)?;
             }