diff options
| author | Mason Reed <mason@vector35.com> | 2025-04-08 15:29:21 -0400 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-04-08 16:44:59 -0400 |
| commit | 315264b4ed6bf2427a9689a33a31bb442e4644dc (patch) | |
| tree | f12fc0e6b456a660b1ac2c1097a343cd45e89b09 /plugins/rtti | |
| parent | e301d99a8df8ed185ffe71dabe915ab55d6fb885 (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.cpp | 2 | ||||
| -rw-r--r-- | plugins/rtti/microsoft.cpp | 2 |
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> §ion: 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()); |
