mirror of https://github.com/acidanthera/audk.git
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:
parent
a58266e5fd
commit
7461437cf1
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue