Skip to content

Commit b9d51f2

Browse files
liuw1jyao1
authored andcommittedOct 10, 2022
td-loader: Add unit test case for PR 410
Fix: #416 Signed-off-by: Wei Liu <[email protected]>
1 parent 87f57c3 commit b9d51f2

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed
 

‎td-loader/src/elf64.rs

+43
Original file line numberDiff line numberDiff line change
@@ -924,4 +924,47 @@ mod test_elf_loader {
924924
hdr.sh_size = 0x1;
925925
hdr.vm_range();
926926
}
927+
928+
#[test]
929+
fn test_programheaders_iterator() {
930+
const ENTRY_SIZE: usize = 56;
931+
let pe_image = &include_bytes!("../../data/blobs/td-payload.elf")[..];
932+
let elf = crate::elf64::Elf::parse(pe_image).unwrap();
933+
let mut p_hdrs = elf.program_headers().unwrap();
934+
935+
p_hdrs.index = (usize::MAX as usize / ENTRY_SIZE) + 1;
936+
assert!(p_hdrs.next().is_none());
937+
}
938+
939+
#[test]
940+
fn test_sectionheaders_iterator() {
941+
const ENTRY_SIZE: usize = 64;
942+
let pe_image = &include_bytes!("../../data/blobs/td-payload.elf")[..];
943+
let elf = crate::elf64::Elf::parse(pe_image).unwrap();
944+
let mut s_hdrs = elf.section_headers().unwrap();
945+
946+
s_hdrs.index = (usize::MAX as usize / ENTRY_SIZE) + 1;
947+
assert!(s_hdrs.next().is_none());
948+
}
949+
950+
#[test]
951+
fn test_dyns_iterator() {
952+
const ENTRY_SIZE: usize = 16;
953+
let pe_image = &include_bytes!("../../data/blobs/td-payload.elf")[..];
954+
let elf = crate::elf64::Elf::parse(pe_image).unwrap();
955+
let elf_bin = elf.bytes;
956+
957+
for header in elf.program_headers().unwrap() {
958+
println!("header: {:?}\n", header);
959+
960+
let mut dyns = Dyns::parse(
961+
&elf_bin[header.p_offset as usize..],
962+
header.p_filesz as usize,
963+
)
964+
.unwrap();
965+
966+
dyns.index = (usize::MAX as usize / ENTRY_SIZE) + 1;
967+
assert!(dyns.next().is_none());
968+
}
969+
}
927970
}

‎td-loader/src/pe.rs

+18
Original file line numberDiff line numberDiff line change
@@ -598,4 +598,22 @@ mod test {
598598
}
599599
assert_eq!(entries, 1);
600600
}
601+
602+
#[test]
603+
fn test_sections_iterator() {
604+
let pe_image = &include_bytes!("../../data/blobs/td-payload.efi")[..];
605+
let coff_header_offset = pe_image.pread::<u32>(0x3c).unwrap() as usize;
606+
let pe_region = &pe_image[coff_header_offset..];
607+
608+
let num_sections = pe_region.pread::<u16>(6).unwrap() as usize;
609+
let optional_header_size = pe_region.pread::<u16>(20).unwrap() as usize;
610+
let optional_region = &pe_image[24 + coff_header_offset..];
611+
612+
let mut num_section = 0;
613+
let sections_buffer = &pe_image[(24 + coff_header_offset + optional_header_size)..];
614+
let mut sections = Sections::parse(sections_buffer, num_sections as usize).unwrap();
615+
616+
sections.index = (usize::MAX as usize / COFF_SECTION_SIZE) + 1;
617+
assert!(sections.next().is_none());
618+
}
601619
}

0 commit comments

Comments
 (0)