File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -155,14 +155,19 @@ fn get_jump_table_entries(
155155 . and_then ( |( _, s) | if s. size_known { NonZeroU32 :: new ( s. size as u32 ) } else { None } ) ;
156156
157157 if let Some ( size) = known_size. or ( size) . map ( |n| n. get ( ) ) {
158+ let end = ( addr. address + size) . min ( ( section. address + section. size ) as u32 ) ;
159+ if end <= addr. address {
160+ return Ok ( ( Vec :: new ( ) , 0 ) ) ;
161+ }
162+ let clamped_size = end - addr. address ;
158163 log:: trace!(
159164 "Located jump table @ {:#010X} with entry count {} (from {:#010X})" ,
160165 addr,
161- size / 4 ,
166+ clamped_size / 4 ,
162167 from
163168 ) ;
164- let mut entries = Vec :: with_capacity ( size as usize / 4 ) ;
165- let mut data = section. data_range ( addr. address , addr . address + size ) ?;
169+ let mut entries = Vec :: with_capacity ( clamped_size as usize / 4 ) ;
170+ let mut data = section. data_range ( addr. address , end ) ?;
166171 let mut cur_addr = addr;
167172 loop {
168173 if data. is_empty ( ) {
@@ -192,7 +197,7 @@ fn get_jump_table_entries(
192197 data = & data[ 4 ..] ;
193198 cur_addr += 4 ;
194199 }
195- Ok ( ( entries, size ) )
200+ Ok ( ( entries, clamped_size ) )
196201 } else {
197202 let mut entries = Vec :: new ( ) ;
198203 let mut cur_addr = addr;
You can’t perform that action at this time.
0 commit comments