diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c index 9aa7b0a68e..4659c4473e 100644 --- a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c +++ b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c @@ -2,7 +2,7 @@ Module to rewrite stdlib references within Oniguruma - (C) Copyright 2014-2015 Hewlett Packard Enterprise Development LP
+ (C) Copyright 2014-2021 Hewlett Packard Enterprise Development LP
Copyright (c) 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -96,3 +96,20 @@ void* memset (void *dest, char ch, unsigned int count) return SetMem (dest, count, ch); } +void free(void *ptr) +{ + VOID *EvalOnce; + ONIGMEM_HEAD *PoolHdr; + + EvalOnce = ptr; + if (EvalOnce == NULL) { + return; + } + + PoolHdr = (ONIGMEM_HEAD *)EvalOnce - 1; + if (PoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE) { + FreePool (PoolHdr); + } else { + FreePool (EvalOnce); + } +} diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h index 20b75c3361..0bdb7be529 100644 --- a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h +++ b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h @@ -2,7 +2,7 @@ Module to rewrite stdlib references within Oniguruma - (C) Copyright 2014-2015 Hewlett Packard Enterprise Development LP
+ (C) Copyright 2014-2021 Hewlett Packard Enterprise Development LP
Copyright (c) 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -46,17 +46,6 @@ typedef INTN intptr_t; #endif #define calloc(n,s) AllocateZeroPool((n)*(s)) - -#define free(p) \ - do { \ - VOID *EvalOnce; \ - \ - EvalOnce = (p); \ - if (EvalOnce != NULL) { \ - FreePool (EvalOnce); \ - } \ - } while (FALSE) - #define xmemmove(Dest,Src,Length) CopyMem(Dest,Src,Length) #define xmemcpy(Dest,Src,Length) CopyMem(Dest,Src,Length) #define xmemset(Buffer,Value,Length) SetMem(Buffer,Length,Value) @@ -98,6 +87,7 @@ void* malloc(size_t size); void* realloc(void *ptr, size_t size); void* memcpy (void *dest, const void *src, unsigned int count); void* memset (void *dest, char ch, unsigned int count); +void free(void *ptr); #define exit(n) ASSERT(FALSE);