From 3cd6f66067904e12c9f0f44336a1aa85f0920672 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sat, 13 Dec 2014 10:13:24 +0100 Subject: [PATCH] Test that DynamicJsonBuffer can't alloc more than BLOCK_CAPACITY --- include/ArduinoJson/DynamicJsonBuffer.hpp | 9 ++++++++- test/DynamicJsonBuffer_Basic_Tests.cpp | 22 ++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/include/ArduinoJson/DynamicJsonBuffer.hpp b/include/ArduinoJson/DynamicJsonBuffer.hpp index dd957e20..6f86f993 100644 --- a/include/ArduinoJson/DynamicJsonBuffer.hpp +++ b/include/ArduinoJson/DynamicJsonBuffer.hpp @@ -19,14 +19,21 @@ class DynamicJsonBuffer : public JsonBuffer { size_t size() const { return _size; } + static const size_t BLOCK_CAPACITY = 32; + protected: virtual void* alloc(size_t bytes) { + if (bytes > BLOCK_CAPACITY) return NULL; void* p = _buffer + _size; _size += bytes; return p; } - static const size_t BLOCK_CAPACITY = 32; + bool canStore(size_t bytes) { + // by design a DynamicJsonBuffer can't alloc a block bigger than + // BLOCK_CAPACITY + return bytes < BLOCK_CAPACITY; + } size_t _size; uint8_t _buffer[BLOCK_CAPACITY]; diff --git a/test/DynamicJsonBuffer_Basic_Tests.cpp b/test/DynamicJsonBuffer_Basic_Tests.cpp index 6f05fe84..5c017c32 100644 --- a/test/DynamicJsonBuffer_Basic_Tests.cpp +++ b/test/DynamicJsonBuffer_Basic_Tests.cpp @@ -21,14 +21,24 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, InitialSizeIsZero) { } TEST_F(DynamicJsonBuffer_Basic_Tests, GrowsAfterAlloc) { - buffer.alloc(100); - ASSERT_EQ(100, buffer.size()); - buffer.alloc(100); - ASSERT_EQ(200, buffer.size()); + buffer.alloc(1); + ASSERT_EQ(1, buffer.size()); + buffer.alloc(1); + ASSERT_EQ(2, buffer.size()); +} + +TEST_F(DynamicJsonBuffer_Basic_Tests, CanAllocLessThanBlockCapacity) { + void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY); + ASSERT_TRUE(p); +} + +TEST_F(DynamicJsonBuffer_Basic_Tests, CantAllocMoreThanBlockCapacity) { + void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY + 1); + ASSERT_FALSE(p); } TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) { - void* p1 = buffer.alloc(100); - void* p2 = buffer.alloc(200); + void* p1 = buffer.alloc(1); + void* p2 = buffer.alloc(2); ASSERT_NE(p1, p2); }