From ff346bf2bdc5ff8972a3485746b121a564ffe552 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 16 Apr 2009 13:44:59 +0000 Subject: [PATCH] - Use a common exit point from a function, and thus fix two returns from a seh block not wrapped into _SEH2_YIELD. - Fixes a crash in Downloader app and in numerous other applications. svn path=/trunk/; revision=40542 --- reactos/dll/ntdll/ldr/utils.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 395e6b8423b..9ebcbd73021 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -2474,6 +2474,7 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, IN ULONG Ordinal, OUT PVOID *ProcedureAddress) { + NTSTATUS Status = STATUS_PROCEDURE_NOT_FOUND; if (Name && Name->Length) { TRACE_LDR("LdrGetProcedureAddress by NAME - %Z\n", Name); @@ -2494,7 +2495,7 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, *ProcedureAddress = LdrGetExportByName(BaseAddress, (PUCHAR)Name->Buffer, 0xffff); if (*ProcedureAddress != NULL) { - return STATUS_SUCCESS; + Status = STATUS_SUCCESS; } DPRINT("LdrGetProcedureAddress: Can't resolve symbol '%Z'\n", Name); } @@ -2505,17 +2506,18 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, *ProcedureAddress = LdrGetExportByOrdinal(BaseAddress, (WORD)Ordinal); if (*ProcedureAddress) { - return STATUS_SUCCESS; + Status = STATUS_SUCCESS; } DPRINT("LdrGetProcedureAddress: Can't resolve symbol @%lu\n", Ordinal); } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - _SEH2_YIELD(return STATUS_DLL_NOT_FOUND); + Status = STATUS_DLL_NOT_FOUND; } _SEH2_END; - return STATUS_PROCEDURE_NOT_FOUND; + + return Status; } /**********************************************************************