On 04/08/16 09:53, Qiu Shumin wrote:
> 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(-)

Can you please add the following to the commit message, below the "Cc" tags:

Fixes: https://github.com/tianocore/edk2/issues/76

Thanks!
Laszlo

> 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);
>  }
>  
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to