Fix potential hang in ldd if DLL encounters missing entry point
* ldd.cc (STATUS_DLL_NOT_FOUND): Drop definition. (report): Handle STATUS_ENTRYPOINT_NOT_FOUND exception. Explain why. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
e437a7d826
commit
23ad79d7de
@ -1,3 +1,8 @@
|
|||||||
|
2015-07-20 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* ldd.cc (STATUS_DLL_NOT_FOUND): Drop definition.
|
||||||
|
(report): Handle STATUS_ENTRYPOINT_NOT_FOUND exception. Explain why.
|
||||||
|
|
||||||
2015-07-08 Corinna Vinschen <corinna@vinschen.de>
|
2015-07-08 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* tzset.c (main): Check timezone and country case-insensitive.
|
* tzset.c (main): Check timezone and country case-insensitive.
|
||||||
|
@ -42,10 +42,6 @@
|
|||||||
#include <imagehlp.h>
|
#include <imagehlp.h>
|
||||||
#include <psapi.h>
|
#include <psapi.h>
|
||||||
|
|
||||||
#ifndef STATUS_DLL_NOT_FOUND
|
|
||||||
#define STATUS_DLL_NOT_FOUND (0xC0000135L)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct option longopts[] =
|
struct option longopts[] =
|
||||||
{
|
{
|
||||||
{"help", no_argument, NULL, 'h'},
|
{"help", no_argument, NULL, 'h'},
|
||||||
@ -346,6 +342,11 @@ report (const char *in_fn, bool multiple)
|
|||||||
case EXCEPTION_DEBUG_EVENT:
|
case EXCEPTION_DEBUG_EVENT:
|
||||||
switch (ev.u.Exception.ExceptionRecord.ExceptionCode)
|
switch (ev.u.Exception.ExceptionRecord.ExceptionCode)
|
||||||
{
|
{
|
||||||
|
case STATUS_ENTRYPOINT_NOT_FOUND:
|
||||||
|
/* A STATUS_ENTRYPOINT_NOT_FOUND might be encountered right after
|
||||||
|
loading all DLLs. We have to handle it here, otherwise ldd
|
||||||
|
runs into an endless loop. */
|
||||||
|
goto print_and_exit;
|
||||||
case STATUS_DLL_NOT_FOUND:
|
case STATUS_DLL_NOT_FOUND:
|
||||||
process_fn = fn_win;
|
process_fn = fn_win;
|
||||||
break;
|
break;
|
||||||
@ -359,6 +360,7 @@ report (const char *in_fn, bool multiple)
|
|||||||
TerminateProcess (hProcess, 0);
|
TerminateProcess (hProcess, 0);
|
||||||
break;
|
break;
|
||||||
case EXIT_PROCESS_DEBUG_EVENT:
|
case EXIT_PROCESS_DEBUG_EVENT:
|
||||||
|
print_and_exit:
|
||||||
print_dlls (&dll_list, isdll ? fn_win : NULL, process_fn);
|
print_dlls (&dll_list, isdll ? fn_win : NULL, process_fn);
|
||||||
exitnow = true;
|
exitnow = true;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user