]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c
ShellPkg: Verify memory and handle allocation failure.
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Rm.c
index e1473cf907fd76338799ce19d93f4a670216ba3a..e4f4166b14cea2eb5928216a8bc18e11d5b9e7ba 100644 (file)
@@ -126,18 +126,26 @@ CascadeDelete(
           // Update the node filename to have full path with file system identifier\r
           //\r
           TempName = AllocateZeroPool(StrSize(Node->FullName) + StrSize(Node2->FullName));\r
-          StrCpy(TempName, Node->FullName);\r
-          TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;\r
-          StrCat(TempName, Node2->FullName);\r
-          FreePool((VOID*)Node2->FullName);\r
-          Node2->FullName = TempName;\r
-\r
-          //\r
-          // Now try again to open the file\r
-          //\r
-          Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE);\r
+          if (TempName == NULL) {\r
+            ShellStatus = EFI_OUT_OF_RESOURCES;\r
+          } else {\r
+            StrCpy(TempName, Node->FullName);\r
+            TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;\r
+            StrCat(TempName, Node2->FullName);\r
+            FreePool((VOID*)Node2->FullName);\r
+            Node2->FullName = TempName;\r
+\r
+            //\r
+            // Now try again to open the file\r
+            //\r
+            Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE);\r
+          }\r
+        }\r
+        if (!EFI_ERROR(Node2->Status)) {\r
+          ShellStatus = CascadeDelete(Node2, Quiet);\r
+        } else if (ShellStatus == SHELL_SUCCESS) {\r
+          ShellStatus = Node2->Status;\r
         }\r
-        ShellStatus = CascadeDelete(Node2, Quiet);\r
         if (ShellStatus != SHELL_SUCCESS) {\r
           if (List!=NULL) {\r
             gEfiShellProtocol->FreeFileList(&List);\r