summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2010-12-06 18:10:34 +0000
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2010-12-06 18:10:34 +0000
commitc154b9970849127546f50481b586d61d78c9bbec (patch)
treeb48f8b103b2791ec8c0021f96e4cd36b7a2dc221
parenteca37a3101811a879521b7bdff18524fd86cf8fa (diff)
downloadedk2-platforms-c154b9970849127546f50481b586d61d78c9bbec.tar.xz
fixes for NULL verification.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11125 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--ShellPkg/Application/Shell/ShellEnvVar.c2
-rw-r--r--ShellPkg/Application/Shell/ShellProtocol.c145
-rw-r--r--ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c63
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);
}