From faa54e59c1c276d153299c73afdea246941ec952 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 2 Feb 2015 20:01:10 -0800 Subject: [PATCH] Make sure that CALL addr is always 20 bytes --- vm/vm.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vm/vm.go b/vm/vm.go index 4364b1cb92..69e061e548 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -516,7 +516,7 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I case BLOCKHASH: num := stack.Pop() - n := U256(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big257)) + n := new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big257) if num.Cmp(n) > 0 && num.Cmp(self.env.BlockNumber()) < 0 { stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64()))) } else { @@ -681,8 +681,6 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I self.Dbg.SetCode(context.Code) } case CALL, CALLCODE: - self.Endl() - gas := stack.Pop() // Pop gas and value of the stack. value, addr := stack.Popn() @@ -691,6 +689,9 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I // Pop return size and offset retSize, retOffset := stack.Popn() + address := ethutil.Address(addr.Bytes()) + self.Printf(" => %x", address).Endl() + // Get the arguments from the memory args := mem.Get(inOffset.Int64(), inSize.Int64()) @@ -699,9 +700,9 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I err error ) if op == CALLCODE { - ret, err = self.env.CallCode(context, addr.Bytes(), args, gas, price, value) + ret, err = self.env.CallCode(context, address, args, gas, price, value) } else { - ret, err = self.env.Call(context, addr.Bytes(), args, gas, price, value) + ret, err = self.env.Call(context, address, args, gas, price, value) } if err != nil {