mirror of https://github.com/acidanthera/audk.git
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>
This commit is contained in:
parent
800c02fbe2
commit
64ee6ed72a
|
@ -483,7 +483,9 @@ ValidateAndMoveFiles(
|
|||
Response = *Resp;
|
||||
Attr = 0;
|
||||
CleanFilePathStr = NULL;
|
||||
FullCwd = NULL;
|
||||
|
||||
if (Cwd != NULL) {
|
||||
FullCwd = AllocateZeroPool(StrSize(Cwd) + sizeof(CHAR16));
|
||||
if (FullCwd == NULL) {
|
||||
return SHELL_OUT_OF_RESOURCES;
|
||||
|
@ -491,10 +493,11 @@ ValidateAndMoveFiles(
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue