Commit 25cc38bb authored by Mukund Sivaraman's avatar Mukund Sivaraman
Browse files

[2088] Handle NULL deallocate as a nop

parent 3e70efc3
......@@ -31,6 +31,12 @@ MemorySegmentLocal::allocate(size_t size) {
void
MemorySegmentLocal::deallocate(void* ptr, size_t size) {
if (ptr == NULL) {
// Return early if NULL is passed to be deallocated (without
// modifying allocated_size, or comparing against it).
return;
}
if (size > allocated_size_) {
isc_throw(OutOfRange, "Invalid size to deallocate: " << size
<< "; currently allocated size: " << allocated_size_);
......
......@@ -86,4 +86,17 @@ TEST(MemorySegmentLocal, TestBadDeallocate) {
EXPECT_THROW(segment->deallocate(ptr, 2048), isc::OutOfRange);
}
TEST(MemorySegmentLocal, TestNullDeallocate) {
auto_ptr<MemorySegment> segment(new MemorySegmentLocal());
// By default, nothing is allocated.
EXPECT_TRUE(segment->allMemoryDeallocated());
// NULL deallocation is a no-op.
EXPECT_NO_THROW(segment->deallocate(NULL, 1024));
// This should still return true.
EXPECT_TRUE(segment->allMemoryDeallocated());
}
} // anonymous namespace
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment