Procházet zdrojové kódy

Add overflow check when using a growing arena

gingerBill před 2 roky
rodič
revize
d48828dd80
1 změnil soubory, kde provedl 2 přidání a 1 odebrání
  1. 2 1
      core/mem/virtual/arena.odin

+ 2 - 1
core/mem/virtual/arena.odin

@@ -1,6 +1,7 @@
 package mem_virtual
 
 import "core:mem"
+import "core:intrinsics"
 
 Arena_Kind :: enum uint {
 	Growing = 0, // chained memory blocks (singly linked list)
@@ -56,7 +57,7 @@ arena_alloc :: proc(arena: ^Arena, size: uint, alignment: uint, loc := #caller_l
 
 	switch arena.kind {
 	case .Growing:
-		if arena.curr_block == nil || arena.curr_block.used + size > arena.curr_block.reserved {
+		if arena.curr_block == nil || (intrinsics.overflow_add(arena.curr_block.used, size) or_else 0) > arena.curr_block.reserved {
 			size = mem.align_forward_uint(size, alignment)
 			if arena.minimum_block_size == 0 {
 				arena.minimum_block_size = DEFAULT_ARENA_GROWING_MINIMUM_BLOCK_SIZE