diff options
author | daan <daan@effp.org> | 2022-02-10 11:57:30 -0800 |
---|---|---|
committer | daan <daan@effp.org> | 2022-02-10 11:57:30 -0800 |
commit | 96008c55d0add668dbb09d135f6ca18a2f6a322e (patch) | |
tree | 01a74ff8cd4859efc0eb28e4cee4bc96d745da66 | |
parent | 352d8be237e0aaa28f4e9dbcee3a392b19e4339c (diff) |
fix ubsan warning on huge allocations (issue #543)
-rw-r--r-- | src/segment.c | 3 |
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; |