summaryrefslogtreecommitdiff
path: root/plugins/rtti
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-04-08 15:29:21 -0400
committerMason Reed <mason@vector35.com>2025-04-08 16:44:59 -0400
commit315264b4ed6bf2427a9689a33a31bb442e4644dc (patch)
treef12fc0e6b456a660b1ac2c1097a343cd45e89b09 /plugins/rtti
parente301d99a8df8ed185ffe71dabe915ab55d6fb885 (diff)
Add misc cancellation points in RTTI analysis
Some missing checks in case there is a billion segments (see .obj files)
Diffstat (limited to 'plugins/rtti')
-rw-r--r--plugins/rtti/itanium.cpp2
-rw-r--r--plugins/rtti/microsoft.cpp2
2 files changed, 4 insertions, 0 deletions
diff --git a/plugins/rtti/itanium.cpp b/plugins/rtti/itanium.cpp
index 122869cc..fde0e7f8 100644
--- a/plugins/rtti/itanium.cpp
+++ b/plugins/rtti/itanium.cpp
@@ -685,6 +685,8 @@ void ItaniumRTTIProcessor::ProcessRTTI()
// Scan data sections for rtti.
for (const Ref<Section> &section: m_view->GetSections())
{
+ if (bgTask->IsCancelled())
+ break;
if (section->GetSemantics() == ReadOnlyDataSectionSemantics)
{
m_logger->LogDebug("Attempting to find RTTI in section %llx", section->GetStart());
diff --git a/plugins/rtti/microsoft.cpp b/plugins/rtti/microsoft.cpp
index 95c76311..2eba68d2 100644
--- a/plugins/rtti/microsoft.cpp
+++ b/plugins/rtti/microsoft.cpp
@@ -733,6 +733,8 @@ void MicrosoftRTTIProcessor::ProcessVFT()
auto rdataSection = m_view->GetSectionByName(".rdata");
for (const Ref<Segment> &segment: m_view->GetSegments())
{
+ if (bgTask->IsCancelled())
+ break;
if (segment->GetFlags() == (SegmentReadable | SegmentContainsData))
{
m_logger->LogDebug("Attempting to find VirtualFunctionTables in segment %llx", segment->GetStart());