aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2015-08-07 18:12:05 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2015-08-07 18:24:44 +0800
commit132df860d90c163a8be55260bdd219892f9e1bef (patch)
tree9cb6baee47979b9a0d864b72466d0d15ecd08185
parent785b3e7a575f26f3c33e3369d8a75fb131f90584 (diff)
downloadgo-tangerine-132df860d90c163a8be55260bdd219892f9e1bef.tar.gz
go-tangerine-132df860d90c163a8be55260bdd219892f9e1bef.tar.zst
go-tangerine-132df860d90c163a8be55260bdd219892f9e1bef.zip
miner, rpc: added length check for extra data
-rw-r--r--miner/miner.go9
-rw-r--r--rpc/api/miner.go8
2 files changed, 10 insertions, 7 deletions
diff --git a/miner/miner.go b/miner/miner.go
index bf6a48802..3095d9828 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -18,6 +18,7 @@
package miner
import (
+ "fmt"
"math/big"
"sync/atomic"
@@ -29,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
+ "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/pow"
)
@@ -143,8 +145,13 @@ func (self *Miner) HashRate() int64 {
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
+ return nil
}
func (self *Miner) PendingState() *state.StateDB {
diff --git a/rpc/api/miner.go b/rpc/api/miner.go
index 3c3d1ee0b..5325a660a 100644
--- a/rpc/api/miner.go
+++ b/rpc/api/miner.go
@@ -17,12 +17,9 @@
package api
import (
- "fmt"
-
"github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/common"
"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/shared"
)
@@ -126,11 +123,10 @@ func (self *minerApi) SetExtra(req *shared.Request) (interface{}, error) {
return nil, err
}
- if uint64(len(args.Data)) > params.MaximumExtraDataSize.Uint64()*2 {
- return false, fmt.Errorf("extra datasize can be no longer than %v bytes", params.MaximumExtraDataSize)
+ if err := self.ethereum.Miner().SetExtra([]byte(args.Data)); err != nil {
+ return false, err
}
- self.ethereum.Miner().SetExtra([]byte(args.Data))
return true, nil
}