From 567988ad3cd7da3fac9298e24f733b61d37c1e13 Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Mon, 20 Jan 2025 19:58:33 +1100 Subject: MSVC RTTI: Narrow when pClassHierarchyDescriptor is recursed into --- plugins/msvc_rtti/rtti.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'plugins/msvc_rtti/rtti.cpp') diff --git a/plugins/msvc_rtti/rtti.cpp b/plugins/msvc_rtti/rtti.cpp index f1d172a1..07a33d61 100644 --- a/plugins/msvc_rtti/rtti.cpp +++ b/plugins/msvc_rtti/rtti.cpp @@ -6,6 +6,7 @@ constexpr int COL_SIG_REV0 = 0; constexpr int COL_SIG_REV1 = 1; constexpr int RTTI_CONFIDENCE = 100; +constexpr int BCD_HASPCHD = 0x40; ClassHierarchyDescriptor::ClassHierarchyDescriptor(BinaryView *view, uint64_t address) { @@ -503,8 +504,10 @@ std::optional MicrosoftRTTIProcessor::ProcessRTTI(uint64_t coLocatorA m_view->DefineDataVariable(baseClassTypeDescAddr, Confidence(TypeDescriptorType(m_view, baseClassTypeDesc.name.length()), RTTI_CONFIDENCE)); - auto classHierarchyDescAddr = resolveAddr(baseClassDesc.pClassHierarchyDescriptor); - baseClasses[classHierarchyDescAddr] = baseClassInfo; + if (baseClassDesc.attributes & BCD_HASPCHD) { + auto classHierarchyDescAddr = resolveAddr(baseClassDesc.pClassHierarchyDescriptor); + baseClasses[classHierarchyDescAddr] = baseClassInfo; + } } return baseClasses; -- cgit v1.3.1