pijul nest
guest [sign in]

Elfedit: Error instead of assert when there is no section table

pmeunier
May 8, 2025, 5:14 PM
FRNJITN6RQ2HFEEQX6EKZVZ7PYT2JAIGZX5J25LIVLPV7OLUNYFQC

Dependencies

  • [2] Z43EQIWN Elfedit: edit to file
  • [3] 5PJAXSZ7 Elfedit: correct reallocation of dynstr/dynamic
  • [4] WGAKJ25E Adding a debug_svg command
  • [5] ZV57M4VN Debugging
  • [6] AR2X3TLA Initial commit: introducing elfedit

Change contents

  • edit in elfedit/src/lib.rs at line 84
    [3.57]
    [3.2912]
    #[error("No section table")]
    NoSectionTable,
  • replacement in elfedit/src/lib.rs at line 557
    [3.5179][3.11302:11383](),[3.11302][3.11302:11383]()
    let map = unsafe { memmap::MmapOptions::new().map_mut(&file).unwrap() };
    [3.5179]
    [3.5180]
    let map = unsafe { memmap::MmapOptions::new().map_mut(&file)? };
  • replacement in elfedit/src/lib.rs at line 628
    [3.3198][3.3198:3244]()
    let s = self.section(i as usize);
    [3.3198]
    [3.3244]
    let s = self.section(i as usize).unwrap();
  • replacement in elfedit/src/lib.rs at line 631
    [3.3323][3.3323:3372]()
    let names = self.names(id.data, &h);
    [3.3323]
    [3.3372]
    let names = self.names(id.data, &h).unwrap();
  • replacement in elfedit/src/lib.rs at line 697
    [3.11565][3.11565:11628]()
    fn section<'a>(&'a self, n: usize) -> SectionHeader_<'a> {
    [3.11565]
    [3.11628]
    fn section<'a>(&'a self, n: usize) -> Result<SectionHeader_<'a>, Error> {
  • replacement in elfedit/src/lib.rs at line 704
    [3.11856][3.11856:11947]()
    assert!(ph + std::mem::size_of::<SectionHeader<u32>>() <= self.map.len());
    [3.11856]
    [3.11947]
    if ph + std::mem::size_of::<SectionHeader<u32>>() > self.map.len() {
    return Err(Error::NoSectionTable)
    }
  • replacement in elfedit/src/lib.rs at line 708
    [3.12027][3.12027:12072]()
    SectionHeader_::B32(unsafe {
    [3.12027]
    [3.12072]
    Ok(SectionHeader_::B32(unsafe {
  • replacement in elfedit/src/lib.rs at line 710
    [3.12166][3.12166:12185]()
    })
    [3.12166]
    [3.12185]
    }))
  • replacement in elfedit/src/lib.rs at line 713
    [3.12232][3.12232:12323]()
    assert!(ph + std::mem::size_of::<SectionHeader<u64>>() <= self.map.len());
    [3.12232]
    [3.12323]
    if ph + std::mem::size_of::<SectionHeader<u64>>() > self.map.len() {
    return Err(Error::NoSectionTable)
    }
  • replacement in elfedit/src/lib.rs at line 717
    [3.12403][3.12403:12448]()
    SectionHeader_::B64(unsafe {
    [3.12403]
    [3.12448]
    Ok(SectionHeader_::B64(unsafe {
  • replacement in elfedit/src/lib.rs at line 719
    [3.12542][3.12542:12561]()
    })
    [3.12542]
    [3.12561]
    }))
  • replacement in elfedit/src/lib.rs at line 814
    [3.15411][3.15411:15487](),[3.15487][3.15487:15547]()
    fn names<'a>(&'a self, id: Endianness, header: &Header_) -> Names<'a> {
    let s = self.section(header.shstrndx(id) as usize);
    [3.15411]
    [3.15547]
    fn names<'a>(&'a self, id: Endianness, header: &Header_) -> Result<Names<'a>, Error> {
    let s = self.section(header.shstrndx(id) as usize)?;
  • replacement in elfedit/src/lib.rs at line 818
    [3.15631][3.15631:15679]()
    Names(&self.map[offset..offset + size])
    [3.15631]
    [3.15679]
    Ok(Names(&self.map[offset..offset + size]))
  • replacement in elfedit/src/lib.rs at line 894
    [3.18403][3.18403:18453]()
    let names = self.names(id.data, &header);
    [3.18403]
    [3.18453]
    let names = match self.names(id.data, &header) {
    Ok(names) => names,
    Err(Error::NoSectionTable) => {
    return Ok(None)
    },
    Err(e) => return Err(e)
    };
  • replacement in elfedit/src/lib.rs at line 905
    [3.18617][3.18617:18663]()
    let s = self.section(i as usize);
    [3.18617]
    [3.18663]
    let s = self.section(i as usize)?;
  • replacement in elfedit/src/lib.rs at line 943
    [3.1516][3.1516:1566]()
    let names = self.names(id.data, &header);
    [3.1516]
    [3.1566]
    let names = self.names(id.data, &header)?;
  • replacement in elfedit/src/lib.rs at line 945
    [3.1610][3.1610:1656]()
    let s = self.section(i as usize);
    [3.1610]
    [3.1656]
    let s = self.section(i as usize)?;
  • replacement in elfedit/src/lib.rs at line 959
    [3.20724][3.20724:20769]()
    let names = self.names(id, &header);
    [3.20724]
    [3.20769]
    let names = self.names(id, &header)?;
  • replacement in elfedit/src/lib.rs at line 1005
    [3.22076][3.22076:22138]()
    let off = self.section(interp_i as usize).offset(id);
    [3.22076]
    [3.22138]
    let off = self.section(interp_i as usize)?.offset(id);
  • replacement in elfedit/src/lib.rs at line 1016
    [3.22418][3.22418:22484]()
    let off = self.section(interp_i as usize).offset(id);
    [3.22418]
    [3.22484]
    let off = self.section(interp_i as usize)?.offset(id);
  • replacement in elfedit/src/lib.rs at line 1042
    [3.6451][3.6451:6503]()
    let sh = self.section(p_ as usize);
    [3.6451]
    [2.0]
    let sh = self.section(p_ as usize).unwrap();
  • replacement in elfedit/src/lib.rs at line 1477
    [3.16600][2.2446:2499]()
    elf.update_dynamic::<u32>(id, t)
    [3.16600]
    [3.16654]
    elf.update_dynamic::<u32>(id, t)?
  • replacement in elfedit/src/lib.rs at line 1482
    [3.16772][2.2500:2553]()
    elf.update_dynamic::<u64>(id, t)
    [3.16772]
    [3.16826]
    elf.update_dynamic::<u64>(id, t)?
  • replacement in elfedit/src/lib.rs at line 1492
    [3.30512][3.17002:17075]()
    fn update_dynamic<F: Flags>(&self, id: Endianness, f: &mut F::Dyn) {
    [3.30512]
    [3.17075]
    fn update_dynamic<F: Flags>(&self, id: Endianness, f: &mut F::Dyn) -> Result<(), Error> {
  • replacement in elfedit/src/lib.rs at line 1495
    [3.17195][3.17195:17234]()
    let sec = self.section(s);
    [3.17195]
    [3.17234]
    let sec = self.section(s)?;
  • replacement in elfedit/src/lib.rs at line 1499
    [3.17414][3.17414:17453]()
    let sec = self.section(s);
    [3.17414]
    [3.17453]
    let sec = self.section(s)?;
  • replacement in elfedit/src/lib.rs at line 1503
    [3.5234][3.5234:5273]()
    let sec = self.section(s);
    [3.5234]
    [3.5273]
    let sec = self.section(s)?;
  • edit in elfedit/src/lib.rs at line 1506
    [3.17517]
    [3.17517]
    Ok(())