mirror of
https://gitlab.com/pulsechaincom/go-pulse.git
synced 2024-12-25 12:57:17 +00:00
Make sure that CALL addr is always 20 bytes
This commit is contained in:
parent
93ae7bb0d2
commit
faa54e59c1
11
vm/vm.go
11
vm/vm.go
@ -516,7 +516,7 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
|
|||||||
case BLOCKHASH:
|
case BLOCKHASH:
|
||||||
num := stack.Pop()
|
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 {
|
if num.Cmp(n) > 0 && num.Cmp(self.env.BlockNumber()) < 0 {
|
||||||
stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
|
stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
|
||||||
} else {
|
} else {
|
||||||
@ -681,8 +681,6 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
|
|||||||
self.Dbg.SetCode(context.Code)
|
self.Dbg.SetCode(context.Code)
|
||||||
}
|
}
|
||||||
case CALL, CALLCODE:
|
case CALL, CALLCODE:
|
||||||
self.Endl()
|
|
||||||
|
|
||||||
gas := stack.Pop()
|
gas := stack.Pop()
|
||||||
// Pop gas and value of the stack.
|
// Pop gas and value of the stack.
|
||||||
value, addr := stack.Popn()
|
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
|
// Pop return size and offset
|
||||||
retSize, retOffset := stack.Popn()
|
retSize, retOffset := stack.Popn()
|
||||||
|
|
||||||
|
address := ethutil.Address(addr.Bytes())
|
||||||
|
self.Printf(" => %x", address).Endl()
|
||||||
|
|
||||||
// Get the arguments from the memory
|
// Get the arguments from the memory
|
||||||
args := mem.Get(inOffset.Int64(), inSize.Int64())
|
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
|
err error
|
||||||
)
|
)
|
||||||
if op == CALLCODE {
|
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 {
|
} 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 {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user