GP-0 Added exception detail for composite resolution error

This commit is contained in:
ghidra1 2025-07-28 14:51:23 -04:00
parent 47bd5a50cb
commit a63b39d14f
2 changed files with 14 additions and 4 deletions

View file

@ -16,6 +16,7 @@
package ghidra.program.database.data; package ghidra.program.database.data;
import java.io.IOException; import java.io.IOException;
import java.util.ConcurrentModificationException;
import java.util.Objects; import java.util.Objects;
import db.DBRecord; import db.DBRecord;
@ -24,6 +25,7 @@ import ghidra.docking.settings.SettingsImpl;
import ghidra.program.database.DBObjectCache; import ghidra.program.database.DBObjectCache;
import ghidra.program.model.data.*; import ghidra.program.model.data.*;
import ghidra.program.model.mem.MemBuffer; import ghidra.program.model.mem.MemBuffer;
import ghidra.util.Msg;
import ghidra.util.UniversalID; import ghidra.util.UniversalID;
import ghidra.util.exception.AssertException; import ghidra.util.exception.AssertException;
@ -697,7 +699,13 @@ abstract class CompositeDB extends DataTypeDB implements CompositeInternal {
DataTypeComponent[] definedComponents = composite.getDefinedComponents(); DataTypeComponent[] definedComponents = composite.getDefinedComponents();
DataTypeComponentDB[] myDefinedComponents = getDefinedComponents(); DataTypeComponentDB[] myDefinedComponents = getDefinedComponents();
if (definedComponents.length != myDefinedComponents.length) { if (definedComponents.length != myDefinedComponents.length) {
throw new IllegalArgumentException("mismatched definition datatype"); Msg.error(this,
"Resolve failure: unexpected component count detected\nDefinition Type:\n" +
definitionDt.toString() + "\nResolving Type:\n" + this.toString());
throw new ConcurrentModificationException(
"Resolve failure: unexpected component count detected for '" +
definitionDt.getPathName() + "' (" + definedComponents.length + " vs " +
myDefinedComponents.length + ")");
} }
for (int i = 0; i < definedComponents.length; i++) { for (int i = 0; i < definedComponents.length; i++) {
DataTypeComponent dtc = definedComponents[i]; DataTypeComponent dtc = definedComponents[i];

View file

@ -16,8 +16,7 @@
package ghidra.program.database.data; package ghidra.program.database.data;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import db.DBRecord; import db.DBRecord;
import db.Field; import db.Field;
@ -241,7 +240,10 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
ParameterDefinition[] definedArguments = funcDef.getArguments(); ParameterDefinition[] definedArguments = funcDef.getArguments();
ParameterDefinitionDB[] myArguments = getArguments(); ParameterDefinitionDB[] myArguments = getArguments();
if (definedArguments.length != myArguments.length) { if (definedArguments.length != myArguments.length) {
throw new IllegalArgumentException("mismatched definition datatype"); throw new ConcurrentModificationException(
"Resolve failure: unexpected argument count detected for '" +
definitionDt.getPathName() + "' (" + definedArguments.length + " vs " +
myArguments.length + ")");
} }
for (int i = 0; i < definedArguments.length; i++) { for (int i = 0; i < definedArguments.length; i++) {
ParameterDefinition arg = definedArguments[i]; ParameterDefinition arg = definedArguments[i];