mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 11:20:45 +00:00
cmd/devp2p/ethtest: fix header stride in reverse GetHeaders
The reverse branch stepped by 1 - Skip while the forward branch steps by 1 + Skip. Skip is a uint64, so for Skip == 1 the block number never moved and the same header was returned repeatedly, and for Skip >= 2 the subtraction underflowed and walked forward instead of back. The stride is Skip + 1 in both directions, so subtract 1 + Skip.
This commit is contained in:
parent
c3f2851872
commit
e37b53b85a
2 changed files with 16 additions and 1 deletions
|
|
@ -231,7 +231,7 @@ func (c *Chain) GetHeaders(req *eth.GetBlockHeadersPacket) ([]*types.Header, err
|
||||||
}
|
}
|
||||||
if req.Reverse {
|
if req.Reverse {
|
||||||
for i := 1; i < int(req.Amount); i++ {
|
for i := 1; i < int(req.Amount); i++ {
|
||||||
blockNumber -= (1 - req.Skip)
|
blockNumber -= (1 + req.Skip)
|
||||||
headers[i] = c.blocks[blockNumber].Header()
|
headers[i] = c.blocks[blockNumber].Header()
|
||||||
}
|
}
|
||||||
return headers, nil
|
return headers, nil
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,21 @@ func TestChainGetHeaders(t *testing.T) {
|
||||||
chain.Head().Header(),
|
chain.Head().Header(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
req: eth.GetBlockHeadersPacket{
|
||||||
|
GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
|
||||||
|
Origin: eth.HashOrNumber{Number: uint64(10)},
|
||||||
|
Amount: uint64(3),
|
||||||
|
Skip: 1,
|
||||||
|
Reverse: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: []*types.Header{
|
||||||
|
chain.blocks[10].Header(),
|
||||||
|
chain.blocks[8].Header(),
|
||||||
|
chain.blocks[6].Header(),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue