diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-04 01:29:47 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-04 01:29:47 +0800 |
commit | 861031491860c69f29e1444c22dd84c38abfedf4 (patch) | |
tree | 0025aeed5a7c93044e6772623e7b0e7ced6e9818 | |
parent | 71d9367edcc5c42b1054fa6ad69e5b4fd954fd40 (diff) | |
parent | 147a699c6543b1e4ec8c933f8aaff4e0639897b6 (diff) | |
download | go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar.gz go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar.bz2 go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar.lz go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar.xz go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.tar.zst go-tangerine-861031491860c69f29e1444c22dd84c38abfedf4.zip |
Merge pull request #1167 from Gustav-Simonsson/check_ec_recover_err
Add missing err checks on From()
-rw-r--r-- | cmd/geth/admin.go | 1 | ||||
-rw-r--r-- | core/state_transition.go | 35 | ||||
-rw-r--r-- | core/transaction_pool.go | 2 | ||||
-rw-r--r-- | xeth/types.go | 5 |
4 files changed, 25 insertions, 18 deletions
diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go index f0be444c6..01de97ac2 100644 --- a/cmd/geth/admin.go +++ b/cmd/geth/admin.go @@ -160,7 +160,6 @@ func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value { //ltxs := make([]*tx, len(txs)) var ltxs []*tx for _, tx := range txs { - // no need to check err if from, _ := tx.From(); accountSet.Has(from) { ltxs = append(ltxs, newTx(tx)) } diff --git a/core/state_transition.go b/core/state_transition.go index 3d11a0464..7672fa3ff 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -62,7 +62,6 @@ type Message interface { func AddressFromMessage(msg Message) common.Address { from, _ := msg.From() - return crypto.CreateAddress(from, msg.Nonce()) } @@ -109,9 +108,12 @@ func NewStateTransition(env vm.Environment, msg Message, coinbase *state.StateOb func (self *StateTransition) Coinbase() *state.StateObject { return self.state.GetOrNewStateObject(self.coinbase) } -func (self *StateTransition) From() *state.StateObject { - f, _ := self.msg.From() - return self.state.GetOrNewStateObject(f) +func (self *StateTransition) From() (*state.StateObject, error) { + f, err := self.msg.From() + if err != nil { + return nil, err + } + return self.state.GetOrNewStateObject(f), nil } func (self *StateTransition) To() *state.StateObject { if self.msg == nil { @@ -140,7 +142,10 @@ func (self *StateTransition) AddGas(amount *big.Int) { func (self *StateTransition) BuyGas() error { var err error - sender := self.From() + sender, err := self.From() + if err != nil { + return err + } if sender.Balance().Cmp(MessageGasValue(self.msg)) < 0 { return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address().Bytes()[:4], MessageGasValue(self.msg), sender.Balance()) } @@ -159,10 +164,11 @@ func (self *StateTransition) BuyGas() error { } func (self *StateTransition) preCheck() (err error) { - var ( - msg = self.msg - sender = self.From() - ) + msg := self.msg + sender, err := self.From() + if err != nil { + return err + } // Make sure this transaction's nonce is correct if sender.Nonce() != msg.Nonce() { @@ -185,10 +191,8 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er return } - var ( - msg = self.msg - sender = self.From() - ) + msg := self.msg + sender, _ := self.From() // err checked in preCheck // Pay intrinsic gas if err = self.UseGas(IntrinsicGas(self.msg)); err != nil { @@ -212,7 +216,7 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er } else { // Increment the nonce for the next transaction self.state.SetNonce(sender.Address(), sender.Nonce()+1) - ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) + ret, err = vmenv.Call(sender, self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) } if err != nil && IsValueTransferErr(err) { @@ -226,7 +230,8 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er } func (self *StateTransition) refundGas() { - coinbase, sender := self.Coinbase(), self.From() + coinbase := self.Coinbase() + sender, _ := self.From() // err already checked // Return remaining gas remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) sender.AddBalance(remaining) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index ee6360614..4296c79f6 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -271,7 +271,7 @@ func (pool *TxPool) Stop() { } func (self *TxPool) queueTx(tx *types.Transaction) { - from, _ := tx.From() + from, _ := tx.From() // already validated self.queue[from] = append(self.queue[from], tx) } diff --git a/xeth/types.go b/xeth/types.go index 1be5e109c..3bb1447ca 100644 --- a/xeth/types.go +++ b/xeth/types.go @@ -139,6 +139,10 @@ type Transaction struct { } func NewTx(tx *types.Transaction) *Transaction { + sender, err := tx.From() + if err != nil { + return nil + } hash := tx.Hash().Hex() var receiver string @@ -147,7 +151,6 @@ func NewTx(tx *types.Transaction) *Transaction { } else { receiver = core.AddressFromMessage(tx).Hex() } - sender, _ := tx.From() createsContract := core.MessageCreatesContract(tx) var data string |