From 5f46b5ca50b48395edf08583278aa4bcd2c54ed9 Mon Sep 17 00:00:00 2001 From: Barinzaya Date: Thu, 19 Dec 2024 17:52:09 -0500 Subject: [PATCH] Fixed zeroing in resize_dynamic_array. When a dynamic array has unused capacity and is resized to a size greater than its capacity, the unused part of its capacity wasn't being zeroed. --- base/runtime/core_builtin.odin | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index d28dadd02..8184c0e74 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -826,10 +826,12 @@ _resize_dynamic_array :: #force_inline proc(a: ^Raw_Dynamic_Array, size_of_elem, return nil } + if should_zero && a.len < length { + num_reused := min(a.cap, length) - a.len + intrinsics.mem_zero(([^]byte)(a.data)[a.len*size_of_elem:], num_reused*size_of_elem) + } + if length <= a.cap { - if should_zero && a.len < length { - intrinsics.mem_zero(([^]byte)(a.data)[a.len*size_of_elem:], (length-a.len)*size_of_elem) - } a.len = max(length, 0) return nil }