]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c
Add code to check whether the pointer 'CorrectedPath' and 'FullPath' are NULL before...
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Rm.c
index e1473cf907fd76338799ce19d93f4a670216ba3a..c1e01426f8076f49ff38bb218a3f664a451d1baa 100644 (file)
@@ -92,7 +92,6 @@ CascadeDelete(
       if (!Quiet) {\r
         Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_RM_LOG_DELETE_CONF), gShellLevel2HiiHandle, Node->FullName);\r
         Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp);\r
-        ASSERT_EFI_ERROR(Status);\r
         ASSERT(Resp != NULL);\r
         if (EFI_ERROR(Status) || *Resp != ShellPromptResponseYes) {\r
           SHELL_FREE_NON_NULL(Resp);\r
@@ -126,18 +125,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 = SHELL_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 = (SHELL_STATUS)(Node2->Status&(~0x80000000));\r
         }\r
-        ShellStatus = CascadeDelete(Node2, Quiet);\r
         if (ShellStatus != SHELL_SUCCESS) {\r
           if (List!=NULL) {\r
             gEfiShellProtocol->FreeFileList(&List);\r