From e5ff5518851a179601b06f2d61587981a3a7b407 Mon Sep 17 00:00:00 2001 From: Jan Michael Auer Date: Tue, 3 Dec 2019 08:12:03 +0100 Subject: [PATCH] Support ELF with empty PT_DYNAMIC reference (#193) --- src/elf/dynamic.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/elf/dynamic.rs b/src/elf/dynamic.rs index 94e8e5dc9..466bedda5 100644 --- a/src/elf/dynamic.rs +++ b/src/elf/dynamic.rs @@ -372,10 +372,14 @@ if_alloc! { let offset = phdr.p_offset as usize; let filesz = phdr.p_filesz as usize; // Ensure offset and filesz are valid. - let bytes = bytes - .pread_with::<&[u8]>(offset, filesz) - .map_err(|_| crate::error::Error::Malformed(format!("Invalid PT_DYNAMIC size (offset {:#x}, filesz {:#x})", - offset, filesz)))?; + let bytes = if filesz > 0 { + bytes + .pread_with::<&[u8]>(offset, filesz) + .map_err(|_| crate::error::Error::Malformed(format!("Invalid PT_DYNAMIC size (offset {:#x}, filesz {:#x})", + offset, filesz)))? + } else { + &[] + }; let size = Dyn::size_with(&ctx); let count = filesz / size; let mut dyns = Vec::with_capacity(count);