|  | diff --git a/third_party/libopenjpeg/opj_malloc.cc b/third_party/libopenjpeg/opj_malloc.cc | 
|  | new file mode 100644 | 
|  | --- /dev/null | 
|  | +++ b/third_party/libopenjpeg/opj_malloc.cc | 
|  | @@ -0,0 +1,42 @@ | 
|  | +// Copyright 2020 The PDFium Authors | 
|  | +// Use of this source code is governed by a BSD-style license that can be | 
|  | +// found in the LICENSE file. | 
|  | + | 
|  | +// Deliberately not including opj_malloc.h, which has poisoned malloc and | 
|  | +// friends. | 
|  | + | 
|  | +#include "core/fxcrt/fx_memory.h" | 
|  | +#include "third_party/base/memory/aligned_memory.h" | 
|  | + | 
|  | +extern "C" { | 
|  | + | 
|  | +void* opj_malloc(size_t size) { | 
|  | +  return FXMEM_DefaultAlloc(size); | 
|  | +} | 
|  | + | 
|  | +void* opj_calloc(size_t numOfElements, size_t sizeOfElements) { | 
|  | +  return FXMEM_DefaultCalloc(numOfElements, sizeOfElements); | 
|  | +} | 
|  | + | 
|  | +void* opj_aligned_malloc(size_t size) { | 
|  | +  return size ? pdfium::base::AlignedAlloc(size, 16) : nullptr; | 
|  | +} | 
|  | + | 
|  | +void opj_aligned_free(void* ptr) { | 
|  | +  pdfium::base::AlignedFree(ptr); | 
|  | +} | 
|  | + | 
|  | +void* opj_aligned_32_malloc(size_t size) { | 
|  | +  return size ? pdfium::base::AlignedAlloc(size, 32) : nullptr; | 
|  | +} | 
|  | + | 
|  | +void* opj_realloc(void* m, size_t s) { | 
|  | +  return FXMEM_DefaultRealloc(m, s); | 
|  | +} | 
|  | + | 
|  | +void opj_free(void* m) { | 
|  | +  if (m) | 
|  | +    FXMEM_DefaultFree(m); | 
|  | +} | 
|  | + | 
|  | +}  // extern "C" | 
|  | diff --git a/third_party/libopenjpeg/opj_malloc.h b/third_party/libopenjpeg/opj_malloc.h | 
|  | --- a/third_party/libopenjpeg/opj_malloc.h | 
|  | +++ b/third_party/libopenjpeg/opj_malloc.h | 
|  | @@ -33,6 +33,11 @@ | 
|  | #define OPJ_MALLOC_H | 
|  |  | 
|  | #include <stddef.h> | 
|  | + | 
|  | +#ifdef __cplusplus | 
|  | +extern "C" { | 
|  | +#endif | 
|  | + | 
|  | /** | 
|  | @file opj_malloc.h | 
|  | @brief Internal functions | 
|  | @@ -68,7 +73,6 @@ Allocate memory aligned to a 16 byte bou | 
|  | @return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available | 
|  | */ | 
|  | void * opj_aligned_malloc(size_t size); | 
|  | -void * opj_aligned_realloc(void *ptr, size_t size); | 
|  | void opj_aligned_free(void* ptr); | 
|  |  | 
|  | /** | 
|  | @@ -77,7 +81,6 @@ Allocate memory aligned to a 32 byte bou | 
|  | @return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available | 
|  | */ | 
|  | void * opj_aligned_32_malloc(size_t size); | 
|  | -void * opj_aligned_32_realloc(void *ptr, size_t size); | 
|  |  | 
|  | /** | 
|  | Reallocate memory blocks. | 
|  | @@ -102,5 +105,8 @@ void opj_free(void * m); | 
|  |  | 
|  | /*@}*/ | 
|  |  | 
|  | -#endif /* OPJ_MALLOC_H */ | 
|  | +#ifdef __cplusplus | 
|  | +}  // extern "C" | 
|  | +#endif | 
|  |  | 
|  | +#endif /* OPJ_MALLOC_H */ |