v2.5.7 stable (#11006)

* [trace] check mem diff within range (#11002)

* Update version (v2.5.7-stable)
This commit is contained in:
s3krit
2019-08-29 12:06:49 +02:00
committed by GitHub
parent ff398fe7ff
commit 6bd7db96fe
4 changed files with 23 additions and 10 deletions

View File

@@ -18,6 +18,7 @@
use ethereum_types::{U256, Address};
use vm::{Error as VmError, ActionParams};
use log::{debug, warn};
use trace::trace::{Call, Create, Action, Res, CreateResult, CallResult, VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, Suicide, Reward, RewardType};
use trace::{Tracer, VMTracer, FlatTrace};
@@ -245,7 +246,19 @@ impl VMTracer for ExecutiveVMTracer {
}
fn trace_executed(&mut self, gas_used: U256, stack_push: &[U256], mem: &[u8]) {
let mem_diff = self.last_mem_written.take().map(|(o, s)| (o, &(mem[o..o+s])));
let mem_diff = self.last_mem_written.take().map(|(o, s)| {
if o + s > mem.len() {
warn!(
target: "trace",
"Last mem written is out of bounds {} (mem is {})",
o + s,
mem.len(),
);
(o, &[][..])
} else {
(o, &(mem[o..o+s]))
}
});
let store_diff = self.last_store_written.take();
Self::with_trace_in_depth(&mut self.data, self.depth, move |trace| {
let ex = VMExecutedOperation {