autoload.cc: Drop using full paths for system DLLs
System DLLs are always first in the DLL search order so http://www.microsoft.com/technet/security/advisory/2269637.mspx doesn't apply for them. * autoload.cc (std_dll_init): Revert using full paths to system DLLs. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
859c10beee
commit
4b104ce070
|
@ -1,3 +1,7 @@
|
||||||
|
2015-08-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* autoload.cc (std_dll_init): Revert using full paths to system DLLs.
|
||||||
|
|
||||||
2015-08-25 Corinna Vinschen <corinna@vinschen.de>
|
2015-08-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* autoload.cc (noload): i686 only: Save and restore $edx when calling
|
* autoload.cc (noload): i686 only: Save and restore $edx when calling
|
||||||
|
|
|
@ -420,18 +420,15 @@ std_dll_init ()
|
||||||
{
|
{
|
||||||
fenv_t fpuenv;
|
fenv_t fpuenv;
|
||||||
fegetenv (&fpuenv);
|
fegetenv (&fpuenv);
|
||||||
WCHAR dll_path[MAX_PATH];
|
|
||||||
DWORD err = ERROR_SUCCESS;
|
DWORD err = ERROR_SUCCESS;
|
||||||
int i;
|
int i;
|
||||||
/* http://www.microsoft.com/technet/security/advisory/2269637.mspx */
|
|
||||||
wcpcpy (wcpcpy (dll_path, windows_system_directory), dll->name);
|
|
||||||
/* MSDN seems to imply that LoadLibrary can fail mysteriously, so,
|
/* MSDN seems to imply that LoadLibrary can fail mysteriously, so,
|
||||||
since there have been reports of this in the mailing list, retry
|
since there have been reports of this in the mailing list, retry
|
||||||
several times before giving up. */
|
several times before giving up. */
|
||||||
for (i = 1; i <= RETRY_COUNT; i++)
|
for (i = 1; i <= RETRY_COUNT; i++)
|
||||||
{
|
{
|
||||||
/* If loading the library succeeds, just leave the loop. */
|
/* If loading the library succeeds, just leave the loop. */
|
||||||
if (dll_load (dll->handle, dll_path))
|
if (dll_load (dll->handle, dll->name))
|
||||||
break;
|
break;
|
||||||
/* Otherwise check error code returned by LoadLibrary. If the
|
/* Otherwise check error code returned by LoadLibrary. If the
|
||||||
error code is neither NOACCESS nor DLL_INIT_FAILED, break out
|
error code is neither NOACCESS nor DLL_INIT_FAILED, break out
|
||||||
|
@ -444,15 +441,10 @@ std_dll_init ()
|
||||||
}
|
}
|
||||||
if ((uintptr_t) dll->handle <= 1)
|
if ((uintptr_t) dll->handle <= 1)
|
||||||
{
|
{
|
||||||
/* If LoadLibrary with full path returns one of the weird errors
|
if ((func->decoration & 1))
|
||||||
reported on the Cygwin mailing list, retry with only the DLL
|
|
||||||
name. Only do this when the above retry loop has been exhausted. */
|
|
||||||
if (i > RETRY_COUNT && dll_load (dll->handle, dll->name))
|
|
||||||
/* got it with the fallback */;
|
|
||||||
else if ((func->decoration & 1))
|
|
||||||
dll->handle = INVALID_HANDLE_VALUE;
|
dll->handle = INVALID_HANDLE_VALUE;
|
||||||
else
|
else
|
||||||
api_fatal ("unable to load %W, %E", dll_path);
|
api_fatal ("unable to load %W, %E", dll->name);
|
||||||
}
|
}
|
||||||
fesetenv (&fpuenv);
|
fesetenv (&fpuenv);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue