From 4e5faaf1b76ec7ae7e2ddefc8591ef3a9d79cc16 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Thu, 4 Dec 2025 15:42:02 +0100 Subject: add checks to protect against access violation due to failed disk read (#675) * add checkes to protect against access violation due to failed disk read --- src/zenstore/cache/cachedisklayer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/zenstore/cache/cachedisklayer.cpp') diff --git a/src/zenstore/cache/cachedisklayer.cpp b/src/zenstore/cache/cachedisklayer.cpp index 4f0d412ec..46dfbd912 100644 --- a/src/zenstore/cache/cachedisklayer.cpp +++ b/src/zenstore/cache/cachedisklayer.cpp @@ -648,6 +648,13 @@ BucketManifestSerializer::ReadSidecarFile(RwLock::ExclusiveLockScope& B while (RemainingEntryCount--) { const ManifestData* Entry = Sidecar.MakeView(CurrentReadOffset); + if (Entry == nullptr) + { + ZEN_WARN("Failed to read sidecar file '{}'. Failed to read {} bytes at {}", + SidecarPath, + sizeof(ManifestData), + CurrentReadOffset); + } CurrentReadOffset += sizeof(ManifestData); if (auto It = Index.find(Entry->Key); It != Index.end()) @@ -1078,6 +1085,11 @@ ZenCacheDiskLayer::CacheBucket::ReadIndexFile(RwLock::ExclusiveLockScope&, const while (RemainingEntryCount--) { const DiskIndexEntry* Entry = FileBuffer.MakeView(CurrentReadOffset); + if (Entry == nullptr) + { + ZEN_WARN("skipping invalid entry in '{}', failed to read {} bytes at {}", IndexPath, sizeof(DiskIndexEntry), CurrentReadOffset); + continue; + } CurrentReadOffset += sizeof(DiskIndexEntry); if (!cache::impl::ValidateCacheBucketIndexEntry(*Entry, InvalidEntryReason)) -- cgit v1.2.3