summaryrefslogtreecommitdiff
path: root/src/segment.c
diff options
context:
space:
mode:
authordaan <daan@effp.org>2022-02-10 11:57:30 -0800
committerdaan <daan@effp.org>2022-02-10 11:57:30 -0800
commit96008c55d0add668dbb09d135f6ca18a2f6a322e (patch)
tree01a74ff8cd4859efc0eb28e4cee4bc96d745da66 /src/segment.c
parent352d8be237e0aaa28f4e9dbcee3a392b19e4339c (diff)
fix ubsan warning on huge allocations (issue #543)
Diffstat (limited to 'src/segment.c')
-rw-r--r--src/segment.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/segment.c b/src/segment.c
index c4cf987..8d3eebe 100644
--- a/src/segment.c
+++ b/src/segment.c
@@ -762,7 +762,8 @@ static mi_page_t* mi_segment_span_allocate(mi_segment_t* segment, size_t slice_i
}
// and also for the last one (if not set already) (the last one is needed for coalescing)
- mi_slice_t* last = &segment->slices[slice_index + slice_count - 1];
+ // note: the cast is needed for ubsan since the index can be larger than MI_SLICES_PER_SEGMENT for huge allocations (see #543)
+ mi_slice_t* last = &((mi_slice_t*)segment->slices)[slice_index + slice_count - 1];
if (last < mi_segment_slices_end(segment) && last >= slice) {
last->slice_offset = (uint32_t)(sizeof(mi_slice_t)*(slice_count-1));
last->slice_count = 0;