From c154b9970849127546f50481b586d61d78c9bbec Mon Sep 17 00:00:00 2001 From: jcarsey Date: Mon, 6 Dec 2010 18:10:34 +0000 Subject: [PATCH] fixes for NULL verification. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11125 6f19259b-4bc3-4df7-8a09-765794883524 --- ShellPkg/Application/Shell/ShellEnvVar.c | 2 +- ShellPkg/Application/Shell/ShellProtocol.c | 145 +++++++++--------- .../Library/UefiShellLevel2CommandsLib/Map.c | 63 ++++---- 3 files changed, 107 insertions(+), 103 deletions(-) diff --git a/ShellPkg/Application/Shell/ShellEnvVar.c b/ShellPkg/Application/Shell/ShellEnvVar.c index f22fb705dd..519181b56d 100644 --- a/ShellPkg/Application/Shell/ShellEnvVar.c +++ b/ShellPkg/Application/Shell/ShellEnvVar.c @@ -183,7 +183,7 @@ GetEnvironmentVariableList( Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(VariableName, &VarList->Atts, &ValSize, VarList->Val); } } - if (!EFI_ERROR(Status)) { + if (!EFI_ERROR(Status) && VarList != NULL) { VarList->Key = AllocatePool(StrSize(VariableName)); if (VarList->Key == NULL) { SHELL_FREE_NON_NULL(VarList->Val); diff --git a/ShellPkg/Application/Shell/ShellProtocol.c b/ShellPkg/Application/Shell/ShellProtocol.c index 0f799786ee..19759cbb2b 100644 --- a/ShellPkg/Application/Shell/ShellProtocol.c +++ b/ShellPkg/Application/Shell/ShellProtocol.c @@ -907,75 +907,46 @@ InternalOpenFileDevicePath( if (!EFI_ERROR(Status)) { Handle1 = ConvertShellHandleToEfiFileProtocol(ShellHandle); - // - // chop off the begining part before the file system part... - // - ///@todo BlockIo? - Status = gBS->LocateDevicePath(&gEfiSimpleFileSystemProtocolGuid, - &DevicePath, - &Handle); - if (!EFI_ERROR(Status)) { + if (Handle1 != NULL) { // - // To access as a file system, the file path should only - // contain file path components. Follow the file path nodes - // and find the target file + // chop off the begining part before the file system part... // - for ( FilePathNode = (FILEPATH_DEVICE_PATH *)DevicePath - ; !IsDevicePathEnd (&FilePathNode->Header) - ; FilePathNode = (FILEPATH_DEVICE_PATH *) NextDevicePathNode (&FilePathNode->Header) - ){ - SHELL_FREE_NON_NULL(AlignedNode); - AlignedNode = AllocateCopyPool (DevicePathNodeLength(FilePathNode), FilePathNode); - // - // For file system access each node should be a file path component - // - if (DevicePathType (&FilePathNode->Header) != MEDIA_DEVICE_PATH || - DevicePathSubType (&FilePathNode->Header) != MEDIA_FILEPATH_DP - ) { - Status = EFI_UNSUPPORTED; - break; - } - - // - // Open this file path node - // - Handle2 = Handle1; - Handle1 = NULL; - + ///@todo BlockIo? + Status = gBS->LocateDevicePath(&gEfiSimpleFileSystemProtocolGuid, + &DevicePath, + &Handle); + if (!EFI_ERROR(Status)) { // - // if this is the last node in the DevicePath always create (if that was requested). + // To access as a file system, the file path should only + // contain file path components. Follow the file path nodes + // and find the target file // - if (IsDevicePathEnd ((NextDevicePathNode (&FilePathNode->Header)))) { - Status = Handle2->Open ( - Handle2, - &Handle1, - AlignedNode->PathName, - OpenMode, - Attributes - ); - } else { - + for ( FilePathNode = (FILEPATH_DEVICE_PATH *)DevicePath + ; !IsDevicePathEnd (&FilePathNode->Header) + ; FilePathNode = (FILEPATH_DEVICE_PATH *) NextDevicePathNode (&FilePathNode->Header) + ){ + SHELL_FREE_NON_NULL(AlignedNode); + AlignedNode = AllocateCopyPool (DevicePathNodeLength(FilePathNode), FilePathNode); // - // This is not the last node and we dont want to 'create' existing - // directory entries... + // For file system access each node should be a file path component // + if (DevicePathType (&FilePathNode->Header) != MEDIA_DEVICE_PATH || + DevicePathSubType (&FilePathNode->Header) != MEDIA_FILEPATH_DP + ) { + Status = EFI_UNSUPPORTED; + break; + } // - // open without letting it create - // prevents error on existing files/directories + // Open this file path node // - Status = Handle2->Open ( - Handle2, - &Handle1, - AlignedNode->PathName, - OpenMode &~EFI_FILE_MODE_CREATE, - Attributes - ); + Handle2 = Handle1; + Handle1 = NULL; + // - // if above failed now open and create the 'item' - // if OpenMode EFI_FILE_MODE_CREATE bit was on (but disabled above) + // if this is the last node in the DevicePath always create (if that was requested). // - if ((EFI_ERROR (Status)) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)) { + if (IsDevicePathEnd ((NextDevicePathNode (&FilePathNode->Header)))) { Status = Handle2->Open ( Handle2, &Handle1, @@ -983,20 +954,51 @@ InternalOpenFileDevicePath( OpenMode, Attributes ); + } else { + + // + // This is not the last node and we dont want to 'create' existing + // directory entries... + // + + // + // open without letting it create + // prevents error on existing files/directories + // + Status = Handle2->Open ( + Handle2, + &Handle1, + AlignedNode->PathName, + OpenMode &~EFI_FILE_MODE_CREATE, + Attributes + ); + // + // if above failed now open and create the 'item' + // if OpenMode EFI_FILE_MODE_CREATE bit was on (but disabled above) + // + if ((EFI_ERROR (Status)) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)) { + Status = Handle2->Open ( + Handle2, + &Handle1, + AlignedNode->PathName, + OpenMode, + Attributes + ); + } } - } - // - // Close the last node - // - ShellInfoObject.NewEfiShellProtocol->CloseFile (Handle2); + // + // Close the last node + // + ShellInfoObject.NewEfiShellProtocol->CloseFile (Handle2); - // - // If there's been an error, stop - // - if (EFI_ERROR (Status)) { - break; - } - } // for loop + // + // If there's been an error, stop + // + if (EFI_ERROR (Status)) { + break; + } + } // for loop + } } } SHELL_FREE_NON_NULL(AlignedNode); @@ -2001,7 +2003,7 @@ ShellSearchHandle( ShellInfoNode->FullName = NewFullName; } } - if (Directory && !EFI_ERROR(Status)){ + if (Directory && !EFI_ERROR(Status) && ShellInfoNode->FullName != NULL && ShellInfoNode->FileName != NULL){ // // should be a directory // @@ -2015,7 +2017,6 @@ ShellSearchHandle( // // // - ASSERT_EFI_ERROR(Status); if (EFI_ERROR(Status)) { break; } diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c index ccfa0b0654..d74a47ba52 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c @@ -679,18 +679,19 @@ PerformMappingDelete( return (Status); } - // - // Get the map name(s) for each one. - // - for ( LoopVar = 0 - ; LoopVar < BufferSize / sizeof(EFI_HANDLE) - ; LoopVar ++ - ){ - if (PerformSingleMappingDelete(Specific,HandleBuffer[LoopVar]) == SHELL_SUCCESS) { - Deleted = TRUE; + if (HandleBuffer != NULL) { + // + // Get the map name(s) for each one. + // + for ( LoopVar = 0 + ; LoopVar < BufferSize / sizeof(EFI_HANDLE) + ; LoopVar ++ + ){ + if (PerformSingleMappingDelete(Specific,HandleBuffer[LoopVar]) == SHELL_SUCCESS) { + Deleted = TRUE; + } } } - // // Look up all BlockIo in the platform // @@ -718,30 +719,32 @@ PerformMappingDelete( return (Status); } - // - // Get the map name(s) for each one. - // - for ( LoopVar = 0 - ; LoopVar < BufferSize / sizeof(EFI_HANDLE) - ; LoopVar ++ - ){ + if (HandleBuffer != NULL) { // - // Skip any that were already done... + // Get the map name(s) for each one. // - if (gBS->OpenProtocol( - HandleBuffer[LoopVar], - &gEfiDevicePathProtocolGuid, - NULL, - gImageHandle, - NULL, - EFI_OPEN_PROTOCOL_TEST_PROTOCOL) == EFI_SUCCESS) { - continue; - } - if (PerformSingleMappingDelete(Specific,HandleBuffer[LoopVar]) == SHELL_SUCCESS) { - Deleted = TRUE; + for ( LoopVar = 0 + ; LoopVar < BufferSize / sizeof(EFI_HANDLE) + ; LoopVar ++ + ){ + // + // Skip any that were already done... + // + if (gBS->OpenProtocol( + HandleBuffer[LoopVar], + &gEfiDevicePathProtocolGuid, + NULL, + gImageHandle, + NULL, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL) == EFI_SUCCESS) { + continue; + } + if (PerformSingleMappingDelete(Specific,HandleBuffer[LoopVar]) == SHELL_SUCCESS) { + Deleted = TRUE; + } } } - FreePool(HandleBuffer); + SHELL_FREE_NON_NULL(HandleBuffer); if (!Deleted) { return (EFI_NOT_FOUND); } -- 2.39.2