From 4f7d5e40861d73a3738b63f92d9ff5feb235f8d6 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Mon, 14 Apr 2025 15:10:31 -0400 Subject: [SharedCache] Fix overzealous alert about missing shared cache entries Following the conversation in https://github.com/Vector35/binaryninja-api/issues/6631 we are going to make the edited alerts warnings and then also fix the warning showing on certain shared caches even when all entries are present. --- view/sharedcache/core/SharedCacheView.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'view/sharedcache/core/SharedCacheView.cpp') diff --git a/view/sharedcache/core/SharedCacheView.cpp b/view/sharedcache/core/SharedCacheView.cpp index fb80d132..4218a2fe 100644 --- a/view/sharedcache/core/SharedCacheView.cpp +++ b/view/sharedcache/core/SharedCacheView.cpp @@ -861,16 +861,23 @@ bool SharedCacheView::InitController() LogSecondaryFileName(entry.GetFileName()); // Set the number of sub-caches so we can verify it later. if (entry.GetType() == CacheEntryType::Primary) - expectedFileCount += entry.GetHeader().subCacheArrayCount; + { + const auto& entryHeader = entry.GetHeader(); + // TODO: Some caches seem to have less sub caches than what we report having. + expectedFileCount += entryHeader.subCacheArrayCount; + // On older caches we don't have any sub-caches, so we want to skip alerting the user to that fact. + if (entryHeader.subCacheArrayOffset == 0) + expectedFileCount = 0; + } } for (const auto& missingFileName: missingCacheEntries) m_logger->LogErrorF("Secondary cache file '{}' is missing!", missingFileName); // Verify that we have the required amount of sub-caches, if not alert the user. if (expectedFileCount == 1) - m_logger->LogAlertF("Primary cache file '{}' has no sub-caches! You are likely opening a secondary cache file instead of a primary one.", m_primaryFileName); + m_logger->LogWarnF("Primary cache file '{}' has no sub-caches! You are likely opening a secondary cache file instead of a primary one.", m_primaryFileName); else if (totalEntries < expectedFileCount) - m_logger->LogAlertF("Insufficient cache files in dyld header ({}/{}), loading as partial shared cache...", totalEntries, expectedFileCount); + m_logger->LogWarnF("Insufficient cache files in dyld header ({}/{}), loading as partial shared cache...", totalEntries, expectedFileCount); } auto sharedCache = sharedCacheBuilder.Finalize(); -- cgit v1.3.1