From 4a402ab2eedcbbb6a2c16dd1e92a59321debce3d Mon Sep 17 00:00:00 2001 From: Exverge Date: Fri, 31 Jul 2026 20:58:41 +0200 Subject: [PATCH] [large_vector] don't overwrite random regions of memory Signed-off-by: Exverge --- src/common/sparse_large_vector.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/sparse_large_vector.h b/src/common/sparse_large_vector.h index f9fecddaa7..0bf1b3d133 100644 --- a/src/common/sparse_large_vector.h +++ b/src/common/sparse_large_vector.h @@ -107,13 +107,13 @@ public: } void ZeroRegion(std::size_t start, std::size_t end_) noexcept { - u64 base = static_cast(start) * sizeof(T); - const u64 end = static_cast(end_) * sizeof(T); + u64 base = reinterpret_cast(base_ptr[start]); + const u64 end = reinterpret_cast(base_ptr[end_]); const u64 end_page = AlignUp(base, HostPageSize); const u64 first_size = (std::min)(end_page, end) - base; - if (IsCommittedPage(base / sizeof(T))) { + if (IsCommittedPage(start / sizeof(T))) { std::memset(reinterpret_cast(base), 0, first_size); } @@ -123,7 +123,7 @@ public: base = end_page; for (u64 page = base; page < end; page += HostPageSize) { - if (!IsCommittedPage(page / sizeof(T))) { + if (!IsCommittedPage((page - reinterpret_cast(base_ptr)) / sizeof(T))) { continue; }