From 6e82123fdbe490ff867bfff5b5dd711b8a3aeb41 Mon Sep 17 00:00:00 2001 From: GrayJack Date: Sun, 21 Apr 2024 23:38:18 -0300 Subject: [PATCH] refactor(c-api): Check for overflow on `janet_struct_begin` --- src/core/struct.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/struct.c b/src/core/struct.c index 7d559558..8f9fa549 100644 --- a/src/core/struct.c +++ b/src/core/struct.c @@ -34,11 +34,13 @@ JanetKV *janet_struct_begin(size_t count) { uint64_t double_count = (count > JANET_INTMAX_SIZE / 2) ? JANET_INTMAX_SIZE : 2 * count; - uint64_t cap = janet_tablen(double_count); - size_t capacity = - (cap > JANET_INTMAX_SIZE) ? JANET_INTMAX_SIZE : (size_t)cap; + uint64_t capacity = janet_tablen(double_count); - size_t size = sizeof(JanetStructHead) + capacity * sizeof(JanetKV); + uint64_t part_size = capacity * sizeof(JanetKV); + if (part_size > JANET_INTMAX_SIZE){ + part_size = JANET_INTMIN_SIZE; + } + size_t size = sizeof(JanetStructHead) + (uint64_t) part_size; JanetStructHead *head = janet_gcalloc(JANET_MEMORY_STRUCT, size); head->length = count; head->capacity = capacity;