| 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,41 @@ | 
 | +// 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" | 
 | + | 
 | +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 ? FX_AlignedAlloc(size, 16) : nullptr; | 
 | +} | 
 | + | 
 | +void opj_aligned_free(void* ptr) { | 
 | +  FX_AlignedFree(ptr); | 
 | +} | 
 | + | 
 | +void* opj_aligned_32_malloc(size_t size) { | 
 | +  return size ? FX_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 */ |