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>
Response = *Resp;\r
Attr = 0;\r
CleanFilePathStr = NULL;\r
Response = *Resp;\r
Attr = 0;\r
CleanFilePathStr = 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
+ 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
\r
Status = ShellLevel2StripQuotes (DestParameter, &CleanFilePathStr);\r
if (EFI_ERROR (Status)) {\r
+ SHELL_FREE_NON_NULL(FullCwd);\r
if (Status == EFI_OUT_OF_RESOURCES) {\r
return SHELL_OUT_OF_RESOURCES;\r
} else {\r
if (Status == EFI_OUT_OF_RESOURCES) {\r
return SHELL_OUT_OF_RESOURCES;\r
} else {\r
FreePool (CleanFilePathStr);\r
\r
if (ShellStatus != SHELL_SUCCESS) {\r
FreePool (CleanFilePathStr);\r
\r
if (ShellStatus != SHELL_SUCCESS) {\r
+ SHELL_FREE_NON_NULL (FullCwd);\r
return (ShellStatus);\r
}\r
DestPath = PathCleanUpDirectories(DestPath);\r
return (ShellStatus);\r
}\r
DestPath = PathCleanUpDirectories(DestPath);\r
SHELL_FREE_NON_NULL(DestPath);\r
SHELL_FREE_NON_NULL(HiiOutput);\r
SHELL_FREE_NON_NULL(HiiResultOk);\r
SHELL_FREE_NON_NULL(DestPath);\r
SHELL_FREE_NON_NULL(HiiOutput);\r
SHELL_FREE_NON_NULL(HiiResultOk);\r
+ SHELL_FREE_NON_NULL(FullCwd);\r
return (SHELL_OUT_OF_RESOURCES);\r
}\r
\r
return (SHELL_OUT_OF_RESOURCES);\r
}\r
\r
//\r
// indicate to stop everything\r
//\r
//\r
// indicate to stop everything\r
//\r
+ SHELL_FREE_NON_NULL(FullCwd);\r
return (SHELL_ABORTED);\r
case ShellPromptResponseAll:\r
*Resp = Response;\r
return (SHELL_ABORTED);\r
case ShellPromptResponseAll:\r
*Resp = Response;\r
break;\r
default:\r
FreePool(Response);\r
break;\r
default:\r
FreePool(Response);\r
+ SHELL_FREE_NON_NULL(FullCwd);\r
return SHELL_ABORTED;\r
}\r
Status = ShellDeleteFileByName(FullDestPath!=NULL? FullDestPath:DestPath);\r
return SHELL_ABORTED;\r
}\r
Status = ShellDeleteFileByName(FullDestPath!=NULL? FullDestPath:DestPath);\r
SHELL_FREE_NON_NULL(DestPath);\r
SHELL_FREE_NON_NULL(HiiOutput);\r
SHELL_FREE_NON_NULL(HiiResultOk);\r
SHELL_FREE_NON_NULL(DestPath);\r
SHELL_FREE_NON_NULL(HiiOutput);\r
SHELL_FREE_NON_NULL(HiiResultOk);\r
+ SHELL_FREE_NON_NULL(FullCwd);\r
return (ShellStatus);\r
}\r
\r
return (ShellStatus);\r
}\r
\r