summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-07-27 11:16:56 -0400
committerAndrew Opalach <andrew@akon.city> 2026-07-27 11:16:56 -0400
commit7e9e479502e6d56057aac066b61336d0013b6a7a (patch)
tree2a9675e93abe7a7cde40eb652fb10c54eee70a2c
parentb7cefeccf5e179117054ae6793ef5502e2cc4e4f (diff)
downloadlibalabaster-7e9e479502e6d56057aac066b61336d0013b6a7a.tar.gz
libalabaster-7e9e479502e6d56057aac066b61336d0013b6a7a.tar.bz2
libalabaster-7e9e479502e6d56057aac066b61336d0013b6a7a.zip
array: Assert bounds
Signed-off-by: Andrew Opalach <andrew@akon.city>
-rw-r--r--src/array.c13
-rw-r--r--tests/array.c5
2 files changed, 14 insertions, 4 deletions
diff --git a/src/array.c b/src/array.c
index d810836..d29aa8b 100644
--- a/src/array.c
+++ b/src/array.c
@@ -43,6 +43,7 @@
do { \
al_array_reserve(array, (array).count + 1); \
if (i != (array).count) { \
+ al_assert((u32)i < (array).count); \
al_memmove(al_array_offset(array, i + 1), al_array_offset(array, i), \
al_array_item_size(array) * ((array).count - i)); \
} \
@@ -51,10 +52,11 @@
} while (0)
#define al_array_pop(array) al_array_at(array, --(array).count)
-#define al_array_pop_at(array, i, r) \
- do { \
- r = al_array_at(array, i); \
- al_array_remove_at(array, i); \
+#define al_array_pop_at(array, i, r) \
+ do { \
+ al_assert((u32)i < (array).count); \
+ r = al_array_at(array, i); \
+ al_array_remove_at(array, i); \
} while (0)
#define al_array_remove_at(array, i) \
@@ -62,6 +64,7 @@
if (i == (array).count - 1) { \
(array).count--; \
} else { \
+ al_assert((u32)i < (array).count); \
al_memmove(al_array_offset(array, i), al_array_offset(array, i + 1), \
al_array_item_size(array) * (--(array).count - i)); \
} \
@@ -69,7 +72,9 @@
#define al_array_remove_range(array, start, end) \
do { \
+ al_assert((u32)start < (array).count); \
if (end != (array).count) { \
+ al_assert((u32)end < (array).count); \
al_memmove(al_array_offset(array, start), al_array_offset(array, end), \
al_array_item_size(array) * ((array).count - end)); \
} \
diff --git a/tests/array.c b/tests/array.c
index ddcc0d8..35b36e7 100644
--- a/tests/array.c
+++ b/tests/array.c
@@ -278,6 +278,11 @@ static bool array_test_insert(void)
al_array_push(objects, (struct test_t){ .d = 9 });
al_array_push(objects, (struct test_t){ .d = 444 });
+ //u32 iidx = 0;
+ //al_array_insert(objects, ++iidx, x);
+ //al_array_insert(objects, --iidx, y);
+ //al_array_insert(objects, ++iidx, z);
+
al_array_insert(objects, 1, x);
al_array_insert(objects, 0, y);
al_array_insert(objects, 1, z);