From 9609fded10590ebcc7e91af4da4b19695d416182 Mon Sep 17 00:00:00 2001 From: Mosder Date: Tue, 20 Oct 2026 16:37:15 +0200 Subject: fix: fixed some memory related bugs --- src/ds/array.c | 10 +++++----- src/safe.c | 2 +- src/tester.c | 23 +++++++++++++---------- 3 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/ds/array.c b/src/ds/array.c index 6a65d49..b36ddf5 100644 --- a/src/ds/array.c +++ b/src/ds/array.c @@ -61,7 +61,7 @@ void mos_arr_insert_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) { void mos_arr_put_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) { ini(i + 1); - if (i > hdr->len) { + if (i >= hdr->len) { memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size); hdr->len = i + 1; } @@ -93,14 +93,14 @@ size_t mos_arr_insert_n_fn( size_t mos_arr_put_n_fn( void *p_arr, size_t i, const void *items, size_t n, size_t el_size, size_t init_cap ) { - ini(i + n + 1); + ini(i + n); if (i > hdr->len) { memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size); } memmove((char *)arr + i * el_size, items, n * el_size); - if (i + n + 1 > hdr->len) - hdr->len = i + n + 1; + if (i + n > hdr->len) + hdr->len = i + n; return i; } @@ -125,10 +125,10 @@ size_t mos_arr_del_n_fn(void *arr, size_t i, size_t n, size_t el_size) { return 0; size_t new_n = n > hdr->len - i ? hdr->len - i : n; + hdr->len -= new_n; memmove( (char *)arr + i * el_size, (char *)arr + (i + new_n) * el_size, (hdr->len - i) * el_size ); - hdr->len -= new_n; return new_n; } diff --git a/src/safe.c b/src/safe.c index e72dbff..a6cb4b1 100644 --- a/src/safe.c +++ b/src/safe.c @@ -40,7 +40,7 @@ void *mos_safe_calloc_fn(size_t count, size_t size, MosSafeErrInfo info) { void *mos_safe_realloc_fn(void *ptr, size_t size, MosSafeErrInfo info) { void *p = realloc(ptr, size); - if (p) + if (p || (!p && size == 0)) return p; ERR_MESS("failed to realloc %p to %zu bytes", ptr, size); exit(EXIT_FAILURE); diff --git a/src/tester.c b/src/tester.c index 7723e97..06a938f 100644 --- a/src/tester.c +++ b/src/tester.c @@ -53,16 +53,19 @@ static Outputs suppressed = { #define nl printf("\n") static void print_center(const char *text, int color, char padding_char) { - size_t post_char_count = (RENDER_WIDTH - strlen(text)) / 2; - size_t pre_char_count = RENDER_WIDTH - post_char_count - strlen(text); - - for (size_t i = 1; i < pre_char_count; i++) - printf("%c", padding_char); - - print_color(color, " %s ", text); - - for (size_t i = 1; i < post_char_count; i++) - printf("%c", padding_char); + size_t len = strlen(text); + if (len + 2 > RENDER_WIDTH) { + print_color(color, "%s", text); + } + else { + size_t post_char_count = (RENDER_WIDTH - len) / 2; + size_t pre_char_count = RENDER_WIDTH - post_char_count - len; + for (size_t i = 1; i < pre_char_count; i++) + printf("%c", padding_char); + print_color(color, " %s ", text); + for (size_t i = 1; i < post_char_count; i++) + printf("%c", padding_char); + } nl; } -- cgit v1.2.3