Skip to content

Commit be2fdc2

Browse files
committed
fix for the code rabbit
1 parent 38afafb commit be2fdc2

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

chain/api/src/range_locate.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use starcoin_storage::Store;
99

1010
use crate::ChainReader;
1111

12+
const MAX_RANGE_POWER: u32 = 17; // 2^17 = 131,072 blocks
13+
1214
#[derive(Debug)]
1315
pub enum FindCommonHeader {
1416
AllInRange, // all in range
@@ -106,6 +108,9 @@ pub fn get_range_in_location(
106108

107109
let end_number = if let Some(end_id) = end_id {
108110
if let Some(end_block_header) = storage.get_block_header_by_hash(end_id)? {
111+
if end_block_header.number() < start_block_header.number() {
112+
return Ok(RangeInLocation::NotInSelectedChain);
113+
}
109114
end_block_header.number()
110115
} else {
111116
chain.current_header().number()
@@ -114,8 +119,14 @@ pub fn get_range_in_location(
114119
chain.current_header().number()
115120
};
116121

117-
for index in 0..=17 {
118-
let block_number = start_block_header.number().saturating_add(2u64.pow(index));
122+
for index in 0..=MAX_RANGE_POWER {
123+
let step = 2u64
124+
.checked_pow(index)
125+
.ok_or_else(|| anyhow::format_err!("Block number step calculation overflow"))?;
126+
let block_number = start_block_header
127+
.number()
128+
.checked_add(step)
129+
.ok_or_else(|| anyhow::format_err!("Block number calculation overflow"))?;
119130
if block_number > chain.current_header().number() {
120131
break;
121132
}

0 commit comments

Comments
 (0)