Fixed dlmstp ringbuffer initialization corruption (#865)

* Added ringbuf API for testing.

* Fixed basic ms/tp datalink packet ringbuffer initialization buffer overrun.

* Added basic ms/tp datalink unit test

* Added Ringbuf_Initialize() API with buffer size checking.

* Changed examples to use Ringbuf_Initialize() API for buffer size checking.
This commit is contained in:
Steve Karg
2024-12-02 07:32:57 -06:00
committed by GitHub
parent f28b03bf81
commit 001b69cbd8
11 changed files with 526 additions and 14 deletions
+11 -9
View File
@@ -79,6 +79,7 @@ static void testRingAroundBuffer(
*/
static void testRingBuf(
uint8_t *data_store,
unsigned data_store_size,
uint8_t *data_element,
unsigned element_size,
unsigned element_count)
@@ -89,8 +90,8 @@ static void testRingBuf(
unsigned data_index;
bool status;
status =
Ringbuf_Init(&test_buffer, data_store, element_size, element_count);
status = Ringbuf_Initialize(
&test_buffer, data_store, data_store_size, element_size, element_count);
if (!status) {
return;
}
@@ -176,7 +177,7 @@ static void testRingBufSizeSmall(void)
uint8_t data_store[sizeof(data_element) * NEXT_POWER_OF_2(16)];
testRingBuf(
data_store, data_element, sizeof(data_element),
data_store, sizeof(data_store), data_element, sizeof(data_element),
sizeof(data_store) / sizeof(data_element));
}
@@ -193,7 +194,7 @@ static void testRingBufSizeLarge(void)
uint8_t data_store[sizeof(data_element) * NEXT_POWER_OF_2(99)];
testRingBuf(
data_store, data_element, sizeof(data_element),
data_store, sizeof(data_store), data_element, sizeof(data_element),
sizeof(data_store) / sizeof(data_element));
}
@@ -211,8 +212,8 @@ static void testRingBufSizeInvalid(void)
uint8_t data_store[sizeof(data_element) * 99];
zassert_false(
Ringbuf_Init(
&test_buffer, data_store, sizeof(data_element),
Ringbuf_Initialize(
&test_buffer, data_store, sizeof(data_store), sizeof(data_element),
sizeof(data_store) / sizeof(data_element)),
NULL);
}
@@ -242,6 +243,7 @@ static void testRingBufPowerOfTwo(void)
*/
static bool testRingBufNextElement(
uint8_t *data_store,
unsigned data_store_size,
uint8_t *data_element,
unsigned element_size,
unsigned element_count)
@@ -251,8 +253,8 @@ static bool testRingBufNextElement(
unsigned index;
unsigned data_index;
bool status;
status =
Ringbuf_Init(&test_buffer, data_store, element_size, element_count);
status = Ringbuf_Initialize(
&test_buffer, data_store, data_store_size, element_size, element_count);
if (!status) {
return false;
}
@@ -348,7 +350,7 @@ static void testRingBufNextElementSizeSmall(void)
uint8_t data_store[sizeof(data_element) * NEXT_POWER_OF_2(16)];
status = testRingBufNextElement(
data_store, data_element, sizeof(data_element),
data_store, sizeof(data_store), data_element, sizeof(data_element),
sizeof(data_store) / sizeof(data_element));
zassert_true(status, NULL);
}