Check for failed allocations. Spotted by Martin Bealby. Modified: trunk/reactos/lib/ntdll/csr/capture.c Modified: trunk/reactos/lib/ntdll/csr/connect.c Modified: trunk/reactos/lib/ntdll/ldr/startup.c Modified: trunk/reactos/lib/ntdll/ldr/utils.c _____
Modified: trunk/reactos/lib/ntdll/csr/capture.c --- trunk/reactos/lib/ntdll/csr/capture.c 2005-12-12 18:15:19 UTC (rev 20105) +++ trunk/reactos/lib/ntdll/csr/capture.c 2005-12-12 19:23:52 UTC (rev 20106) @@ -95,6 +95,7 @@
/* Allocate memory from the port heap */ CaptureBuffer = RtlAllocateHeap(CsrPortHeap, 0, BufferSize); + if (CaptureBuffer == NULL) return NULL;
/* Initialize the header */ CaptureBuffer->Size = BufferSize; _____
Modified: trunk/reactos/lib/ntdll/csr/connect.c --- trunk/reactos/lib/ntdll/csr/connect.c 2005-12-12 18:15:19 UTC (rev 20105) +++ trunk/reactos/lib/ntdll/csr/connect.c 2005-12-12 19:23:52 UTC (rev 20106) @@ -203,6 +203,10 @@
/* Allocate a buffer for it */ PortName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, PortNameLength); + if (PortName.Buffer == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + }
/* Create the name */ RtlAppendUnicodeToString(&PortName, ObjectDirectory ); @@ -255,6 +259,13 @@ 0, 0, &SystemSid); + if (!NT_SUCCESS(Status)) + { + /* Failure */ + DPRINT1("Couldn't allocate SID\n"); + NtClose(CsrSectionHandle); + return Status; + }
/* Connect to the port */ Status = NtSecureConnectPort(&CsrApiPort, @@ -293,6 +304,12 @@ PAGE_SIZE, 0, 0); + if (CsrPortHeap == NULL) + { + NtClose(CsrApiPort); + CsrApiPort = NULL; + return STATUS_INSUFFICIENT_RESOURCES; + }
/* Return success */ return STATUS_SUCCESS; @@ -399,6 +416,10 @@ /* Setup a buffer for the connection info */ CaptureBuffer = CsrAllocateCaptureBuffer(1,
ClientConnect->ConnectionInfoSize); + if (CaptureBuffer == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + }
/* Allocate a pointer for the connection info*/ CsrAllocateMessagePointer(CaptureBuffer, _____
Modified: trunk/reactos/lib/ntdll/ldr/startup.c --- trunk/reactos/lib/ntdll/ldr/startup.c 2005-12-12 18:15:19 UTC (rev 20105) +++ trunk/reactos/lib/ntdll/ldr/startup.c 2005-12-12 19:23:52 UTC (rev 20106) @@ -266,7 +266,7 @@
if (ImageBase <= (PVOID)0x1000) { DPRINT("ImageBase is null\n"); - ZwTerminateProcess(NtCurrentProcess(), STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INVALID_IMAGE_FORMAT); }
/* If MZ header exists */ @@ -278,7 +278,7 @@ *(PULONG)((PUCHAR)ImageBase + PEDosHeader->e_lfanew) != IMAGE_NT_SIGNATURE) { DPRINT1("Image has bad header\n"); - ZwTerminateProcess(NtCurrentProcess(), STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INVALID_IMAGE_FORMAT); }
/* normalize process parameters */ @@ -321,7 +321,7 @@ if (Peb->ProcessHeap == 0) { DPRINT1("Failed to create process heap\n"); - ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INSUFFICIENT_RESOURCES); }
/* initialized vectored exception handling */ @@ -345,6 +345,11 @@ RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(PVOID) * (USER32_CALLBACK_MAXIMUM + 1)); + if (Peb->KernelCallbackTable == NULL) + { + DPRINT1("Failed to create callback table\n"); + ZwTerminateProcess(NtCurrentProcess(),STATUS_INSUFFICIENT_RESOURCES); + }
/* initalize loader lock */ RtlInitializeCriticalSection (&LoaderLock); @@ -357,7 +362,7 @@ if (Peb->Ldr == NULL) { DPRINT1("Failed to create loader data\n"); - ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INSUFFICIENT_RESOURCES); } Peb->Ldr->Length = sizeof(PEB_LDR_DATA); Peb->Ldr->Initialized = FALSE; @@ -383,7 +388,7 @@ if (NtModule == NULL) { DPRINT1("Failed to create loader module entry (NTDLL)\n"); - ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INSUFFICIENT_RESOURCES); } memset(NtModule, 0, sizeof(LDR_DATA_TABLE_ENTRY));
@@ -422,7 +427,7 @@ if (ExeModule == NULL) { DPRINT1("Failed to create loader module infomation\n"); - ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INSUFFICIENT_RESOURCES); } ExeModule->DllBase = Peb->ImageBaseAddress;
@@ -473,7 +478,7 @@ if (EntryPoint == NULL) { DPRINT1("Failed to initialize image\n"); - ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); + ZwTerminateProcess(NtCurrentProcess(), STATUS_INVALID_IMAGE_FORMAT); } } /* attach the thread */ _____
Modified: trunk/reactos/lib/ntdll/ldr/utils.c --- trunk/reactos/lib/ntdll/ldr/utils.c 2005-12-12 18:15:19 UTC (rev 20105) +++ trunk/reactos/lib/ntdll/ldr/utils.c 2005-12-12 19:23:52 UTC (rev 20106) @@ -2986,6 +2986,11 @@
KeyInfo = RtlAllocateHeap (RtlGetProcessHeap(), HEAP_ZERO_MEMORY, KeyInfoSize); + if (KeyInfo == NULL) + { + NtClose (KeyHandle); + return STATUS_INSUFFICIENT_RESOURCES; + }
RtlInitUnicodeString (&ValueNameString, (PWSTR)ValueName); @@ -3007,7 +3012,7 @@ if (KeyInfo == NULL) { NtClose (KeyHandle); - return Status; + return STATUS_INSUFFICIENT_RESOURCES; }
Status = NtQueryValueKey (KeyHandle,