From 4e6d2316f763e89989da24eac3dd70266e982cac Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Fri, 18 Nov 2022 14:52:02 -0500 Subject: [PATCH] GP-2864 corrected PDB function definition use by FunctionSymbolApplier --- .../pdb/pdbapplicator/FunctionSymbolApplier.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/FunctionSymbolApplier.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/FunctionSymbolApplier.java index bfaf8b744b..bb5fb4ce88 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/FunctionSymbolApplier.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/FunctionSymbolApplier.java @@ -30,8 +30,8 @@ import ghidra.program.model.data.FunctionDefinition; import ghidra.program.model.lang.Register; import ghidra.program.model.listing.*; import ghidra.program.model.symbol.SourceType; -import ghidra.util.exception.AssertException; -import ghidra.util.exception.CancelledException; +import ghidra.util.InvalidNameException; +import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; /** @@ -328,7 +328,17 @@ public class FunctionSymbolApplier extends MsSymbolApplier { if (!(dataType instanceof FunctionDefinition)) { return false; } - FunctionDefinition def = (FunctionDefinition) dataType; + FunctionDefinition def = + (FunctionDefinition) dataType.copy(applicator.getDataTypeManager()); + try { + // Must use copy of function definition with preserved function name. + // While not ideal, this prevents applying an incorrect function name + // with an IMPORTED source type + def.setName(function.getName()); + } + catch (InvalidNameException | DuplicateNameException e) { + throw new RuntimeException("unexpected exception", e); + } ApplyFunctionSignatureCmd sigCmd = new ApplyFunctionSignatureCmd(address, def, SourceType.IMPORTED); if (!sigCmd.applyTo(applicator.getProgram(), monitor)) {