summaryrefslogtreecommitdiffstats
path: root/ShellPkg
diff options
context:
space:
mode:
authorQiu Shumin <shumin.qiu@intel.com>2016-04-08 15:41:06 +0800
committerQiu Shumin <shumin.qiu@intel.com>2016-04-11 09:33:18 +0800
commit64ee6ed72ad5c1e4b7c9a96f419c3592e93314ad (patch)
tree3612e15ab0331b98ef53c971bc7c17e5beac753c /ShellPkg
parent800c02fbe2da64ca83540151fc75a431df25aae7 (diff)
downloadedk2-64ee6ed72ad5c1e4b7c9a96f419c3592e93314ad.tar.gz
edk2-64ee6ed72ad5c1e4b7c9a96f419c3592e93314ad.tar.bz2
edk2-64ee6ed72ad5c1e4b7c9a96f419c3592e93314ad.zip
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. 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>
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c
index 29efb1c6fe..d02a6ae5f5 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);
}