From b5ce2a659f68ff667c72f65ba91732b665eb48f4 Mon Sep 17 00:00:00 2001 From: Justin King Date: Wed, 10 Jun 2026 15:42:54 -0700 Subject: [PATCH] Fix bugs related to `{ ... }` expressions Currently it was over allocating memory and failing to mask the index when it wrapped around. PiperOrigin-RevId: 930120502 --- cel-c/src/mutable_map_value.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cel-c/src/mutable_map_value.cc b/cel-c/src/mutable_map_value.cc index 0b015d6..b86c8f4 100644 --- a/cel-c/src/mutable_map_value.cc +++ b/cel-c/src/mutable_map_value.cc @@ -270,11 +270,11 @@ static bool _cel_MutableMapValue_Resize(cel_MapValue* cel_nonnull map_value, (old_cap == 0 || _cel_has_single_bit(old_cap))); _cel_MutableMapValueEntry** new_ents = (_cel_MutableMapValueEntry**)cel_Arena_Malloc( - arena, sizeof(_cel_MutableMapValueEntry) * new_cap, cel_nullptr); + arena, sizeof(_cel_MutableMapValueEntry*) * new_cap, cel_nullptr); if (CEL_UNLIKELY(new_ents == cel_nullptr)) { return false; } - memset(new_ents, 0, sizeof(_cel_MutableMapValueEntry) * new_cap); + memset(new_ents, 0, sizeof(_cel_MutableMapValueEntry*) * new_cap); _cel_MutableMapValue_Rehash(new_ents, new_cap, old_ents, old_cap, len); map_value->content.ptr[_cel_MutableMapValueContent_kPtrOffset] = new_ents; map_value->content.u32[_cel_MutableMapValueContent_kCapOffset] = new_cap; @@ -325,11 +325,11 @@ extern "C" _cel_MutableMapValueInsertResult _cel_MutableMapValue_Insert( len = 0; _cel_MutableMapValueEntry** ents = (_cel_MutableMapValueEntry**)cel_Arena_Malloc( - arena, sizeof(_cel_MutableMapValueEntry) * cap, cel_nullptr); + arena, sizeof(_cel_MutableMapValueEntry*) * cap, cel_nullptr); if (CEL_UNLIKELY(ents == cel_nullptr)) { return _cel_MutableMapValueInsertResult_kOutOfMemory; } - memset(ents, 0, sizeof(_cel_MutableMapValueEntry) * cap); + memset(ents, 0, sizeof(_cel_MutableMapValueEntry*) * cap); map_value->content.ptr[_cel_MutableMapValueContent_kPtrOffset] = ents; map_value->content.u32[_cel_MutableMapValueContent_kCapOffset] = cap; } else { @@ -369,7 +369,7 @@ extern "C" _cel_MutableMapValueInsertResult _cel_MutableMapValue_Insert( *out_key = &ent->key; } *out_value = &ent->value; - ents[bit] = ent; + ents[bit & mask] = ent; map_value->content.u32[_cel_MutableMapValueContent_kLenOffset] = ++len; if (len > threshold) {