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
|
// Update the node filename to have full path with file system identifier
|
||||||
//
|
//
|
||||||
TempName = AllocateZeroPool(StrSize(Node->FullName) + StrSize(Node2->FullName));
|
TempName = AllocateZeroPool(StrSize(Node->FullName) + StrSize(Node2->FullName));
|
||||||
StrCpy(TempName, Node->FullName);
|
if (TempName == NULL) {
|
||||||
TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;
|
ShellStatus = EFI_OUT_OF_RESOURCES;
|
||||||
StrCat(TempName, Node2->FullName);
|
} else {
|
||||||
FreePool((VOID*)Node2->FullName);
|
StrCpy(TempName, Node->FullName);
|
||||||
Node2->FullName = TempName;
|
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
|
// Now try again to open the file
|
||||||
//
|
//
|
||||||
Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE);
|
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 (ShellStatus != SHELL_SUCCESS) {
|
||||||
if (List!=NULL) {
|
if (List!=NULL) {
|
||||||
gEfiShellProtocol->FreeFileList(&List);
|
gEfiShellProtocol->FreeFileList(&List);
|
||||||
|
|
Loading…
Reference in New Issue