From 5d37541d63b5c1454dd424eb6f0bc4465629dade Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Wed, 21 Jan 2026 19:02:42 +0100 Subject: Cleanup and fixes --- tests.c | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) (limited to 'tests.c') diff --git a/tests.c b/tests.c index e865e18..32da92f 100644 --- a/tests.c +++ b/tests.c @@ -784,6 +784,27 @@ MU_TEST(test_arena_alignment) { arena_free(&a); } +MU_TEST(test_arena_safety) { + Arena a = arena_make(); + + // Test 1: Integer overflow in allocation should be caught by safe_alloc + // Requesting 2 items of size (SIZE_MAX/2 + 1) should fail + // This tests ns_safe_malloc directly or via macro if we exposed it, + // but arena_alloc calls ensure/grow which calls ALLOC(char, size). + // To test ALLOC overflow: ALLOC(char, SIZE_MAX) is just 1*SIZE_MAX. + // We need a way to trigger safe_alloc failure. + + // Let's test the underlying safe allocator directly since we exposed it in nonstd.h + void *p = safe_malloc(SIZE_MAX / 2 + 100, 2); + mu_check(p == NULL); + + // Test 2: Ensure normal allocations still work + void *p2 = arena_alloc(&a, 100); + mu_check(p2 != NULL); + + arena_free(&a); +} + // File I/O tests MU_TEST(test_file_io_basic) { const char *filename = "test_io_basic.txt"; @@ -804,25 +825,6 @@ MU_TEST(test_file_io_basic) { remove(filename); } -MU_TEST(test_file_io_sv) { - const char *filename = "test_io_sv.txt"; - stringv sv = sv_from_cstr("Hello from sv!"); - - // Write - mu_check(write_file_sv(filename, sv)); - - // Read - stringv read_sv = read_entire_file_sv(filename); - mu_check(read_sv.data != NULL); - mu_assert_int_eq(sv.length, read_sv.length); - mu_check(sv_equals(sv, read_sv)); - - // The data returned by read_entire_file_sv is malloc'd and needs freeing - // We cast away const to free it since we know it was allocated - free((char *)read_sv.data); - remove(filename); -} - MU_TEST(test_file_io_sb) { const char *filename = "test_io_sb.txt"; stringb sb; @@ -849,12 +851,6 @@ MU_TEST(test_file_io_read_missing) { mu_check(content == NULL); } -MU_TEST(test_file_io_read_missing_sv) { - stringv sv = read_entire_file_sv("non_existent_file.txt"); - mu_check(sv.data == NULL); - mu_assert_int_eq(0, sv.length); -} - MU_TEST(test_file_io_read_missing_sb) { stringb sb = read_entire_file_sb("non_existent_file.txt"); mu_check(sb.data == NULL); @@ -953,15 +949,14 @@ MU_TEST_SUITE(test_suite_arena) { RUN_TEST_WITH_NAME(test_arena_basic); RUN_TEST_WITH_NAME(test_arena_growth); RUN_TEST_WITH_NAME(test_arena_alignment); + RUN_TEST_WITH_NAME(test_arena_safety); } MU_TEST_SUITE(test_suite_files) { printf("\n[File I/O Tests]\n"); RUN_TEST_WITH_NAME(test_file_io_basic); - RUN_TEST_WITH_NAME(test_file_io_sv); RUN_TEST_WITH_NAME(test_file_io_sb); RUN_TEST_WITH_NAME(test_file_io_read_missing); - RUN_TEST_WITH_NAME(test_file_io_read_missing_sv); RUN_TEST_WITH_NAME(test_file_io_read_missing_sb); } -- cgit v1.2.3