summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authornullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2025-01-20 19:58:33 +1100
committerMason Reed <mason@vector35.com>2025-01-25 17:59:10 -0500
commit567988ad3cd7da3fac9298e24f733b61d37c1e13 (patch)
tree8a9e17c0a8b87793b5155912cc9f40f0640650c2 /plugins
parent5fcb4881dde3bb568f968db866c904e1d0a6f588 (diff)
MSVC RTTI: Narrow when pClassHierarchyDescriptor is recursed into
Diffstat (limited to 'plugins')
-rw-r--r--plugins/msvc_rtti/rtti.cpp7
1 files changed, 5 insertions, 2 deletions
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<ClassInfo> 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;