version: Allocate the full virtual size of the section when loading PE resources.
This commit is contained in:
parent
46bfaeae9e
commit
0136bc27d1
|
@ -220,7 +220,7 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
PIMAGE_DATA_DIRECTORY resDataDir;
|
PIMAGE_DATA_DIRECTORY resDataDir;
|
||||||
PIMAGE_SECTION_HEADER sections;
|
PIMAGE_SECTION_HEADER sections;
|
||||||
LPBYTE resSection;
|
LPBYTE resSection;
|
||||||
DWORD resSectionSize;
|
DWORD section_size, data_size;
|
||||||
const void *resDir;
|
const void *resDir;
|
||||||
const IMAGE_RESOURCE_DIRECTORY *resPtr;
|
const IMAGE_RESOURCE_DIRECTORY *resPtr;
|
||||||
const IMAGE_RESOURCE_DATA_ENTRY *resData;
|
const IMAGE_RESOURCE_DATA_ENTRY *resData;
|
||||||
|
@ -282,8 +282,9 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read in resource section */
|
/* Read in resource section */
|
||||||
resSectionSize = sections[i].SizeOfRawData;
|
data_size = sections[i].SizeOfRawData;
|
||||||
resSection = HeapAlloc( GetProcessHeap(), 0, resSectionSize );
|
section_size = max( data_size, sections[i].Misc.VirtualSize );
|
||||||
|
resSection = HeapAlloc( GetProcessHeap(), 0, section_size );
|
||||||
if ( !resSection )
|
if ( !resSection )
|
||||||
{
|
{
|
||||||
HeapFree( GetProcessHeap(), 0, sections );
|
HeapFree( GetProcessHeap(), 0, sections );
|
||||||
|
@ -291,7 +292,8 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
}
|
}
|
||||||
|
|
||||||
LZSeek( lzfd, sections[i].PointerToRawData, SEEK_SET );
|
LZSeek( lzfd, sections[i].PointerToRawData, SEEK_SET );
|
||||||
if ( resSectionSize != LZRead( lzfd, (char*)resSection, resSectionSize ) ) goto done;
|
if (data_size != LZRead( lzfd, (char*)resSection, data_size )) goto done;
|
||||||
|
if (data_size < section_size) memset( (char *)resSection + data_size, 0, section_size - data_size );
|
||||||
|
|
||||||
/* Find resource */
|
/* Find resource */
|
||||||
resDir = resSection + (resDataDir->VirtualAddress - sections[i].VirtualAddress);
|
resDir = resSection + (resDataDir->VirtualAddress - sections[i].VirtualAddress);
|
||||||
|
|
Loading…
Reference in New Issue