From 6cb57b017d2efbc3104ed2260d55e2d02fa721e8 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Fri, 23 May 2025 13:03:11 +0200 Subject: [RTTI] Fix exception in binary with a erroneous class hierarchy descriptor --- plugins/rtti/microsoft.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'plugins/rtti/microsoft.cpp') diff --git a/plugins/rtti/microsoft.cpp b/plugins/rtti/microsoft.cpp index 1299170c..d5e14648 100644 --- a/plugins/rtti/microsoft.cpp +++ b/plugins/rtti/microsoft.cpp @@ -431,6 +431,16 @@ std::optional MicrosoftRTTIProcessor::ProcessRTTI(uint64_t coLocatorA auto classInfo = ClassInfo{RTTIProcessorType::Microsoft, className.value()}; auto classHierarchyDescAddr = resolveAddr(coLocator->pClassHierarchyDescriptor); + + // Verify the class hierarchy descriptor signature is zero. + auto reader = BinaryReader(m_view); + reader.Seek(classHierarchyDescAddr); + if (auto signature = reader.Read32(); signature != 0) + { + m_logger->LogWarn("Skipping CompleteObjectorLocator with non-zero hierarchy descriptor signature %llx", coLocatorAddr); + return std::nullopt; + } + classInfo.baseClasses = ProcessClassHierarchyDescriptor(classHierarchyDescAddr, coLocator.value(), classInfo); // Locate the current base class if we are in one. -- cgit v1.3.1