Index: syzygy/agent/asan/heap_managers/block_heap_manager_unittest.cc |
diff --git a/syzygy/agent/asan/heap_managers/block_heap_manager_unittest.cc b/syzygy/agent/asan/heap_managers/block_heap_manager_unittest.cc |
index ed63d81636fa550e9c93b0333e84e44a533e27ff..7aabf2244d206a1ee291c9a9b9c18abeec17201e 100644 |
--- a/syzygy/agent/asan/heap_managers/block_heap_manager_unittest.cc |
+++ b/syzygy/agent/asan/heap_managers/block_heap_manager_unittest.cc |
@@ -44,6 +44,7 @@ |
#include "syzygy/assm/assembler.h" |
#include "syzygy/assm/buffer_serializer.h" |
#include "syzygy/common/asan_parameters.h" |
+#include "syzygy/testing/laa.h" |
namespace agent { |
namespace asan { |
@@ -612,6 +613,28 @@ TEST_F(BlockHeapManagerTest, AllocAndFree) { |
EXPECT_TRUE(heap_manager_->DestroyHeap(heap_id)); |
} |
+TEST_F(BlockHeapManagerTest, AllocAndFreeLargeBlock) { |
+ TEST_ONLY_SUPPORTS_4G(); |
+ |
+ const size_t kAllocSize = 0x7000001c; |
+ HeapId heap_id = heap_manager_->CreateHeap(); |
+ EXPECT_NE(0u, heap_id); |
+ void* alloc = heap_manager_->Allocate(heap_id, kAllocSize); |
+ EXPECT_NE(static_cast<void*>(nullptr), alloc); |
+ EXPECT_LE(kAllocSize, heap_manager_->Size(heap_id, alloc)); |
+ EXPECT_TRUE(heap_manager_->Free(heap_id, alloc)); |
+ EXPECT_TRUE(heap_manager_->DestroyHeap(heap_id)); |
+} |
+ |
+TEST_F(BlockHeapManagerTest, AllocLargeBlockFail) { |
+ const size_t kAllocSize = 0x80000000; |
+ HeapId heap_id = heap_manager_->CreateHeap(); |
+ EXPECT_NE(0u, heap_id); |
+ void* alloc = heap_manager_->Allocate(heap_id, kAllocSize); |
+ EXPECT_EQ(static_cast<void*>(nullptr), alloc); |
+ EXPECT_TRUE(heap_manager_->DestroyHeap(heap_id)); |
+} |
+ |
TEST_F(BlockHeapManagerTest, FreeNullPointer) { |
HeapId heap_id = heap_manager_->CreateHeap(); |
EXPECT_NE(0u, heap_id); |