diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-29 05:23:40 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-29 05:23:40 +0800 |
commit | 2ef3a989298aa8dca7872be07ad0abbc32728cc7 (patch) | |
tree | 967b2e6b8241642af207667c5db7fab00701cd3b /ethchain/vm.go | |
parent | 95adac7522d6041a2d6bf7b2c6b1fd311c4e6e2a (diff) | |
parent | 4d987624867fc02a079d8355c28bad620db85f06 (diff) | |
download | dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar.gz dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar.bz2 dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar.lz dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar.xz dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.tar.zst dexon-2ef3a989298aa8dca7872be07ad0abbc32728cc7.zip |
Merge branch 'develop'
Diffstat (limited to 'ethchain/vm.go')
-rw-r--r-- | ethchain/vm.go | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/ethchain/vm.go b/ethchain/vm.go index 85136e435..9720d8be1 100644 --- a/ethchain/vm.go +++ b/ethchain/vm.go @@ -326,9 +326,15 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro case CALLDATALOAD: require(1) offset := stack.Pop().Int64() - val := closure.Args[offset : offset+32] - stack.Push(ethutil.BigD(val)) + var data []byte + if len(closure.Args) >= int(offset+32) { + data = closure.Args[offset : offset+32] + } else { + data = []byte{0} + } + + stack.Push(ethutil.BigD(data)) case CALLDATASIZE: stack.Push(big.NewInt(int64(len(closure.Args)))) case GASPRICE: @@ -498,7 +504,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro contract.AddAmount(value) // Create a new callable closure - closure := NewClosure(closure.Object(), contract, contract.script, vm.state, gas, closure.Price) + closure := NewClosure(closure, contract, contract.script, vm.state, gas, closure.Price) // Executer the closure and get the return value (if any) ret, _, err := closure.Call(vm, args, hook) if err != nil { |