Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
[trace] check mem diff within range (#11002)
Browse files Browse the repository at this point in the history
  • Loading branch information
ordian authored and dvdplm committed Aug 28, 2019
1 parent 5ce249a commit 4f12d7a
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions ethcore/trace/src/executive_tracer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use ethereum_types::{U256, Address};
use vm::{Error as VmError, ActionParams};
use log::debug;
use log::{debug, warn};
use crate::{
Tracer, VMTracer, FlatTrace,
trace::{Call, Create, Action, Res, CreateResult, CallResult, VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, Suicide, Reward, RewardType},
Expand Down Expand Up @@ -248,7 +248,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 {
Expand Down

0 comments on commit 4f12d7a

Please sign in to comment.