miner, rpc: added length check for extra data

This commit is contained in:
Jeffrey Wilcke 2015-08-07 12:12:05 +02:00
parent 785b3e7a57
commit 132df860d9
2 changed files with 10 additions and 7 deletions

@ -18,6 +18,7 @@
package miner package miner
import ( import (
"fmt"
"math/big" "math/big"
"sync/atomic" "sync/atomic"
@ -29,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/pow"
) )
@ -143,8 +145,13 @@ func (self *Miner) HashRate() int64 {
return self.pow.GetHashrate() return self.pow.GetHashrate()
} }
func (self *Miner) SetExtra(extra []byte) { func (self *Miner) SetExtra(extra []byte) error {
if uint64(len(extra)) > params.MaximumExtraDataSize.Uint64() {
return fmt.Errorf("Extra exceeds max length. %d > %v", len(extra), params.MaximumExtraDataSize)
}
self.worker.extra = extra self.worker.extra = extra
return nil
} }
func (self *Miner) PendingState() *state.StateDB { func (self *Miner) PendingState() *state.StateDB {

@ -17,12 +17,9 @@
package api package api
import ( import (
"fmt"
"github.com/ethereum/ethash" "github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/rpc/shared"
) )
@ -126,11 +123,10 @@ func (self *minerApi) SetExtra(req *shared.Request) (interface{}, error) {
return nil, err return nil, err
} }
if uint64(len(args.Data)) > params.MaximumExtraDataSize.Uint64()*2 { if err := self.ethereum.Miner().SetExtra([]byte(args.Data)); err != nil {
return false, fmt.Errorf("extra datasize can be no longer than %v bytes", params.MaximumExtraDataSize) return false, err
} }
self.ethereum.Miner().SetExtra([]byte(args.Data))
return true, nil return true, nil
} }