ShellPkg: Verify memory and handle allocation failure.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: jaben carsey <jaben.carsey@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14448 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jaben carsey 2013-06-28 22:44:21 +00:00 committed by jcarsey
parent a58266e5fd
commit 7461437cf1
1 changed files with 18 additions and 10 deletions

View File

@ -126,18 +126,26 @@ CascadeDelete(
// Update the node filename to have full path with file system identifier
//
TempName = AllocateZeroPool(StrSize(Node->FullName) + StrSize(Node2->FullName));
StrCpy(TempName, Node->FullName);
TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;
StrCat(TempName, Node2->FullName);
FreePool((VOID*)Node2->FullName);
Node2->FullName = TempName;
if (TempName == NULL) {
ShellStatus = EFI_OUT_OF_RESOURCES;
} else {
StrCpy(TempName, Node->FullName);
TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;
StrCat(TempName, Node2->FullName);
FreePool((VOID*)Node2->FullName);
Node2->FullName = TempName;
//
// Now try again to open the file
//
Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE);
//
// Now try again to open the file
//
Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE);
}
}
if (!EFI_ERROR(Node2->Status)) {
ShellStatus = CascadeDelete(Node2, Quiet);
} else if (ShellStatus == SHELL_SUCCESS) {
ShellStatus = Node2->Status;
}
ShellStatus = CascadeDelete(Node2, Quiet);
if (ShellStatus != SHELL_SUCCESS) {
if (List!=NULL) {
gEfiShellProtocol->FreeFileList(&List);