Delay load Version.dll to avoid dll hijacking [bug #1125]
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6642 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
0b5b7fad0e
commit
6be5d8d07d
5 changed files with 20 additions and 11 deletions
|
@ -946,13 +946,11 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_GETDLLVERSION
|
||||
case EW_GETDLLVERSION:
|
||||
{
|
||||
TCHAR *highout=var0;
|
||||
TCHAR *lowout=var1;
|
||||
DWORD s1;
|
||||
TCHAR *highout=var0, *lowout=var1;
|
||||
DWORD s1, d;
|
||||
VS_FIXEDFILEINFO *pvsf1;
|
||||
DWORD d;
|
||||
TCHAR *buf1=GetStringFromParm(-0x12);
|
||||
s1=GetFileVersionInfoSize(buf1,&d);
|
||||
s1=((DWORD(WINAPI*)(LPCTSTR,DWORD*))myGetProcAddress(MGA_GetFileVersionInfoSize))(buf1,&d);
|
||||
*lowout=*highout=0;
|
||||
exec_error++;
|
||||
if (s1)
|
||||
|
@ -961,8 +959,10 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
b1=GlobalAlloc(GPTR,s1);
|
||||
if (b1)
|
||||
{
|
||||
FARPROC gfvi = myGetProcAddress(MGA_GetFileVersionInfo), vqv = myGetProcAddress(MGA_VerQueryValue);
|
||||
UINT uLen;
|
||||
if (GetFileVersionInfo(buf1,0,s1,b1) && VerQueryValue(b1,_T("\\"),(void*)&pvsf1,&uLen))
|
||||
if ( ((BOOL(WINAPI*)(LPCTSTR,DWORD,DWORD,LPVOID))gfvi)(buf1,0,s1,b1)
|
||||
&& ((BOOL(WINAPI*)(LPCVOID,LPCTSTR,LPVOID*,UINT*))vqv)(b1,_T("\\"),(void*)&pvsf1,&uLen) )
|
||||
{
|
||||
myitoa(highout,pvsf1->dwFileVersionMS);
|
||||
myitoa(lowout,pvsf1->dwFileVersionLS);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue