mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-10 06:57:24 +00:00
protect ourselves again underflow (Refs #911)
This commit is contained in:
committed by
Ethan Buchman
parent
86af889dfb
commit
f1fbf995f7
@@ -90,6 +90,7 @@ func (cs *ConsensusState) readReplayMessage(msg *TimedWALMessage, newStepCh chan
|
||||
|
||||
// replay only those messages since the last block.
|
||||
// timeoutRoutine should run concurrently to read off tickChan
|
||||
// CONTRACT: csHeight > 0
|
||||
func (cs *ConsensusState) catchupReplay(csHeight uint64) error {
|
||||
// set replayMode
|
||||
cs.replayMode = true
|
||||
|
||||
@@ -697,6 +697,7 @@ func (cs *ConsensusState) enterNewRound(height uint64, round int) {
|
||||
|
||||
// needProofBlock returns true on the first height (so the genesis app hash is signed right away)
|
||||
// and where the last block (height-1) caused the app hash to change
|
||||
// CONTRACT: height > 0
|
||||
func (cs *ConsensusState) needProofBlock(height uint64) bool {
|
||||
if height == 1 {
|
||||
return true
|
||||
|
||||
@@ -62,19 +62,28 @@ import (
|
||||
//
|
||||
// <aside class="notice">Returns at most 20 items.</aside>
|
||||
func BlockchainInfo(minHeight, maxHeight uint64) (*ctypes.ResultBlockchainInfo, error) {
|
||||
if minHeight == 0 {
|
||||
minHeight = 1
|
||||
}
|
||||
|
||||
if maxHeight == 0 {
|
||||
maxHeight = blockStore.Height()
|
||||
} else {
|
||||
maxHeight = cmn.MinUint64(blockStore.Height(), maxHeight)
|
||||
}
|
||||
if minHeight == 0 {
|
||||
minHeight = cmn.MaxUint64(1, maxHeight-20)
|
||||
} else {
|
||||
minHeight = cmn.MaxUint64(minHeight, maxHeight-20)
|
||||
|
||||
// maximum 20 block metas
|
||||
const limit uint64 = 20
|
||||
if maxHeight >= limit { // to prevent underflow
|
||||
minHeight = cmn.MaxUint64(minHeight, maxHeight-limit)
|
||||
}
|
||||
|
||||
logger.Debug("BlockchainInfoHandler", "maxHeight", maxHeight, "minHeight", minHeight)
|
||||
|
||||
if minHeight > maxHeight {
|
||||
return nil, fmt.Errorf("min height %d can't be greater than max height %d", minHeight, maxHeight)
|
||||
}
|
||||
|
||||
blockMetas := []*types.BlockMeta{}
|
||||
for height := maxHeight; height >= minHeight; height-- {
|
||||
blockMeta := blockStore.LoadBlockMeta(height)
|
||||
|
||||
Reference in New Issue
Block a user