Commit 6d62ef65 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

winedump: Add a sanity check before dumping long format library export.

parent d32d5a47
...@@ -183,6 +183,9 @@ void lib_dump(void) ...@@ -183,6 +183,9 @@ void lib_dump(void)
cur_file_pos += sizeof(IMAGE_ARCHIVE_MEMBER_HEADER); cur_file_pos += sizeof(IMAGE_ARCHIVE_MEMBER_HEADER);
size = strtoul((const char *)iamh->Size, NULL, 10);
size = (size + 1) & ~1; /* align to an even address */
/* FIXME: only import library contents with the short format are /* FIXME: only import library contents with the short format are
* recognized. * recognized.
*/ */
...@@ -193,6 +196,7 @@ void lib_dump(void) ...@@ -193,6 +196,7 @@ void lib_dump(void)
} }
else if (strncmp((const char *)iamh->Name, IMAGE_ARCHIVE_LINKER_MEMBER, sizeof(iamh->Name))) else if (strncmp((const char *)iamh->Name, IMAGE_ARCHIVE_LINKER_MEMBER, sizeof(iamh->Name)))
{ {
long expected_size;
const IMAGE_FILE_HEADER *fh = (const IMAGE_FILE_HEADER *)ioh; const IMAGE_FILE_HEADER *fh = (const IMAGE_FILE_HEADER *)ioh;
if (globals.do_dumpheader) if (globals.do_dumpheader)
...@@ -204,12 +208,12 @@ void lib_dump(void) ...@@ -204,12 +208,12 @@ void lib_dump(void)
dump_optional_header(oh, fh->SizeOfOptionalHeader); dump_optional_header(oh, fh->SizeOfOptionalHeader);
} }
} }
dump_long_import(fh, (const IMAGE_SECTION_HEADER *)((const char *)fh + sizeof(*fh) + fh->SizeOfOptionalHeader), fh->NumberOfSections); /* Sanity check */
expected_size = sizeof(*fh) + fh->SizeOfOptionalHeader + fh->NumberOfSections * sizeof(IMAGE_SECTION_HEADER);
if (size > expected_size)
dump_long_import(fh, (const IMAGE_SECTION_HEADER *)((const char *)fh + sizeof(*fh) + fh->SizeOfOptionalHeader), fh->NumberOfSections);
} }
size = strtoul((const char *)iamh->Size, NULL, 10);
size = (size + 1) & ~1; /* align to an even address */
cur_file_pos += size; cur_file_pos += size;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment