From 74fa13f6a038e52d9fbd721f1f414ae097e6325b Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Wed, 30 Oct 2019 10:14:30 -0400 Subject: [PATCH 1/3] CMOCK_MEM_ALIGN should not change depending on #include order. The value of CMOCK_MEM_ALIGN changed depending on whether unity.h or cmock.h was included first. Since cmock_internals.h uses features from unity.h, it should include unity.h. --- src/cmock.c | 1 - src/cmock_internals.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cmock.c b/src/cmock.c index f6a41c8..372702b 100644 --- a/src/cmock.c +++ b/src/cmock.c @@ -4,7 +4,6 @@ [Released under MIT License. Please refer to license.txt for details] ========================================== */ -#include "unity.h" #include "cmock.h" //public constants to be used by mocks diff --git a/src/cmock_internals.h b/src/cmock_internals.h index 5c922ad..ae2e496 100644 --- a/src/cmock_internals.h +++ b/src/cmock_internals.h @@ -7,6 +7,8 @@ #ifndef CMOCK_FRAMEWORK_INTERNALS_H #define CMOCK_FRAMEWORK_INTERNALS_H +#include "unity.h" + //These are constants that the generated mocks have access to extern const char* CMockStringOutOfMemory; extern const char* CMockStringCalledMore; From ea71fb0e0e8b0a2cf98b888d647db684c3e342eb Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Wed, 30 Oct 2019 10:22:05 -0400 Subject: [PATCH 2/3] CMock_Guts_MemBytesUsed() should return 0 initially. Set CMock_Guts_FreePtr to CMOCK_MEM_ALIGN_SIZE initially (the same value it is reset to by CMock_Guts_MemFreeAll(). This makes sure that the value returned by CMock_Guts_MemBytesUsed() is 0 initially and not a negative value. --- src/cmock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmock.c b/src/cmock.c index 372702b..67a87cc 100644 --- a/src/cmock.c +++ b/src/cmock.c @@ -23,11 +23,11 @@ const char* CMockStringMismatch = "Function called with unexpected argument v #ifdef CMOCK_MEM_DYNAMIC static unsigned char* CMock_Guts_Buffer = NULL; static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_ALIGN_SIZE; -static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr; +static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr = CMOCK_MEM_ALIGN_SIZE; #else static unsigned char CMock_Guts_Buffer[CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE]; static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE; -static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr; +static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr = CMOCK_MEM_ALIGN_SIZE; #endif //------------------------------------------------------- From c787042e6d28b593869de456043f5b08fbb2d13a Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Wed, 30 Oct 2019 10:30:25 -0400 Subject: [PATCH 3/3] Fix off-by-one error in out-of-memory check. We should be able to allocate up to CMock_Guts_MemBytesFree() minus CMOCK_MEM_INDEX_SIZE. An incorrect less-than-or-equal prevented allocating the very last byte. --- src/cmock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmock.c b/src/cmock.c index 67a87cc..5e5cb6c 100644 --- a/src/cmock.c +++ b/src/cmock.c @@ -45,7 +45,7 @@ CMOCK_MEM_INDEX_TYPE CMock_Guts_MemNew(CMOCK_MEM_INDEX_TYPE size) size = size + CMOCK_MEM_INDEX_SIZE; if (size & CMOCK_MEM_ALIGN_MASK) size = (size + CMOCK_MEM_ALIGN_MASK) & ~CMOCK_MEM_ALIGN_MASK; - if ((CMock_Guts_BufferSize - CMock_Guts_FreePtr) <= size) + if ((CMock_Guts_BufferSize - CMock_Guts_FreePtr) < size) { #ifndef CMOCK_MEM_DYNAMIC return CMOCK_GUTS_NONE; // nothing we can do; our static buffer is out of memory