]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Fix Shell ASSERT when mv file with cwd is NULL.
authorQiu Shumin <shumin.qiu@intel.com>
Fri, 8 Apr 2016 07:41:06 +0000 (15:41 +0800)
committerQiu Shumin <shumin.qiu@intel.com>
Mon, 11 Apr 2016 01:33:18 +0000 (09:33 +0800)
Shell will ASSERT when doing the following operation:
""
Shell> mv fs2:\file1 fs2:\file2
""
This patch add NULL pointer check to fix this issue.

Fixes: https://github.com/tianocore/edk2/issues/76
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c

index 29efb1c6fe0f0cbce7c57cc68535f24b379e813a..d02a6ae5f5c0560c7bf987b46f26be12bb8a9534 100644 (file)
@@ -483,18 +483,21 @@ ValidateAndMoveFiles(
   Response          = *Resp;\r
   Attr              = 0;\r
   CleanFilePathStr  = NULL;\r
+  FullCwd           = NULL;\r
 \r
-  FullCwd = AllocateZeroPool(StrSize(Cwd) + sizeof(CHAR16));\r
-  if (FullCwd == NULL) {\r
-    return SHELL_OUT_OF_RESOURCES;\r
-  } else {\r
-    StrCpyS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, Cwd);\r
-    StrCatS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, L"\\");\r
-  }\r
+  if (Cwd != NULL) {\r
+    FullCwd = AllocateZeroPool(StrSize(Cwd) + sizeof(CHAR16));\r
+    if (FullCwd == NULL) {\r
+      return SHELL_OUT_OF_RESOURCES;\r
+    } else {\r
+      StrCpyS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, Cwd);\r
+      StrCatS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, L"\\");\r
+    }\r
+  } \r
 \r
   Status = ShellLevel2StripQuotes (DestParameter, &CleanFilePathStr);\r
   if (EFI_ERROR (Status)) {\r
-    FreePool (FullCwd);\r
+    SHELL_FREE_NON_NULL(FullCwd);\r
     if (Status == EFI_OUT_OF_RESOURCES) {\r
       return SHELL_OUT_OF_RESOURCES;\r
     } else {\r
@@ -511,7 +514,7 @@ ValidateAndMoveFiles(
   FreePool (CleanFilePathStr);\r
 \r
   if (ShellStatus != SHELL_SUCCESS) {\r
-    FreePool (FullCwd);\r
+    SHELL_FREE_NON_NULL (FullCwd);\r
     return (ShellStatus);\r
   }\r
   DestPath = PathCleanUpDirectories(DestPath);\r
@@ -526,7 +529,7 @@ ValidateAndMoveFiles(
     SHELL_FREE_NON_NULL(DestPath);\r
     SHELL_FREE_NON_NULL(HiiOutput);\r
     SHELL_FREE_NON_NULL(HiiResultOk);\r
-    FreePool (FullCwd);\r
+    SHELL_FREE_NON_NULL(FullCwd);\r
     return (SHELL_OUT_OF_RESOURCES);\r
   }\r
 \r
@@ -588,7 +591,7 @@ ValidateAndMoveFiles(
           //\r
           // indicate to stop everything\r
           //\r
-          FreePool(FullCwd);\r
+          SHELL_FREE_NON_NULL(FullCwd);\r
           return (SHELL_ABORTED);\r
         case ShellPromptResponseAll:\r
           *Resp = Response;\r
@@ -599,7 +602,7 @@ ValidateAndMoveFiles(
           break;\r
         default:\r
           FreePool(Response);\r
-          FreePool(FullCwd);\r
+          SHELL_FREE_NON_NULL(FullCwd);\r
           return SHELL_ABORTED;\r
       }\r
       Status = ShellDeleteFileByName(FullDestPath!=NULL? FullDestPath:DestPath);\r
@@ -646,7 +649,7 @@ ValidateAndMoveFiles(
   SHELL_FREE_NON_NULL(DestPath);\r
   SHELL_FREE_NON_NULL(HiiOutput);\r
   SHELL_FREE_NON_NULL(HiiResultOk);\r
-  FreePool (FullCwd);\r
+  SHELL_FREE_NON_NULL(FullCwd);\r
   return (ShellStatus);\r
 }\r
 \r