refactor(c-api): Check for overflow on `janet_struct_begin`

This commit is contained in:
GrayJack 2024-04-21 23:38:18 -03:00
parent d0acf6426d
commit 6e82123fdb
1 changed files with 6 additions and 4 deletions

View File

@ -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;