Skip to content

Commit b61ef24

Browse files
consensus/clique: prevent 0 len extradata from panicing (#23538)
Closes #23522 Co-authored-by: Martin Holst Swende <[email protected]>
1 parent d8211c7 commit b61ef24

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

core/genesis.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block {
310310
func (g *Genesis) Commit(db ethdb.Database) (*types.Block, error) {
311311
block := g.ToBlock(db)
312312
if block.Number().Sign() != 0 {
313-
return nil, fmt.Errorf("can't commit genesis block with number > 0")
313+
return nil, errors.New("can't commit genesis block with number > 0")
314314
}
315315
config := g.Config
316316
if config == nil {
@@ -319,6 +319,9 @@ func (g *Genesis) Commit(db ethdb.Database) (*types.Block, error) {
319319
if err := config.CheckConfigForkOrder(); err != nil {
320320
return nil, err
321321
}
322+
if config.Clique != nil && len(block.Extra()) == 0 {
323+
return nil, errors.New("can't start clique chain without signers")
324+
}
322325
rawdb.WriteTd(db, block.Hash(), block.NumberU64(), g.Difficulty)
323326
rawdb.WriteBlock(db, block)
324327
rawdb.WriteReceipts(db, block.Hash(), block.NumberU64(), nil)

core/genesis_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,22 @@ func TestDefaultGenesisBlock(t *testing.T) {
3939
if block.Hash() != params.RopstenGenesisHash {
4040
t.Errorf("wrong ropsten genesis hash, got %v, want %v", block.Hash(), params.RopstenGenesisHash)
4141
}
42+
block = DefaultRinkebyGenesisBlock().ToBlock(nil)
43+
if block.Hash() != params.RinkebyGenesisHash {
44+
t.Errorf("wrong rinkeby genesis hash, got %v, want %v", block.Hash(), params.RinkebyGenesisHash)
45+
}
46+
block = DefaultGoerliGenesisBlock().ToBlock(nil)
47+
if block.Hash() != params.GoerliGenesisHash {
48+
t.Errorf("wrong goerli genesis hash, got %v, want %v", block.Hash(), params.GoerliGenesisHash)
49+
}
50+
}
51+
52+
func TestInvalidCliqueConfig(t *testing.T) {
53+
block := DefaultGoerliGenesisBlock()
54+
block.ExtraData = []byte{}
55+
if _, err := block.Commit(nil); err == nil {
56+
t.Fatal("Expected error on invalid clique config")
57+
}
4258
}
4359

4460
func TestSetupGenesis(t *testing.T) {

miner/worker_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ var (
7474
func init() {
7575
testTxPoolConfig = core.DefaultTxPoolConfig
7676
testTxPoolConfig.Journal = ""
77-
ethashChainConfig = params.TestChainConfig
78-
cliqueChainConfig = params.TestChainConfig
77+
ethashChainConfig = new(params.ChainConfig)
78+
*ethashChainConfig = *params.TestChainConfig
79+
cliqueChainConfig = new(params.ChainConfig)
80+
*cliqueChainConfig = *params.TestChainConfig
7981
cliqueChainConfig.Clique = &params.CliqueConfig{
8082
Period: 10,
8183
Epoch: 30000,

0 commit comments

Comments
 (0)