From 7461437cf15b9ff49b2c3cc722d05182dca9a46a Mon Sep 17 00:00:00 2001 From: jaben carsey Date: Fri, 28 Jun 2013 22:44:21 +0000 Subject: ShellPkg: Verify memory and handle allocation failure. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: jaben carsey Reviewed-by: Eric Dong git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14448 6f19259b-4bc3-4df7-8a09-765794883524 --- ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c | 30 +++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'ShellPkg') diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c index e1473cf90..e4f4166b1 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c @@ -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; - - // - // Now try again to open the file - // - Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE); + 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); + } + } + 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); -- cgit v1.2.3