From ed099befbb300d6f9c393cb415fdb2a68c2ef471 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 15 May 2015 16:30:52 -0700 Subject: Merge to XFA: Abort on OOM by default in FX_Alloc(). Original Review URL: https://codereview.chromium.org/1128043009 Original Review URL: https://codereview.chromium.org/1142463005 R=thestig@chromium.org TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/1144683002 --- core/src/fxcrt/fx_basic_memmgr_unittest.cpp | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core/src/fxcrt/fx_basic_memmgr_unittest.cpp (limited to 'core/src/fxcrt/fx_basic_memmgr_unittest.cpp') diff --git a/core/src/fxcrt/fx_basic_memmgr_unittest.cpp b/core/src/fxcrt/fx_basic_memmgr_unittest.cpp new file mode 100644 index 0000000000..565021d29e --- /dev/null +++ b/core/src/fxcrt/fx_basic_memmgr_unittest.cpp @@ -0,0 +1,63 @@ +// 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 "testing/gtest/include/gtest/gtest.h" +#include "../../include/fxcrt/fx_memory.h" + +namespace { + +const size_t kMaxByteAlloc = std::numeric_limits::max(); +const size_t kMaxIntAlloc = kMaxByteAlloc / sizeof(int); +const size_t kOverflowIntAlloc = kMaxIntAlloc + 100; + +} // 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(FX_Alloc(int, kMaxIntAlloc), ""); + + int* ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_DEATH_IF_SUPPORTED(FX_Realloc(int, ptr, kMaxIntAlloc), ""); + FX_Free(ptr); +} + +TEST(fxcrt, FX_AllocOverflow) { + EXPECT_DEATH_IF_SUPPORTED(FX_Alloc(int, kOverflowIntAlloc), ""); + + int* ptr = FX_Alloc(int, 1); + EXPECT_TRUE(ptr); + EXPECT_DEATH_IF_SUPPORTED(FX_Realloc(int, ptr, kOverflowIntAlloc), ""); + FX_Free(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) { + EXPECT_FALSE(FX_TryAlloc(int, kOverflowIntAlloc)); + + int* 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