diff options
author | midipix <writeonce@midipix.org> | 2025-06-15 16:12:45 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-06-15 16:12:45 +0000 |
commit | b6bb33077411781ae7774b386c874244e4f3ba9a (patch) | |
tree | ceb8c30ec4f675282466870bddbc2fbed99d82f8 /src/logic/pe_image_meta_data.c | |
parent | 572491eea7bb009e09b9e5552d72e9c11c91a429 (diff) | |
download | perk-b6bb33077411781ae7774b386c874244e4f3ba9a.tar.bz2 perk-b6bb33077411781ae7774b386c874244e4f3ba9a.tar.xz |
pe_meta_get_image_meta(): fix handling of the padding base relocation block.
Diffstat (limited to 'src/logic/pe_image_meta_data.c')
-rw-r--r-- | src/logic/pe_image_meta_data.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/logic/pe_image_meta_data.c b/src/logic/pe_image_meta_data.c index 3f68819..e4e73a0 100644 --- a/src/logic/pe_image_meta_data.c +++ b/src/logic/pe_image_meta_data.c @@ -601,17 +601,16 @@ int pe_meta_get_image_meta( b.dh_rva = pe_read_long(r->blk_rva); b.dh_size = pe_read_long(r->blk_size); - if (b.dh_size <= offsetof(struct pe_raw_base_reloc_block,blk_data)) - return pe_free_image_meta_impl( - m,PERK_CUSTOM_ERROR( - dctx, - PERK_ERR_IMAGE_MALFORMED)); + if ((b.dh_rva == 0) && (b.dh_size == 0)) { + mark = cap; - mark += b.dh_size; - b.dh_size -= offsetof(struct pe_raw_base_reloc_block,blk_data); + } else { + mark += b.dh_size; + b.dh_size -= offsetof(struct pe_raw_base_reloc_block,blk_data); - m->m_stats.t_nrelocs += b.dh_size / sizeof(uint16_t); - m->m_stats.t_nrelblks++; + m->m_stats.t_nrelocs += b.dh_size / sizeof(uint16_t); + m->m_stats.t_nrelblks++; + } } |