File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -408,14 +408,21 @@ RList *r_bin_ne_get_entrypoints(r_bin_ne_obj_t *bin) {
408408 off += 2 ;
409409 ut8 segnum = * (bin -> entry_table + off );
410410 off ++ ;
411- ut16 segoff = * (ut16 * )(bin -> entry_table + off );
412- if (segnum > 0 ) {
411+ if (off > bin -> ne_header -> EntryTableLength ) {
412+ break ;
413+ }
414+ ut16 segoff = r_read_le16 (bin -> entry_table + off );
415+ if (segnum > 0 && segnum < bin -> ne_header -> SegCount ) {
413416 entry -> paddr = (ut64 )bin -> segment_entries [segnum - 1 ].offset * bin -> alignment + segoff ;
414417 }
415418 } else { // Fixed
419+ if (off + 2 >= bin -> ne_header -> EntryTableLength ) {
420+ break ;
421+ }
422+ ut16 delta = r_read_le16 (bin -> entry_table + off );
416423 if (bundle_type < bin -> ne_header -> SegCount ) {
417424 entry -> paddr = (ut64 )bin -> segment_entries [bundle_type - 1 ].offset
418- * bin -> alignment + * ( ut16 * )( bin -> entry_table + off ) ;
425+ * bin -> alignment + delta ;
419426 }
420427 }
421428 off += 2 ;
You can’t perform that action at this time.
0 commit comments