https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8bde4de2d6ad0a76857433...
commit 8bde4de2d6ad0a768574334c035de83604a2e821 Author: Bișoc George fraizeraust99@gmail.com AuthorDate: Sun Feb 10 16:43:51 2019 +0100 Commit: Hermès BÉLUSCA - MAÏTO hermes.belusca-maito@reactos.org CommitDate: Sun Feb 10 16:43:51 2019 +0100
[USETUP][REACTOS] Check the status return value of InitDestinationPaths() (#1264)
- Within the function's body code, check the status values returned by the called functions. - Change the BuildInstallPaths's function type to NTSTATUS instead of VOID (and check the status of InitDestinationPaths() as well. --- base/setup/lib/setuplib.c | 98 ++++++++++++++++++++++++++++++++++-------- base/setup/reactos/drivepage.c | 10 ++++- base/setup/usetup/usetup.c | 12 ++++-- 3 files changed, 96 insertions(+), 24 deletions(-)
diff --git a/base/setup/lib/setuplib.c b/base/setup/lib/setuplib.c index 2b52c463f3..9e4d22ee37 100644 --- a/base/setup/lib/setuplib.c +++ b/base/setup/lib/setuplib.c @@ -628,18 +628,29 @@ InitDestinationPaths( IN PPARTENTRY PartEntry) // FIXME: HACK! { WCHAR PathBuffer[MAX_PATH]; - - // - // TODO: Check return status values of the functions! - // + NTSTATUS Status;
/* Create 'pSetupData->DestinationRootPath' string */ RtlFreeUnicodeString(&pSetupData->DestinationRootPath); - RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), - L"\Device\Harddisk%lu\Partition%lu\", - DiskEntry->DiskNumber, - PartEntry->PartitionNumber); - RtlCreateUnicodeString(&pSetupData->DestinationRootPath, PathBuffer); + Status = RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), + L"\Device\Harddisk%lu\Partition%lu\", + DiskEntry->DiskNumber, + PartEntry->PartitionNumber); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlStringCchPrintfW() failed with status 0x%08lx\n", Status); + return Status; + } + + Status = RtlCreateUnicodeString(&pSetupData->DestinationRootPath, PathBuffer) ? STATUS_SUCCESS : STATUS_NO_MEMORY; + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlCreateUnicodeString() failed with status 0x%08lx\n", Status); + return Status; + } + DPRINT("DestinationRootPath: %wZ\n", &pSetupData->DestinationRootPath);
// FIXME! Which variable to choose? @@ -649,23 +660,72 @@ InitDestinationPaths( /** Equivalent of 'NTOS_INSTALLATION::SystemArcPath' **/ /* Create 'pSetupData->DestinationArcPath' */ RtlFreeUnicodeString(&pSetupData->DestinationArcPath); - RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), - L"multi(0)disk(0)rdisk(%lu)partition(%lu)\", - DiskEntry->BiosDiskNumber, - PartEntry->OnDiskPartitionNumber); - ConcatPaths(PathBuffer, ARRAYSIZE(PathBuffer), 1, InstallationDir); - RtlCreateUnicodeString(&pSetupData->DestinationArcPath, PathBuffer); + Status = RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), + L"multi(0)disk(0)rdisk(%lu)partition(%lu)\", + DiskEntry->BiosDiskNumber, + PartEntry->OnDiskPartitionNumber); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlStringCchPrintfW() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + return Status; + } + + Status = ConcatPaths(PathBuffer, ARRAYSIZE(PathBuffer), 1, InstallationDir); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("ConcatPaths() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + return Status; + } + + Status = RtlCreateUnicodeString(&pSetupData->DestinationArcPath, PathBuffer) ? STATUS_SUCCESS : STATUS_NO_MEMORY; + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlCreateUnicodeString() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + return Status; + }
/** Equivalent of 'NTOS_INSTALLATION::SystemNtPath' **/ /* Create 'pSetupData->DestinationPath' string */ RtlFreeUnicodeString(&pSetupData->DestinationPath); - CombinePaths(PathBuffer, ARRAYSIZE(PathBuffer), 2, - pSetupData->DestinationRootPath.Buffer, InstallationDir); - RtlCreateUnicodeString(&pSetupData->DestinationPath, PathBuffer); + Status = CombinePaths(PathBuffer, ARRAYSIZE(PathBuffer), 2, + pSetupData->DestinationRootPath.Buffer, InstallationDir); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("CombinePaths() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + RtlFreeUnicodeString(&pSetupData->DestinationArcPath); + return Status; + } + + Status = RtlCreateUnicodeString(&pSetupData->DestinationPath, PathBuffer) ? STATUS_SUCCESS : STATUS_NO_MEMORY; + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlCreateUnicodeString() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + RtlFreeUnicodeString(&pSetupData->DestinationArcPath); + return Status; + }
/** Equivalent of 'NTOS_INSTALLATION::PathComponent' **/ // FIXME: This is only temporary!! Must be removed later! - /***/RtlCreateUnicodeString(&pSetupData->InstallPath, InstallationDir);/***/ + Status = RtlCreateUnicodeString(&pSetupData->InstallPath, InstallationDir) ? STATUS_SUCCESS : STATUS_NO_MEMORY; + + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlCreateUnicodeString() failed with status 0x%08lx\n", Status); + RtlFreeUnicodeString(&pSetupData->DestinationRootPath); + RtlFreeUnicodeString(&pSetupData->DestinationArcPath); + RtlFreeUnicodeString(&pSetupData->DestinationPath); + return Status; + }
return STATUS_SUCCESS; } diff --git a/base/setup/reactos/drivepage.c b/base/setup/reactos/drivepage.c index a1b7d137bb..b5f07b21d3 100644 --- a/base/setup/reactos/drivepage.c +++ b/base/setup/reactos/drivepage.c @@ -33,6 +33,9 @@
#include "resource.h"
+#define NDEBUG +#include <debug.h> + /* GLOBALS ******************************************************************/
#define IDS_LIST_COLUMN_FIRST IDS_PARTITION_NAME @@ -795,8 +798,11 @@ DisableWizNext: Status = InitDestinationPaths(&pSetupData->USetupData, NULL, // pSetupData->USetupData.InstallationDirectory, &DiskEntry, &PartEntry); - // TODO: Check Status - UNREFERENCED_PARAMETER(Status); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("InitDestinationPaths() failed with status 0x%08lx\n", Status); + }
break; } diff --git a/base/setup/usetup/usetup.c b/base/setup/usetup/usetup.c index 5aeb33697c..a9a4f81174 100644 --- a/base/setup/usetup/usetup.c +++ b/base/setup/usetup/usetup.c @@ -3238,7 +3238,7 @@ CheckFileSystemPage(PINPUT_RECORD Ir) }
-static VOID +static NTSTATUS BuildInstallPaths(PWSTR InstallDir, PDISKENTRY DiskEntry, PPARTENTRY PartEntry) @@ -3246,11 +3246,17 @@ BuildInstallPaths(PWSTR InstallDir, NTSTATUS Status;
Status = InitDestinationPaths(&USetupData, InstallDir, DiskEntry, PartEntry); - // TODO: Check Status - UNREFERENCED_PARAMETER(Status); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("InitDestinationPaths() failed with status 0x%08lx\n", Status); + return Status; + }
/* Initialize DestinationDriveLetter */ DestinationDriveLetter = PartEntry->DriveLetter; + + return STATUS_SUCCESS; }