From a9deea931ed7c7526bb32e30c54d91763f8026e0 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 25 Apr 2017 10:37:47 -0700 Subject: Rename fx_basic_memmgr.cpp to fx_memory.cpp to match .h naming Change-Id: I769d7f2c52b0a0db36be6145bfb626c126a58be9 Reviewed-on: https://pdfium-review.googlesource.com/4480 Commit-Queue: Tom Sepez Commit-Queue: dsinclair Reviewed-by: dsinclair --- core/fxcrt/fx_basic_memmgr.cpp | 46 ------------------- core/fxcrt/fx_basic_memmgr_unittest.cpp | 80 -------------------------------- core/fxcrt/fx_memory.cpp | 46 +++++++++++++++++++ core/fxcrt/fx_memory_unittest.cpp | 81 +++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 126 deletions(-) delete mode 100644 core/fxcrt/fx_basic_memmgr.cpp delete mode 100644 core/fxcrt/fx_basic_memmgr_unittest.cpp create mode 100644 core/fxcrt/fx_memory.cpp create mode 100644 core/fxcrt/fx_memory_unittest.cpp (limited to 'core/fxcrt') diff --git a/core/fxcrt/fx_basic_memmgr.cpp b/core/fxcrt/fx_basic_memmgr.cpp deleted file mode 100644 index 75bc2bc1f1..0000000000 --- a/core/fxcrt/fx_basic_memmgr.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include // For abort(). - -#include "core/fxcrt/fx_memory.h" - -pdfium::base::PartitionAllocatorGeneric gArrayBufferPartitionAllocator; -pdfium::base::PartitionAllocatorGeneric gStringPartitionAllocator; - -void FXMEM_InitalizePartitionAlloc() { - static bool s_gPartitionAllocatorsInitialized = false; - if (!s_gPartitionAllocatorsInitialized) { - pdfium::base::PartitionAllocGlobalInit(FX_OutOfMemoryTerminate); - gArrayBufferPartitionAllocator.init(); - gStringPartitionAllocator.init(); - s_gPartitionAllocatorsInitialized = true; - } -} - -void* FXMEM_DefaultAlloc(size_t byte_size, int flags) { - return (void*)malloc(byte_size); -} - -void* FXMEM_DefaultCalloc(size_t num_elems, size_t byte_size) { - return calloc(num_elems, byte_size); -} - -void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags) { - return realloc(pointer, new_size); -} - -void FXMEM_DefaultFree(void* pointer, int flags) { - free(pointer); -} - -NEVER_INLINE void FX_OutOfMemoryTerminate() { - // Termimate cleanly if we can, else crash at a specific address (0xbd). - abort(); -#ifndef _WIN32 - reinterpret_cast(0xbd)(); -#endif -} diff --git a/core/fxcrt/fx_basic_memmgr_unittest.cpp b/core/fxcrt/fx_basic_memmgr_unittest.cpp deleted file mode 100644 index fdffd98f19..0000000000 --- a/core/fxcrt/fx_basic_memmgr_unittest.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2015 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include - -#include "core/fxcrt/fx_memory.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -const size_t kMaxByteAlloc = std::numeric_limits::max(); -const size_t kMaxIntAlloc = kMaxByteAlloc / sizeof(int); -const size_t kOverflowIntAlloc = kMaxIntAlloc + 100; -const size_t kWidth = 640; -const size_t kOverflowIntAlloc2D = kMaxIntAlloc / kWidth + 10; - -} // namespace - -// TODO(tsepez): re-enable OOM tests if we can find a way to -// prevent it from hosing the bots. -TEST(fxcrt, DISABLED_FX_AllocOOM) { - EXPECT_DEATH_IF_SUPPORTED((void)FX_Alloc(int, kMaxIntAlloc), ""); - - int* ptr = FX_Alloc(int, 1); - EXPECT_TRUE(ptr); - EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kMaxIntAlloc), ""); - FX_Free(ptr); -} - -TEST(fxcrt, FX_AllocOverflow) { - // |ptr| needs to be defined and used to avoid Clang optimizes away the - // FX_Alloc() statement overzealously for optimized builds. - int* ptr = nullptr; - EXPECT_DEATH_IF_SUPPORTED(ptr = FX_Alloc(int, kOverflowIntAlloc), "") << ptr; - - ptr = FX_Alloc(int, 1); - EXPECT_TRUE(ptr); - EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kOverflowIntAlloc), ""); - FX_Free(ptr); -} - -TEST(fxcrt, FX_AllocOverflow2D) { - // |ptr| needs to be defined and used to avoid Clang optimizes away the - // FX_Alloc() statement overzealously for optimized builds. - int* ptr = nullptr; - EXPECT_DEATH_IF_SUPPORTED(ptr = FX_Alloc2D(int, kWidth, kOverflowIntAlloc2D), - "") - << ptr; -} - -TEST(fxcrt, DISABLED_FX_TryAllocOOM) { - EXPECT_FALSE(FX_TryAlloc(int, kMaxIntAlloc)); - - int* ptr = FX_Alloc(int, 1); - EXPECT_TRUE(ptr); - EXPECT_FALSE(FX_TryRealloc(int, ptr, kMaxIntAlloc)); - FX_Free(ptr); -} - -TEST(fxcrt, FX_TryAllocOverflow) { - // |ptr| needs to be defined and used to avoid Clang optimizes away the - // calloc() statement overzealously for optimized builds. - int* ptr = (int*)calloc(sizeof(int), kOverflowIntAlloc); - EXPECT_FALSE(ptr) << ptr; - - ptr = FX_Alloc(int, 1); - EXPECT_TRUE(ptr); - EXPECT_FALSE(FX_TryRealloc(int, ptr, kOverflowIntAlloc)); - FX_Free(ptr); -} - -TEST(fxcrt, DISABLED_FXMEM_DefaultOOM) { - EXPECT_FALSE(FXMEM_DefaultAlloc(kMaxByteAlloc, 0)); - - void* ptr = FXMEM_DefaultAlloc(1, 0); - EXPECT_TRUE(ptr); - EXPECT_FALSE(FXMEM_DefaultRealloc(ptr, kMaxByteAlloc, 0)); - FXMEM_DefaultFree(ptr, 0); -} diff --git a/core/fxcrt/fx_memory.cpp b/core/fxcrt/fx_memory.cpp new file mode 100644 index 0000000000..2807139aa2 --- /dev/null +++ b/core/fxcrt/fx_memory.cpp @@ -0,0 +1,46 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "core/fxcrt/fx_memory.h" + +#include // For abort(). + +pdfium::base::PartitionAllocatorGeneric gArrayBufferPartitionAllocator; +pdfium::base::PartitionAllocatorGeneric gStringPartitionAllocator; + +void FXMEM_InitalizePartitionAlloc() { + static bool s_gPartitionAllocatorsInitialized = false; + if (!s_gPartitionAllocatorsInitialized) { + pdfium::base::PartitionAllocGlobalInit(FX_OutOfMemoryTerminate); + gArrayBufferPartitionAllocator.init(); + gStringPartitionAllocator.init(); + s_gPartitionAllocatorsInitialized = true; + } +} + +void* FXMEM_DefaultAlloc(size_t byte_size, int flags) { + return (void*)malloc(byte_size); +} + +void* FXMEM_DefaultCalloc(size_t num_elems, size_t byte_size) { + return calloc(num_elems, byte_size); +} + +void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags) { + return realloc(pointer, new_size); +} + +void FXMEM_DefaultFree(void* pointer, int flags) { + free(pointer); +} + +NEVER_INLINE void FX_OutOfMemoryTerminate() { + // Termimate cleanly if we can, else crash at a specific address (0xbd). + abort(); +#ifndef _WIN32 + reinterpret_cast(0xbd)(); +#endif +} diff --git a/core/fxcrt/fx_memory_unittest.cpp b/core/fxcrt/fx_memory_unittest.cpp new file mode 100644 index 0000000000..ae15db2a72 --- /dev/null +++ b/core/fxcrt/fx_memory_unittest.cpp @@ -0,0 +1,81 @@ +// Copyright 2015 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxcrt/fx_memory.h" + +#include + +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +const size_t kMaxByteAlloc = std::numeric_limits::max(); +const size_t kMaxIntAlloc = kMaxByteAlloc / sizeof(int); +const size_t kOverflowIntAlloc = kMaxIntAlloc + 100; +const size_t kWidth = 640; +const size_t kOverflowIntAlloc2D = kMaxIntAlloc / kWidth + 10; + +} // namespace + +// TODO(tsepez): re-enable OOM tests if we can find a way to +// prevent it from hosing the bots. +TEST(fxcrt, DISABLED_FX_AllocOOM) { + EXPECT_DEATH_IF_SUPPORTED((void)FX_Alloc(int, kMaxIntAlloc), ""); + + int* ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kMaxIntAlloc), ""); + FX_Free(ptr); +} + +TEST(fxcrt, FX_AllocOverflow) { + // |ptr| needs to be defined and used to avoid Clang optimizes away the + // FX_Alloc() statement overzealously for optimized builds. + int* ptr = nullptr; + EXPECT_DEATH_IF_SUPPORTED(ptr = FX_Alloc(int, kOverflowIntAlloc), "") << ptr; + + ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kOverflowIntAlloc), ""); + FX_Free(ptr); +} + +TEST(fxcrt, FX_AllocOverflow2D) { + // |ptr| needs to be defined and used to avoid Clang optimizes away the + // FX_Alloc() statement overzealously for optimized builds. + int* ptr = nullptr; + EXPECT_DEATH_IF_SUPPORTED(ptr = FX_Alloc2D(int, kWidth, kOverflowIntAlloc2D), + "") + << ptr; +} + +TEST(fxcrt, DISABLED_FX_TryAllocOOM) { + EXPECT_FALSE(FX_TryAlloc(int, kMaxIntAlloc)); + + int* ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_FALSE(FX_TryRealloc(int, ptr, kMaxIntAlloc)); + FX_Free(ptr); +} + +TEST(fxcrt, FX_TryAllocOverflow) { + // |ptr| needs to be defined and used to avoid Clang optimizes away the + // calloc() statement overzealously for optimized builds. + int* ptr = (int*)calloc(sizeof(int), kOverflowIntAlloc); + EXPECT_FALSE(ptr) << ptr; + + ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_FALSE(FX_TryRealloc(int, ptr, kOverflowIntAlloc)); + FX_Free(ptr); +} + +TEST(fxcrt, DISABLED_FXMEM_DefaultOOM) { + EXPECT_FALSE(FXMEM_DefaultAlloc(kMaxByteAlloc, 0)); + + void* ptr = FXMEM_DefaultAlloc(1, 0); + EXPECT_TRUE(ptr); + EXPECT_FALSE(FXMEM_DefaultRealloc(ptr, kMaxByteAlloc, 0)); + FXMEM_DefaultFree(ptr, 0); +} -- cgit v1.2.3