Reviewed-by: Ruiyu Ni <[email protected]>

>-----Original Message-----
>From: edk2-devel [mailto:[email protected]] On Behalf Of Qiu 
>Shumin
>Sent: Friday, April 8, 2016 3:54 PM
>To: [email protected]
>Cc: Carsey, Jaben <[email protected]>; Ni, Ruiyu <[email protected]>; 
>Qiu, Shumin <[email protected]>
>Subject: [edk2] [PATCH] ShellPkg: Fix Shell ASSERT when mv file with cwd is 
>NULL.
>
>Shell will ASSERT when doing the following operation:
>""
>Shell> mv fs2:\file1 fs2:\file2
>""
>This patch add NULL pointer check to fix this issue.
>
>Cc: Jaben Carsey <[email protected]>
>Cc: Ruiyu Ni <[email protected]>
>Contributed-under: TianoCore Contribution Agreement 1.0
>Signed-off-by: Qiu Shumin <[email protected]>
>---
> ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c | 29 +++++++++++++-----------
> 1 file changed, 16 insertions(+), 13 deletions(-)
>
>diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c 
>b/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c
>index 29efb1c..d02a6ae 100644
>--- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c
>+++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c
>@@ -483,18 +483,21 @@ ValidateAndMoveFiles(
>   Response          = *Resp;
>   Attr              = 0;
>   CleanFilePathStr  = NULL;
>+  FullCwd           = NULL;
>
>-  FullCwd = AllocateZeroPool(StrSize(Cwd) + sizeof(CHAR16));
>-  if (FullCwd == NULL) {
>-    return SHELL_OUT_OF_RESOURCES;
>-  } else {
>-    StrCpyS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, Cwd);
>-    StrCatS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, L"\\");
>-  }
>+  if (Cwd != NULL) {
>+    FullCwd = AllocateZeroPool(StrSize(Cwd) + sizeof(CHAR16));
>+    if (FullCwd == NULL) {
>+      return SHELL_OUT_OF_RESOURCES;
>+    } else {
>+      StrCpyS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, Cwd);
>+      StrCatS(FullCwd, StrSize(Cwd)/sizeof(CHAR16)+1, L"\\");
>+    }
>+  }
>
>   Status = ShellLevel2StripQuotes (DestParameter, &CleanFilePathStr);
>   if (EFI_ERROR (Status)) {
>-    FreePool (FullCwd);
>+    SHELL_FREE_NON_NULL(FullCwd);
>     if (Status == EFI_OUT_OF_RESOURCES) {
>       return SHELL_OUT_OF_RESOURCES;
>     } else {
>@@ -511,7 +514,7 @@ ValidateAndMoveFiles(
>   FreePool (CleanFilePathStr);
>
>   if (ShellStatus != SHELL_SUCCESS) {
>-    FreePool (FullCwd);
>+    SHELL_FREE_NON_NULL (FullCwd);
>     return (ShellStatus);
>   }
>   DestPath = PathCleanUpDirectories(DestPath);
>@@ -526,7 +529,7 @@ ValidateAndMoveFiles(
>     SHELL_FREE_NON_NULL(DestPath);
>     SHELL_FREE_NON_NULL(HiiOutput);
>     SHELL_FREE_NON_NULL(HiiResultOk);
>-    FreePool (FullCwd);
>+    SHELL_FREE_NON_NULL(FullCwd);
>     return (SHELL_OUT_OF_RESOURCES);
>   }
>
>@@ -588,7 +591,7 @@ ValidateAndMoveFiles(
>           //
>           // indicate to stop everything
>           //
>-          FreePool(FullCwd);
>+          SHELL_FREE_NON_NULL(FullCwd);
>           return (SHELL_ABORTED);
>         case ShellPromptResponseAll:
>           *Resp = Response;
>@@ -599,7 +602,7 @@ ValidateAndMoveFiles(
>           break;
>         default:
>           FreePool(Response);
>-          FreePool(FullCwd);
>+          SHELL_FREE_NON_NULL(FullCwd);
>           return SHELL_ABORTED;
>       }
>       Status = ShellDeleteFileByName(FullDestPath!=NULL? 
> FullDestPath:DestPath);
>@@ -646,7 +649,7 @@ ValidateAndMoveFiles(
>   SHELL_FREE_NON_NULL(DestPath);
>   SHELL_FREE_NON_NULL(HiiOutput);
>   SHELL_FREE_NON_NULL(HiiResultOk);
>-  FreePool (FullCwd);
>+  SHELL_FREE_NON_NULL(FullCwd);
>   return (ShellStatus);
> }
>
>--
>2.7.1.windows.2
>
>_______________________________________________
>edk2-devel mailing list
>[email protected]
>https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to