diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index 8004ba84..1575c1fc 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -585,7 +585,11 @@ static inline bool mi_is_in_same_segment(const void* p, const void* q) { static inline bool mi_is_in_same_page(const void* p, const void* q) { mi_segment_t* segment = _mi_ptr_segment(p); if (_mi_ptr_segment(q) != segment) return false; - return (_mi_segment_page_of(segment, p) == _mi_segment_page_of(segment, q)); + // assume q may be invalid // return (_mi_segment_page_of(segment, p) == _mi_segment_page_of(segment, q)); + mi_page_t* page = _mi_segment_page_of(segment, p); + size_t psize; + uint8_t* start = _mi_segment_page_start(segment, page, &psize); + return (start <= (uint8_t*)q && (uint8_t*)q < start + psize); } static inline uintptr_t mi_rotl(uintptr_t x, uintptr_t shift) {