From 5f7545ffd6913052efe753499d7c4a12291fd58a Mon Sep 17 00:00:00 2001 From: Eric-Paul Ickhorn Date: Thu, 23 May 2024 01:43:12 +0200 Subject: [PATCH] bugfix(arena): Fixed some bugs which caused crashes. --- inc-c/ufn/ufn_arena.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/inc-c/ufn/ufn_arena.h b/inc-c/ufn/ufn_arena.h index 7fce8fb..f33a704 100644 --- a/inc-c/ufn/ufn_arena.h +++ b/inc-c/ufn/ufn_arena.h @@ -63,6 +63,7 @@ void * ufn_arena_alloc(ufn_arena_s *arena, uint32_t size); char * ufn_arena_clone_string(ufn_arena_s *arena, const char *string); // END OF API, START OF IMPLEMENTATION. + #ifdef UFN_IMPLEMENTATION #include #include @@ -94,13 +95,13 @@ void ufn_free_arena(ufn_arena_s *arena) void * ufn_arena_alloc(ufn_arena_s *arena, uint32_t size) { - if((arena->usage = size) >= arena->capacity) + if((arena->usage + size) >= arena->capacity) { if(arena->continuation == NULL) { uint32_t continuation_size = arena->capacity * 2; // Clamp the continuation's size to the maximum allowed one. - if(continuation_size > (arena->maximum)) + if(continuation_size > arena->maximum) { continuation_size = arena->maximum; } @@ -108,7 +109,7 @@ void * ufn_arena_alloc(ufn_arena_s *arena, uint32_t size) // If no continuation of this arena tree can fulfill // a request of this size, // -> Deny the request and return NULL. - if(size > arena->maximum) + if(size >= arena->maximum) { return NULL; } @@ -120,7 +121,7 @@ void * ufn_arena_alloc(ufn_arena_s *arena, uint32_t size) } arena->continuation = ufn_new_dynamic_arena(continuation_size, continued_maximum); } - ufn_arena_alloc(arena->continuation, size); + return ufn_arena_alloc(arena->continuation, size); } void *block = arena->allocation + arena->usage; arena->usage += size;