From 79adcad8de31fb6db33b63b7e14c3e390cfc9cfb Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Wed, 15 Nov 2023 16:26:02 +0100 Subject: [PATCH] Fix invalid read --- engine/breeze/utils/array.c | 6 ++++-- engine/tests/array_test.c | 10 +++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/engine/breeze/utils/array.c b/engine/breeze/utils/array.c index 7031ed3..bc58a00 100644 --- a/engine/breeze/utils/array.c +++ b/engine/breeze/utils/array.c @@ -79,8 +79,10 @@ i32 _bzArrayIns(void *arr, i32 idx) { BZ_ASSERT(idx >= 0 && idx <= head->size); BZ_ASSERT(head->size + 1 <= head->capacity); - bzMemMove((u8 *) arr + (idx + 1) * head->stride, - (u8 *) arr + idx * head->stride, head->stride); + if (idx != head->size) { + bzMemMove((u8 *) arr + (idx + 1) * head->stride, + (u8 *) arr + idx * head->stride, head->stride); + } head->size++; return idx; } diff --git a/engine/tests/array_test.c b/engine/tests/array_test.c index 8164a34..055beb3 100644 --- a/engine/tests/array_test.c +++ b/engine/tests/array_test.c @@ -38,10 +38,18 @@ int main(void) { bzArrayPush(arr, 2); bzArrayPush(arr, 3); bzArrayPush(arr, 4); + for (j = 0; j < bzArraySize(arr); j++) { + printf("%d ", bzArrayGet(arr, j)); + } + printf("\n"); bzArrayIns(arr, i, 5); BZ_ASSERT(arr[i] == 5); + for (j = 0; j < bzArraySize(arr); j++) { + printf("%d ", bzArrayGet(arr, j)); + } + printf("\n\n"); if (i < 4) - BZ_ASSERT(arr[4] == 4); + BZ_ASSERT(bzArrayGet(arr, 4) == 4); bzArrayFree(arr); arr = bzArrayNew(int, 5); }