summaryrefslogtreecommitdiff
path: root/src/logic/pe_image_meta_data.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2025-06-15 16:12:45 +0000
committermidipix <writeonce@midipix.org>2025-06-15 16:12:45 +0000
commitb6bb33077411781ae7774b386c874244e4f3ba9a (patch)
treeceb8c30ec4f675282466870bddbc2fbed99d82f8 /src/logic/pe_image_meta_data.c
parent572491eea7bb009e09b9e5552d72e9c11c91a429 (diff)
downloadperk-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.c17
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++;
+ }
}