Skip to content

Commit

Permalink
elf: Add test coverage for SectionHeader::parse_impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexandre Lissy committed Mar 10, 2024
1 parent 7e1d095 commit dba757b
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions tests/elf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,36 @@ fn parse_text_section_size_lazy(base: &[u8]) -> Result<u64, &'static str> {
Err("Didn't find text section")
}

fn parse_from_text_section_size_lazy(base: &[u8]) -> Result<bool, &'static str> {
let header = Elf::parse_header(base).map_err(|_| "parse elf header error")?;

use goblin::container::{Container, Ctx};
use goblin::elf::SectionHeader;

let ctx = Ctx {
le: scroll::Endian::Little,
container: Container::Big,
};

let sh_from_orig =
SectionHeader::parse(base, header.e_shoff as usize, header.e_shnum as usize, ctx)
.map_err(|_| "parse() section headers error")?;

let sh_from_offset = SectionHeader::parse_from(
&base[header.e_shoff as usize..],
0,
header.e_shnum as usize,
ctx,
)
.map_err(|_| "parse_from() section headers error")?;

if sh_from_orig == sh_from_offset {
return Ok(true);
}

Err("Mismatching offset reading")
}

#[test]
fn test_parse_gnu_hash_section_64bit() {
static ALIGNED_DATA: &AlignedData<[u8]> =
Expand Down Expand Up @@ -148,6 +178,13 @@ fn test_parse_text_section_size_lazy() {
assert_eq!(parse_text_section_size_lazy(&ALIGNED_DATA.0), Ok(0x126));
}

#[test]
fn test_parse_from_text_section_size_lazy() {
static ALIGNED_DATA: &AlignedData<[u8]> =
&AlignedData(*include_bytes!("bins/elf/gnu_hash/hello.so"));
assert_eq!(parse_from_text_section_size_lazy(&ALIGNED_DATA.0), Ok(true));
}

#[test]
fn test_oom() {
use goblin::container::{Container, Ctx};
Expand Down

0 comments on commit dba757b

Please sign in to comment.