File tree Expand file tree Collapse file tree 1 file changed +13
-2
lines changed Expand file tree Collapse file tree 1 file changed +13
-2
lines changed Original file line number Diff line number Diff line change @@ -9,6 +9,8 @@ use starcoin_storage::Store;
9
9
10
10
use crate :: ChainReader ;
11
11
12
+ const MAX_RANGE_POWER : u32 = 17 ; // 2^17 = 131,072 blocks
13
+
12
14
#[ derive( Debug ) ]
13
15
pub enum FindCommonHeader {
14
16
AllInRange , // all in range
@@ -106,6 +108,9 @@ pub fn get_range_in_location(
106
108
107
109
let end_number = if let Some ( end_id) = end_id {
108
110
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
+ }
109
114
end_block_header. number ( )
110
115
} else {
111
116
chain. current_header ( ) . number ( )
@@ -114,8 +119,14 @@ pub fn get_range_in_location(
114
119
chain. current_header ( ) . number ( )
115
120
} ;
116
121
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" ) ) ?;
119
130
if block_number > chain. current_header ( ) . number ( ) {
120
131
break ;
121
132
}
You can’t perform that action at this time.
0 commit comments