Fixes by @AkiSakurai for bug thats caused crashing ImHex when creating recursive inheritances. (#2612)

The previous code I approved was wrong and caused ImHex to grow until
computer froze. This PR is a copy of the original fix in PR #2546 by
@AkiSakurai
This commit is contained in:
paxcut
2026-01-05 16:57:04 -07:00
committed by GitHub
parent 0d34edc7f6
commit 90d8e03f2c
2 changed files with 9 additions and 10 deletions

View File

@@ -1858,13 +1858,12 @@ namespace hex::plugin::builtin {
}
}
void TextHighlighter::recurseInheritances(std::string name, size_t depth) {
if (depth > m_inheritances.size())
return;
if (m_inheritances.contains(name)) {
for (const auto &inheritance: m_inheritances[name]) {
recurseInheritances(inheritance, depth + 1);
void TextHighlighter::recurseInheritances(std::string name) {
if (auto iterator = m_inheritances.find(name); iterator != m_inheritances.end()) {
auto inheritances = std::move(iterator->second);
m_inheritances.erase(iterator);
for (auto inheritance: inheritances) {
recurseInheritances(inheritance);
auto definitions = m_UDTVariables[inheritance];
if (definitions.empty())
definitions = m_ImportedUDTVariables[inheritance];
@@ -1887,8 +1886,8 @@ namespace hex::plugin::builtin {
}
void TextHighlighter::appendInheritances() {
for (const auto &[name, inheritances]: m_inheritances)
recurseInheritances(name);
for (auto iterator = m_inheritances.begin(); iterator != m_inheritances.end(); iterator = m_inheritances.begin())
recurseInheritances(iterator->first);
}
// Get the string of the argument type. This works on function arguments and non-type template arguments.