From cc0584d581a5f9a94b949fee51c694feca77723a Mon Sep 17 00:00:00 2001 From: Baitinq Date: Sat, 26 Jul 2025 19:46:00 +0200 Subject: std: mem: Assert arena allocator is not overflown --- std/mem.pry | 3 +++ 1 file changed, 3 insertions(+) (limited to 'std/mem.pry') diff --git a/std/mem.pry b/std/mem.pry index 75f3d1d..52de4d5 100644 --- a/std/mem.pry +++ b/std/mem.pry @@ -7,12 +7,14 @@ import "!stdlib.pry"; let arena = struct { buf: *void, offset: i64, + size: i64, }; let arena_init = (size: i64) => *arena { let a = cast(*arena, calloc(1, sizeof(arena))); (*a).buf = calloc(1, size); (*a).offset = 0; + (*a).size = size; return a; }; @@ -23,6 +25,7 @@ let arena_free = (a: *arena) => void { }; let arena_alloc = (a: *arena, size: i64) => *void { + assert((*a).offset + size < (*a).size); let old_offset = (*a).offset; (*a).offset = (*a).offset + size; return cast(*void, cast(*i8, (*a).buf) + cast(*i8, old_offset)); -- cgit 1.4.1