From 846301afef83bfc2d8f398c1fa57df4e6a665c42 Mon Sep 17 00:00:00 2001 From: James <49045138+ghidracadabra@users.noreply.github.com> Date: Fri, 2 Sep 2022 14:48:59 +0000 Subject: [PATCH] GP-2519_forceExclusionGroup_segfault --- Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc index e940050725..5b87b0ac01 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc @@ -926,6 +926,8 @@ void ParamListStandard::forceExclusionGroup(ParamActive *active) int4 inactiveCount = 0; for(int4 i=0;igetTrial(i)); + if (curtrial.isDefinitelyNotUsed() || !curtrial.getEntry()->isExclusion()) + continue; int4 grp = curtrial.getEntry()->getGroup(); if (grp != curGroup) { if (inactiveCount > 1) @@ -934,14 +936,13 @@ void ParamListStandard::forceExclusionGroup(ParamActive *active) groupStart = i; inactiveCount = 0; } - if (curtrial.isDefinitelyNotUsed() || !curtrial.getEntry()->isExclusion()) - continue; - else if (!curtrial.isActive()) - inactiveCount += 1; - else if (curtrial.isActive()) { + if (curtrial.isActive()) { int4 groupUpper = grp + curtrial.getEntry()->getGroupSize() - 1; // This entry covers some number of groups markGroupNoUse(active, groupUpper, groupStart, i); } + else { + inactiveCount += 1; + } } if (inactiveCount > 1) markBestInactive(active, curGroup, groupStart, TYPE_UNKNOWN);