On 17 September 2015 at 16:57, Qiu Shumin <shumin....@intel.com> wrote:
> Difference with the 1st version:
> It's not correct to casts away constness to allow TrimSpaces() to modify 
> 'commandline'.
> This version make a copy of 'commandLine' and work with that in the remainder 
> of the function.
>
> Difference with the 2nd version
> Remove the redundant code.
>
> Cc: Jaben Carsey <jaben.car...@intel.com>
> Cc: Ruiyu Ni <ruiyu...@intel.com>
> Cc: Yang Jadis <jadis.y...@intel.com>
> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Qiu Shumin <shumin....@intel.com>
> ---

Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org>

Thanks!


>  .../Application/Shell/ShellParametersProtocol.c    | 34 
> +++++++++++++++-------
>  1 file changed, 23 insertions(+), 11 deletions(-)
>
> diff --git a/ShellPkg/Application/Shell/ShellParametersProtocol.c 
> b/ShellPkg/Application/Shell/ShellParametersProtocol.c
> index b404987..cd16140 100644
> --- a/ShellPkg/Application/Shell/ShellParametersProtocol.c
> +++ b/ShellPkg/Application/Shell/ShellParametersProtocol.c
> @@ -195,7 +195,9 @@ ParseCommandLineToArgs(
>    CHAR16      *TempParameter;
>    CHAR16      *Walker;
>    CHAR16      *NewParam;
> +  CHAR16      *NewCommandLine;
>    UINTN       Size;
> +  EFI_STATUS  Status;
>
>    ASSERT(Argc != NULL);
>    ASSERT(Argv != NULL);
> @@ -206,15 +208,21 @@ ParseCommandLineToArgs(
>      return (EFI_SUCCESS);
>    }
>
> -  TrimSpaces(&(CHAR16*)CommandLine);
> -  Size = StrSize(CommandLine);
> +  NewCommandLine = AllocateCopyPool(StrSize(CommandLine), CommandLine);
> +  if (NewCommandLine == NULL){
> +    return (EFI_OUT_OF_RESOURCES);
> +  }
> +
> +  TrimSpaces(&NewCommandLine);
> +  Size = StrSize(NewCommandLine);
>    TempParameter = AllocateZeroPool(Size);
>    if (TempParameter == NULL) {
> +    SHELL_FREE_NON_NULL(NewCommandLine);
>      return (EFI_OUT_OF_RESOURCES);
>    }
>
>    for ( Count = 0
> -      , Walker = (CHAR16*)CommandLine
> +      , Walker = (CHAR16*)NewCommandLine
>        ; Walker != NULL && *Walker != CHAR_NULL
>        ; Count++
>        ) {
> @@ -228,30 +236,34 @@ ParseCommandLineToArgs(
>    //
>    (*Argv) = AllocateZeroPool((Count)*sizeof(CHAR16*));
>    if (*Argv == NULL) {
> -    SHELL_FREE_NON_NULL(TempParameter);
> -    return (EFI_OUT_OF_RESOURCES);
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto Done;
>    }
>
>    *Argc = 0;
> -  Walker = (CHAR16*)CommandLine;
> +  Walker = (CHAR16*)NewCommandLine;
>    while(Walker != NULL && *Walker != CHAR_NULL) {
>      SetMem16(TempParameter, Size, CHAR_NULL);
>      if (EFI_ERROR(GetNextParameter(&Walker, &TempParameter, Size))) {
> -      SHELL_FREE_NON_NULL(TempParameter);
> -      return (EFI_INVALID_PARAMETER);
> +      Status = EFI_INVALID_PARAMETER;
> +      goto Done;
>      }
>
>      NewParam = AllocateCopyPool(StrSize(TempParameter), TempParameter);
>      if (NewParam == NULL){
> -      SHELL_FREE_NON_NULL(TempParameter);
> -      return (EFI_OUT_OF_RESOURCES);
> +      Status = EFI_OUT_OF_RESOURCES;
> +      goto Done;
>      }
>      ((CHAR16**)(*Argv))[(*Argc)] = NewParam;
>      (*Argc)++;
>    }
>    ASSERT(Count >= (*Argc));
> +  Status = EFI_SUCCESS;
> +
> +Done:
>    SHELL_FREE_NON_NULL(TempParameter);
> -  return (EFI_SUCCESS);
> +  SHELL_FREE_NON_NULL(NewCommandLine);
> +  return (Status);
>  }
>
>  /**
> --
> 1.9.5.msysgit.1
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to