Reviewed-by: Eric Dong <[email protected]>
> -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of Sheng, > Cecil (HPS SW) > Sent: Tuesday, March 15, 2016 10:39 AM > To: [email protected] > Cc: Tian, Feng; Zeng, Star > Subject: Re: [edk2] [PATCH] MdeModulePkg: Fixed incorrect Regular expression > protocol MatchString return value. > > > Loop maintainers. > > > Sincerely, > > Cecil Sheng > ISS Firmware Development > HPE Servers > > > -----Original Message----- > From: Sheng, Cecil (HPS SW) > Sent: Tuesday, March 1, 2016 1:17 PM > To: [email protected] > Cc: El-Haj-Mahmoud, Samer; Sheng, Cecil (HPS SW) > Subject: [PATCH] MdeModulePkg: Fixed incorrect Regular expression protocol > MatchString return value. > > According to UEFI2.6, CapturePtr in the Captures array returned by > MatchString() should be separatedly allocated so that they can be > freed by the caller. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Cecil Sheng <[email protected]> > Reviewed-by: Samer El-Haj-Mahmoud <[email protected]> > --- > .../RegularExpressionDxe/RegularExpressionDxe.c | 32 > ++++++++++++++++++---- > 1 file changed, 27 insertions(+), 5 deletions(-) > > diff --git > a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c > b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c > index cffbcb8..c6354b6 100644 > --- a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c > +++ b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c > @@ -2,7 +2,7 @@ > > EFI_REGULAR_EXPRESSION_PROTOCOL Implementation > > - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> > + (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> > > This program and the accompanying materials are licensed and made available > under the terms and conditions of the BSD License that accompanies this @@ > -91,6 +91,8 @@ OnigurumaMatch ( > CHAR8 ErrorMessage[ONIG_MAX_ERROR_MESSAGE_LEN]; > UINT32 Index; > OnigUChar *Start; > + EFI_STATUS Status; > + > > // > // Detemine the internal syntax type > @@ -102,7 +104,7 @@ OnigurumaMatch ( > OnigSyntax = ONIG_SYNTAX_PERL; > } else { > DEBUG ((DEBUG_ERROR, "Unsupported regex syntax - using default\n")); > - ASSERT (FALSE); > + return EFI_UNSUPPORTED; > } > > // > @@ -143,6 +145,8 @@ OnigurumaMatch ( > Region, > ONIG_OPTION_NONE > ); > + > + Status = EFI_SUCCESS; > if (OnigResult >= 0) { > *Result = TRUE; > } else { > @@ -150,6 +154,9 @@ OnigurumaMatch ( > if (OnigResult != ONIG_MISMATCH) { > onig_error_code_to_str (ErrorMessage, OnigResult); > DEBUG ((DEBUG_ERROR, "Regex match failed: %a\n", ErrorMessage)); > + onig_region_free (Region, 1); > + onig_free (OnigRegex); > + return EFI_DEVICE_ERROR; > } > } > > @@ -158,14 +165,29 @@ OnigurumaMatch ( > // > if (*Result && Captures != NULL) { > *CapturesCount = Region->num_regs; > - *Captures = AllocatePool (*CapturesCount * sizeof(**Captures)); > + *Captures = AllocateZeroPool (*CapturesCount * sizeof(**Captures)); > if (*Captures != NULL) { > for (Index = 0; Index < *CapturesCount; ++Index) { > // > // Region beg/end values represent bytes, not characters > // > - (*Captures)[Index].CapturePtr = (CHAR16*)((UINTN)String + > Region->beg[Index]); > (*Captures)[Index].Length = (Region->end[Index] - > Region->beg[Index]) / sizeof(CHAR16); > + (*Captures)[Index].CapturePtr = AllocateCopyPool ( > + ((*Captures)[Index].Length) * > sizeof (CHAR16), > + (CHAR16*)((UINTN)String + > Region->beg[Index]) > + ); > + if ((*Captures)[Index].CapturePtr == NULL) { > + Status = EFI_OUT_OF_RESOURCES; > + break; > + } > + } > + > + if (EFI_ERROR (Status)) { > + for (Index = 0; Index < *CapturesCount; ++Index) { > + if ((*Captures)[Index].CapturePtr != NULL) { > + FreePool ((CHAR16*)(*Captures)[Index].CapturePtr); > + } > + } > } > } > } > @@ -173,7 +195,7 @@ OnigurumaMatch ( > onig_region_free (Region, 1); > onig_free (OnigRegex); > > - return EFI_SUCCESS; > + return Status; > } > > /** > -- > 2.6.3.windows.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

