Reviewed-by: Hao Wu <[email protected]>

Best Regards,
Hao Wu

> -----Original Message-----
> From: Bi, Dandan
> Sent: Tuesday, July 05, 2016 4:53 PM
> To: [email protected]
> Cc: Dong, Eric; Wu, Hao A
> Subject: [patch] MdeModulePkg/BootMaintUi: Add error handling codes when
> AllocatePool fail
> 
> The AllocateCopyPool in function ExtractFileNameFromDevicePath
> may return NULL, so need to do error handling. This patch is to
> add error handling codes for function ExtractFileNameFromDevicePath
> and its caller functions.
> 
> Cc: Eric Dong <[email protected]>
> Cc: Hao Wu <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Dandan Bi <[email protected]>
> Reviewed-by: Eric Dong <[email protected]>
> ---
>  .../BootMaintenanceManagerUiLib/BootMaintenance.c  |  5 ++-
>  .../BootMaintenanceManagerUiLib/BootOption.c       | 42 ++++++++++++--------
> --
>  .../BootMaintenanceManagerUiLib/UpdatePage.c       | 14 ++++----
>  3 files changed, 35 insertions(+), 26 deletions(-)
> 
> diff --git
> a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c
> b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c
> index b35e938..393091f 100644
> ---
> a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c
> +++
> b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c
> @@ -377,19 +377,22 @@ ExtractFileNameFromDevicePath (
>    ASSERT(DevicePath != NULL);
> 
>    String = UiDevicePathToStr(DevicePath);
>    MatchString = String;
>    LastMatch   = String;
> +  FileName    = NULL;
> 
>    while(MatchString != NULL){
>      LastMatch   = MatchString + 1;
>      MatchString = StrStr(LastMatch,L"\\");
>    }
> 
>    Length = StrLen(LastMatch);
>    FileName = AllocateCopyPool ((Length + 1) * sizeof(CHAR16), LastMatch);
> -  *(FileName + Length) = 0;
> +  if (FileName != NULL) {
> +    *(FileName + Length) = 0;
> +  }
> 
>    FreePool(String);
> 
>    return FileName;
>  }
> diff --git
> a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
> b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
> index c660c73..890728a 100644
> --- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
> +++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
> @@ -863,33 +863,37 @@ BootFromFile (
>    )
>  {
>    EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
>    CHAR16                       *FileName;
> 
> +  FileName = NULL;
> +
>    FileName = ExtractFileNameFromDevicePath(FilePath);
> -  EfiBootManagerInitializeLoadOption (
> -    &BootOption,
> -    0,
> -    LoadOptionTypeBoot,
> -    LOAD_OPTION_ACTIVE,
> -    FileName,
> -    FilePath,
> -    NULL,
> -    0
> -    );
> -  //
> -  // Since current no boot from removable media directly is allowed */
> -  //
> -  gST->ConOut->ClearScreen (gST->ConOut);
> +  if (FileName != NULL) {
> +    EfiBootManagerInitializeLoadOption (
> +      &BootOption,
> +      0,
> +      LoadOptionTypeBoot,
> +      LOAD_OPTION_ACTIVE,
> +      FileName,
> +      FilePath,
> +      NULL,
> +      0
> +      );
> +    //
> +    // Since current no boot from removable media directly is allowed */
> +    //
> +    gST->ConOut->ClearScreen (gST->ConOut);
> 
> -  BmmSetConsoleMode (FALSE);
> -  EfiBootManagerBoot (&BootOption);
> -  BmmSetConsoleMode (TRUE);
> +    BmmSetConsoleMode (FALSE);
> +    EfiBootManagerBoot (&BootOption);
> +    BmmSetConsoleMode (TRUE);
> 
> -  FreePool(FileName);
> +    FreePool(FileName);
> 
> -  EfiBootManagerFreeLoadOption (&BootOption);
> +    EfiBootManagerFreeLoadOption (&BootOption);
> +  }
> 
>    return FALSE;
>  }
> 
>  /**
> diff --git
> a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/UpdatePage.c
> b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/UpdatePage.c
> index 13a29db..9e79826 100644
> --- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/UpdatePage.c
> +++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/UpdatePage.c
> @@ -1,9 +1,9 @@
>  /** @file
>  Dynamically update the pages.
> 
> -Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials
>  are licensed and made available under the terms and conditions of the BSD
> License
>  which accompanies this distribution.  The full text of the license may be 
> found
> at
>  http://opensource.org/licenses/bsd-license.php
> 
> @@ -1018,21 +1018,23 @@ UpdateOptionPage(
>    )
>  {
>    CHAR16                *String;
>    EFI_STRING_ID         StringToken;
> 
> +  String = NULL;
> +
>    if (DevicePath != NULL){
>      String = ExtractFileNameFromDevicePath(DevicePath);
> -    StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);
> -    FreePool(String);
> -  } else {
> +  }
> +  if (String == NULL) {
>      String = HiiGetString (CallbackData->BmmHiiHandle, STRING_TOKEN
> (STR_NULL_STRING), NULL);
>      ASSERT (String != NULL);
> -    StringToken =  HiiSetString (CallbackData->BmmHiiHandle, 0, String, 
> NULL);
> -    FreePool (String);
>    }
> 
> +  StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);
> +  FreePool (String);
> +
>    if(FormId == FORM_BOOT_ADD_ID){
>      if (!CallbackData->BmmFakeNvData.BootOptionChanged) {
>        ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof
> (CallbackData->BmmFakeNvData.BootOptionalData));
>        ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof
> (CallbackData->BmmFakeNvData.BootDescriptionData));
>      }
> --
> 1.9.5.msysgit.1

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

Reply via email to