mirror of
https://github.com/NationalSecurityAgency/ghidra
synced 2024-08-25 03:56:41 +00:00
GP-0 Corrected VersionTracking related test failures
This commit is contained in:
parent
f14702e761
commit
74a5b6f0e1
|
@ -253,9 +253,7 @@ public class TestEnv {
|
|||
AbstractGuiTest.runSwing(() -> {
|
||||
disposeSingleTool(tool);
|
||||
|
||||
Iterator<PluginTool> it = extraTools.iterator();
|
||||
while (it.hasNext()) {
|
||||
PluginTool pt = it.next();
|
||||
for (PluginTool pt : extraTools) {
|
||||
disposeSingleTool(pt);
|
||||
}
|
||||
extraTools.clear();
|
||||
|
@ -801,15 +799,15 @@ public class TestEnv {
|
|||
}
|
||||
|
||||
/**
|
||||
* Open a read-only test program from the test data directory.
|
||||
* This program must be released prior to disposing this test environment.
|
||||
* Open a read-only test program from the test data directory. The returned program must be
|
||||
* {@link #release(Program) released} prior to disposing this test environment.
|
||||
* <br>
|
||||
* NOTE: Some tests rely on this method returning null when file does
|
||||
* not yet exist within the resource area (e.g., test binaries for P-Code Tests)
|
||||
*
|
||||
* @param programName name of program database within the test data directory.
|
||||
* @return program or null if program file not found
|
||||
*/
|
||||
|
||||
public ProgramDB getProgram(String programName) {
|
||||
ProgramDB p = programManager.getProgram(programName);
|
||||
return p;
|
||||
|
@ -1017,9 +1015,7 @@ public class TestEnv {
|
|||
|
||||
Collection<WeakSet<PluginTool>> values = toolMap.values();
|
||||
for (WeakSet<PluginTool> toolSet : values) {
|
||||
Iterator<PluginTool> iterator = toolSet.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
PluginTool aaTool = iterator.next();
|
||||
for (PluginTool aaTool : toolSet) {
|
||||
manager.removeTool(aaTool);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -367,7 +367,7 @@ public class VTSessionDB extends DomainObjectAdapterDB implements VTSession {
|
|||
private void initializePrograms(Program sourceProgram, Program destinationProgram,
|
||||
boolean rememberProgramIds) throws IOException {
|
||||
|
||||
if (!destinationProgram.canSave()) {
|
||||
if (!SystemUtilities.isInTestingMode() && !destinationProgram.canSave()) {
|
||||
throw new ReadOnlyException(
|
||||
"VT Session destination program is read-only which prevents its use");
|
||||
}
|
||||
|
|
|
@ -106,9 +106,18 @@ public class VersionTrackingPluginScreenShots extends GhidraScreenShotGenerator
|
|||
@After
|
||||
@Override
|
||||
public void tearDown() {
|
||||
sourceProgram = null;
|
||||
destinationProgram = null;
|
||||
session = null;
|
||||
if (sourceProgram != null) {
|
||||
vtTestEnv.release(sourceProgram);
|
||||
sourceProgram = null;
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
vtTestEnv.release(destinationProgram);
|
||||
destinationProgram = null;
|
||||
}
|
||||
if (session != null) {
|
||||
session.release(vtTestEnv);
|
||||
session = null;
|
||||
}
|
||||
controller = null;
|
||||
correlator = null;
|
||||
vtTestEnv.dispose();
|
||||
|
@ -910,11 +919,11 @@ public class VersionTrackingPluginScreenShots extends GhidraScreenShotGenerator
|
|||
|
||||
// Set the Source
|
||||
chooseProjectFile(dialogComponent, "SOURCE_BUTTON",
|
||||
new String[] { "git_DevTestProject", "WallaceSrc" });
|
||||
new String[] { "ghidra_DevTestProject", "WallaceSrc" });
|
||||
|
||||
// Set the Destination
|
||||
chooseProjectFile(dialogComponent, "DESTINATION_BUTTON",
|
||||
new String[] { "git_DevTestProject", "WallaceVersion2" });
|
||||
new String[] { "ghidra_DevTestProject", "WallaceVersion2" });
|
||||
waitForSwing();
|
||||
}
|
||||
|
||||
|
|
|
@ -96,6 +96,20 @@ public class VTMatchApplyFunctionSignatureTest extends AbstractGhidraHeadedInteg
|
|||
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
if (sourceProgram != null) {
|
||||
sourceProgram.release(this);
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
destinationProgram.release(this);
|
||||
}
|
||||
if (session != null) {
|
||||
session.release(this);
|
||||
}
|
||||
env.dispose();
|
||||
}
|
||||
|
||||
private StructureDataType getPersonStruct(Program program) {
|
||||
StructureDataType struct =
|
||||
new StructureDataType(CategoryPath.ROOT, "Person", 0, program.getDataTypeManager());
|
||||
|
@ -113,74 +127,91 @@ public class VTMatchApplyFunctionSignatureTest extends AbstractGhidraHeadedInteg
|
|||
private Program createSourceProgram() throws Exception {
|
||||
|
||||
ProgramBuilder builder = new ProgramBuilder("Wallace", ProgramBuilder._X86, this);
|
||||
Program p = builder.getProgram();
|
||||
try {
|
||||
Program p = builder.getProgram();
|
||||
|
||||
builder.createClassNamespace("Gadget", null, SourceType.IMPORTED);
|
||||
builder.createClassNamespace("Gadget", null, SourceType.IMPORTED);
|
||||
|
||||
StructureDataType struct = getPersonStruct(p);
|
||||
Pointer ptr1 = PointerDataType.getPointer(struct, p.getDataTypeManager());
|
||||
Pointer ptr2 = PointerDataType.getPointer(ptr1, p.getDataTypeManager());
|
||||
StructureDataType struct = getPersonStruct(p);
|
||||
Pointer ptr1 = PointerDataType.getPointer(struct, p.getDataTypeManager());
|
||||
Pointer ptr2 = PointerDataType.getPointer(ptr1, p.getDataTypeManager());
|
||||
|
||||
Pointer charPtr = PointerDataType.getPointer(CharDataType.dataType, p.getDataTypeManager());
|
||||
Pointer charPtr =
|
||||
PointerDataType.getPointer(CharDataType.dataType, p.getDataTypeManager());
|
||||
|
||||
builder.createMemory(".text", "0x401000", 0x200);
|
||||
builder.createMemory(".text", "0x401000", 0x200);
|
||||
|
||||
// undefined _stdcall addPerson(Person * * list, char * personName)
|
||||
builder.createEmptyFunction("addPerson", null, CompilerSpec.CALLING_CONVENTION_stdcall,
|
||||
false, "0x4011a0", 10, DataType.DEFAULT, new ParameterImpl("list", ptr2, p),
|
||||
new ParameterImpl("personName", charPtr, p));
|
||||
// undefined _stdcall addPerson(Person * * list, char * personName)
|
||||
builder.createEmptyFunction("addPerson", null, CompilerSpec.CALLING_CONVENTION_stdcall,
|
||||
false, "0x4011a0", 10, DataType.DEFAULT, new ParameterImpl("list", ptr2, p),
|
||||
new ParameterImpl("personName", charPtr, p));
|
||||
|
||||
// undefined _thiscall Gadget::use(Gadget * this, Person * person)
|
||||
builder.createEmptyFunction("use", "Gadget", CompilerSpec.CALLING_CONVENTION_thiscall,
|
||||
false, "0x401040", 10, DataType.DEFAULT, new ParameterImpl("person", ptr1, p));
|
||||
// undefined _thiscall Gadget::use(Gadget * this, Person * person)
|
||||
builder.createEmptyFunction("use", "Gadget", CompilerSpec.CALLING_CONVENTION_thiscall,
|
||||
false, "0x401040", 10, DataType.DEFAULT, new ParameterImpl("person", ptr1, p));
|
||||
|
||||
return p;
|
||||
p.addConsumer(this);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
builder.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private Program createDestinationProgram() throws Exception {
|
||||
|
||||
ProgramBuilder builder = new ProgramBuilder("WallaceVersion2", ProgramBuilder._X86, this);
|
||||
Program p = builder.getProgram();
|
||||
|
||||
Pointer ptr1 = PointerDataType.getPointer(VoidDataType.dataType, p.getDataTypeManager());
|
||||
Pointer ptr2 = PointerDataType.getPointer(ptr1, p.getDataTypeManager());
|
||||
|
||||
Pointer charPtr = PointerDataType.getPointer(CharDataType.dataType, p.getDataTypeManager());
|
||||
|
||||
builder.createMemory(".text", "0x401000", 0x200);
|
||||
|
||||
// undefined _stdcall FUN_004011a0(void * * param_1, char * param_2)
|
||||
Function f1 = builder.createEmptyFunction((String) null, (String) null,
|
||||
CompilerSpec.CALLING_CONVENTION_stdcall, "0x4011a0", 10, DataType.DEFAULT, ptr2,
|
||||
charPtr);
|
||||
|
||||
// undefined _thiscall FUN_00401040(void * this, undefined4 param_1)
|
||||
Function f2 = builder.createEmptyFunction((String) null, (String) null,
|
||||
CompilerSpec.CALLING_CONVENTION_thiscall, "0x401040", 10, DataType.DEFAULT,
|
||||
Undefined4DataType.dataType);
|
||||
|
||||
int txId = p.startTransaction("Set SourceType");
|
||||
try {
|
||||
f1.setSignatureSource(SourceType.DEFAULT);
|
||||
f2.setSignatureSource(SourceType.ANALYSIS);
|
||||
Program p = builder.getProgram();
|
||||
|
||||
Pointer ptr1 =
|
||||
PointerDataType.getPointer(VoidDataType.dataType, p.getDataTypeManager());
|
||||
Pointer ptr2 = PointerDataType.getPointer(ptr1, p.getDataTypeManager());
|
||||
|
||||
Pointer charPtr =
|
||||
PointerDataType.getPointer(CharDataType.dataType, p.getDataTypeManager());
|
||||
|
||||
builder.createMemory(".text", "0x401000", 0x200);
|
||||
|
||||
// undefined _stdcall FUN_004011a0(void * * param_1, char * param_2)
|
||||
Function f1 = builder.createEmptyFunction((String) null, (String) null,
|
||||
CompilerSpec.CALLING_CONVENTION_stdcall, "0x4011a0", 10, DataType.DEFAULT, ptr2,
|
||||
charPtr);
|
||||
|
||||
// undefined _thiscall FUN_00401040(void * this, undefined4 param_1)
|
||||
Function f2 = builder.createEmptyFunction((String) null, (String) null,
|
||||
CompilerSpec.CALLING_CONVENTION_thiscall, "0x401040", 10, DataType.DEFAULT,
|
||||
Undefined4DataType.dataType);
|
||||
|
||||
p.withTransaction("Set SourceType", () -> {
|
||||
f1.setSignatureSource(SourceType.DEFAULT);
|
||||
f2.setSignatureSource(SourceType.ANALYSIS);
|
||||
});
|
||||
|
||||
p.addConsumer(this);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
p.endTransaction(txId, true);
|
||||
builder.dispose();
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
private Program createToyDestinationProgram() throws Exception {
|
||||
|
||||
ProgramBuilder builder = new ProgramBuilder("helloProgram", ProgramBuilder._TOY, this);
|
||||
Program p = builder.getProgram();
|
||||
try {
|
||||
Program p = builder.getProgram();
|
||||
|
||||
builder.createMemory(".text", "0x10938", 0x10);
|
||||
builder.createMemory(".text", "0x10938", 0x10);
|
||||
|
||||
builder.createEmptyFunction(null, "0x10938", 0x10, DataType.DEFAULT);
|
||||
builder.createEmptyFunction(null, "0x10938", 0x10, DataType.DEFAULT);
|
||||
|
||||
return p;
|
||||
p.addConsumer(this);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
builder.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void setAllOptionsToDoNothing() {
|
||||
|
@ -207,20 +238,6 @@ public class VTMatchApplyFunctionSignatureTest extends AbstractGhidraHeadedInteg
|
|||
applyOptions.setEnum(VTOptionDefines.LABELS, LabelChoices.EXCLUDE);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
if (sourceProgram != null) {
|
||||
sourceProgram.release(this);
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
destinationProgram.release(this);
|
||||
}
|
||||
// env.release(sourceProgram);
|
||||
// env.release(destinationProgram);
|
||||
env.dispose();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApplyMatch_ReplaceSignature_SameNumParams() throws Exception {
|
||||
useMatch("0x004011a0", "0x004011a0");
|
||||
|
|
|
@ -68,9 +68,18 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
sourceProgram = null;
|
||||
destinationProgram = null;
|
||||
session = null;
|
||||
if (sourceProgram != null) {
|
||||
vtTestEnv.release(sourceProgram);
|
||||
sourceProgram = null;
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
vtTestEnv.release(destinationProgram);
|
||||
destinationProgram = null;
|
||||
}
|
||||
if (session != null) {
|
||||
session.release(vtTestEnv);
|
||||
session = null;
|
||||
}
|
||||
controller = null;
|
||||
correlator = null;
|
||||
vtTestEnv.dispose();
|
||||
|
@ -129,10 +138,10 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
addProgramCorrelation(new SimilarSymbolNameProgramCorrelatorFactory());
|
||||
useMatch("0x00412690", "0x00412720");
|
||||
checkAddressCorrelation(VTHashedFunctionAddressCorrelation.NAME);
|
||||
checkCommentMarkup(EolCommentMarkupType.INSTANCE, "0x004126dd",
|
||||
"Similar name eol comment.", "0x0041277f");
|
||||
checkCommentMarkup(PreCommentMarkupType.INSTANCE, "0x004126d7",
|
||||
"Similar name pre comment.", "NO_ADDRESS");
|
||||
checkCommentMarkup(EolCommentMarkupType.INSTANCE, "0x004126dd", "Similar name eol comment.",
|
||||
"0x0041277f");
|
||||
checkCommentMarkup(PreCommentMarkupType.INSTANCE, "0x004126d7", "Similar name pre comment.",
|
||||
"NO_ADDRESS");
|
||||
checkMarkupDestinationSource(VTHashedFunctionAddressCorrelation.NAME, true);
|
||||
}
|
||||
|
||||
|
@ -170,8 +179,8 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
addProgramCorrelation(new SimilarSymbolNameProgramCorrelatorFactory());
|
||||
useMatch("0x00401000", "0x00402000");
|
||||
checkAddressCorrelation(VTHashedFunctionAddressCorrelation.NAME);
|
||||
checkCommentMarkup(EolCommentMarkupType.INSTANCE, "0x00401003",
|
||||
"Similar name eol comment.", "NO_ADDRESS");
|
||||
checkCommentMarkup(EolCommentMarkupType.INSTANCE, "0x00401003", "Similar name eol comment.",
|
||||
"NO_ADDRESS");
|
||||
checkMarkupDestinationSource(VTHashedFunctionAddressCorrelation.NAME, true);
|
||||
}
|
||||
|
||||
|
@ -259,63 +268,66 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
|
||||
private Program buildProgram1(String name) throws Exception {
|
||||
ProgramBuilder builder = new ProgramBuilder(name, ProgramBuilder._X86);
|
||||
Program p = builder.getProgram();
|
||||
builder.createMemory("text", "0x00401000", 0x100);
|
||||
builder.setBytes("0x00401000", "8b ff 55 8b ec c3");
|
||||
builder.disassemble("0x00401000", 6);
|
||||
Function function = builder.createFunction("0x00401000");
|
||||
int txID = p.startTransaction("Setting Function Name");
|
||||
boolean commit = false;
|
||||
try {
|
||||
function.setName("MyFunctionAB", SourceType.USER_DEFINED);
|
||||
Listing listing = p.getListing();
|
||||
CodeUnit cu = listing.getCodeUnitAt(function.getEntryPoint());
|
||||
cu.setComment(CodeUnit.EOL_COMMENT, "A sample end of line comment");
|
||||
commit = true;
|
||||
Program p = builder.getProgram();
|
||||
builder.createMemory("text", "0x00401000", 0x100);
|
||||
builder.setBytes("0x00401000", "8b ff 55 8b ec c3");
|
||||
builder.disassemble("0x00401000", 6);
|
||||
Function function = builder.createFunction("0x00401000");
|
||||
p.withTransaction("Setting Function Name", () -> {
|
||||
function.setName("MyFunctionAB", SourceType.USER_DEFINED);
|
||||
Listing listing = p.getListing();
|
||||
CodeUnit cu = listing.getCodeUnitAt(function.getEntryPoint());
|
||||
cu.setComment(CodeUnit.EOL_COMMENT, "A sample end of line comment");
|
||||
});
|
||||
|
||||
p.addConsumer(vtTestEnv);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
p.endTransaction(txID, commit);
|
||||
builder.dispose();
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private Program buildProgram2(String name) throws Exception {
|
||||
ProgramBuilder builder = new ProgramBuilder(name, ProgramBuilder._TOY_BE);
|
||||
Program p = builder.getProgram();
|
||||
builder.createMemory("text", "0x00402000", 0x100);
|
||||
builder.setBytes("0x00402000", "ff 8b 55 ec 8b c3");
|
||||
builder.disassemble("0x00402000", 6);
|
||||
Function function = builder.createFunction("0x00402000");
|
||||
int txID = p.startTransaction("Setting Function Name");
|
||||
boolean commit = false;
|
||||
try {
|
||||
function.setName("MyFunctionXY", SourceType.USER_DEFINED);
|
||||
commit = true;
|
||||
Program p = builder.getProgram();
|
||||
builder.createMemory("text", "0x00402000", 0x100);
|
||||
builder.setBytes("0x00402000", "ff 8b 55 ec 8b c3");
|
||||
builder.disassemble("0x00402000", 6);
|
||||
Function function = builder.createFunction("0x00402000");
|
||||
p.withTransaction("Setting Function Name", () -> {
|
||||
function.setName("MyFunctionXY", SourceType.USER_DEFINED);
|
||||
});
|
||||
|
||||
p.addConsumer(vtTestEnv);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
p.endTransaction(txID, commit);
|
||||
builder.dispose();
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private Program buildProgram3(String name) throws Exception {
|
||||
ProgramBuilder builder = new ProgramBuilder(name, ProgramBuilder._X64);
|
||||
Program p = builder.getProgram();
|
||||
// Make the instructions differ from program1 above so comments will have a NO_ADDRESS
|
||||
// for the destination address.
|
||||
builder.setBytes("0x00402000", "31 ed 49 89 d0 5e 48 89 e2 c3");
|
||||
builder.disassemble("0x00402000", 10);
|
||||
Function function = builder.createFunction("0x00402000");
|
||||
int txID = p.startTransaction("Setting Function Name");
|
||||
boolean commit = false;
|
||||
try {
|
||||
function.setName("MyFunctionZZ", SourceType.USER_DEFINED);
|
||||
commit = true;
|
||||
Program p = builder.getProgram();
|
||||
// Make the instructions differ from program1 above so comments will have a NO_ADDRESS
|
||||
// for the destination address.
|
||||
builder.setBytes("0x00402000", "31 ed 49 89 d0 5e 48 89 e2 c3");
|
||||
builder.disassemble("0x00402000", 10);
|
||||
Function function = builder.createFunction("0x00402000");
|
||||
p.withTransaction("Setting Function Name", () -> {
|
||||
function.setName("MyFunctionZZ", SourceType.USER_DEFINED);
|
||||
});
|
||||
|
||||
p.addConsumer(vtTestEnv);
|
||||
return p;
|
||||
}
|
||||
finally {
|
||||
p.endTransaction(txID, commit);
|
||||
builder.dispose();
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private void createSession(String testSourceProgramName, String testDestinationProgramName)
|
||||
|
@ -347,8 +359,7 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
*/
|
||||
protected void addProgramCorrelation(VTProgramCorrelatorFactory correlatorFactory) {
|
||||
try {
|
||||
correlator =
|
||||
vtTestEnv.correlate(correlatorFactory, null, TaskMonitor.DUMMY);
|
||||
correlator = vtTestEnv.correlate(correlatorFactory, null, TaskMonitor.DUMMY);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Assert.fail(e.getMessage());
|
||||
|
@ -405,9 +416,10 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
addressCorrelationName.equals(destinationAddressSource);
|
||||
boolean isFunctionCorrelation =
|
||||
VTMarkupItem.FUNCTION_ADDRESS_SOURCE.equals(destinationAddressSource);
|
||||
assertTrue("Unexpected destination address source of " + destinationAddressSource +
|
||||
" for " + vtMarkupItem.getMarkupType().getDisplayName() + " markup @ " +
|
||||
vtMarkupItem.getSourceAddress().toString() + ".",
|
||||
assertTrue(
|
||||
"Unexpected destination address source of " + destinationAddressSource + " for " +
|
||||
vtMarkupItem.getMarkupType().getDisplayName() + " markup @ " +
|
||||
vtMarkupItem.getSourceAddress().toString() + ".",
|
||||
(isExpectedAddressCorrelation || isFunctionCorrelation));
|
||||
}
|
||||
}
|
||||
|
@ -481,10 +493,8 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
private void checkCommentMarkup(VTMarkupType desiredCommentMarkupType,
|
||||
String sourceAddressString, String comment, String destinationAddressString) {
|
||||
Address srcAddress = addr(sourceAddressString, sourceProgram);
|
||||
Address destAddress =
|
||||
destinationAddressString.equals("NO_ADDRESS") ? Address.NO_ADDRESS
|
||||
: addr(
|
||||
destinationAddressString, destinationProgram);
|
||||
Address destAddress = destinationAddressString.equals("NO_ADDRESS") ? Address.NO_ADDRESS
|
||||
: addr(destinationAddressString, destinationProgram);
|
||||
|
||||
Collection<VTMarkupItem> appliableMarkupItems =
|
||||
controller.getMatchInfo(testMatch).getAppliableMarkupItems(TaskMonitor.DUMMY); // Initialize the cache.
|
||||
|
@ -517,10 +527,11 @@ public class AddressCorrelationTest extends AbstractGhidraHeadedIntegrationTest
|
|||
vtMarkupItem.getSourceAddress().toString() + ".", isNoAddress);
|
||||
return;
|
||||
}
|
||||
assertTrue("Unexpected destination address of " + markupDestAddress.toString() +
|
||||
" when expecting " + destAddress.toString() + " for " +
|
||||
vtMarkupItem.getMarkupType().getDisplayName() + " markup @ " +
|
||||
vtMarkupItem.getSourceAddress().toString() + ".",
|
||||
assertTrue(
|
||||
"Unexpected destination address of " + markupDestAddress.toString() +
|
||||
" when expecting " + destAddress.toString() + " for " +
|
||||
vtMarkupItem.getMarkupType().getDisplayName() + " markup @ " +
|
||||
vtMarkupItem.getSourceAddress().toString() + ".",
|
||||
markupDestAddress.equals(destAddress));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -52,20 +52,23 @@ public abstract class AbstractCorrelatorTest extends AbstractGhidraHeadedIntegra
|
|||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
errors = new ArrayList<>();
|
||||
env = new TestEnv();
|
||||
sourceProgram = getSourceProgram();
|
||||
destinationProgram = getDestinationProgram();
|
||||
errors = new ArrayList<>();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
env.release(destinationProgram);
|
||||
env.release(sourceProgram);
|
||||
if (destinationProgram != null) {
|
||||
env.release(destinationProgram);
|
||||
destinationProgram = null;
|
||||
}
|
||||
if (sourceProgram != null) {
|
||||
env.release(sourceProgram);
|
||||
sourceProgram = null;
|
||||
}
|
||||
env.dispose();
|
||||
sourceProgram = null;
|
||||
destinationProgram = null;
|
||||
env = null;
|
||||
|
||||
if (errors.size() > 0) {
|
||||
|
|
|
@ -131,13 +131,21 @@ public abstract class AbstractFunctionSignatureMarkupTest
|
|||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
sourceProgram = null;
|
||||
destinationProgram = null;
|
||||
session = null;
|
||||
if (sourceProgram != null) {
|
||||
vtTestEnv.release(sourceProgram);
|
||||
sourceProgram = null;
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
vtTestEnv.release(destinationProgram);
|
||||
destinationProgram = null;
|
||||
}
|
||||
if (session != null) {
|
||||
session.release(vtTestEnv);
|
||||
session = null;
|
||||
}
|
||||
controller = null;
|
||||
correlator = null;
|
||||
vtTestEnv.dispose();
|
||||
|
||||
}
|
||||
|
||||
public static void setApplyMarkupOptionsToDefaults(ToolOptions applyOptions) {
|
||||
|
|
|
@ -97,13 +97,13 @@ public abstract class AbstractVTMarkupItemTest extends AbstractGhidraHeadedInteg
|
|||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
env.dispose();
|
||||
if (sourceProgram != null) {
|
||||
sourceProgram.release(this);
|
||||
}
|
||||
if (destinationProgram != null) {
|
||||
destinationProgram.release(this);
|
||||
}
|
||||
env.dispose();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -69,7 +69,7 @@ public class VTTestEnv extends TestEnv {
|
|||
sourceProgram = getProgram(sourceProgramName);
|
||||
destinationProgram = getProgram(destinationProgramName);
|
||||
|
||||
session = new VTSessionDB("Test", sourceProgram, destinationProgram, getTool());
|
||||
session = new VTSessionDB("Test", sourceProgram, destinationProgram, this);
|
||||
|
||||
VTProgramCorrelator correlator = factory.createCorrelator(sourceProgram,
|
||||
sourceProgram.getMemory(), destinationProgram, destinationProgram.getMemory(), null);
|
||||
|
@ -111,7 +111,7 @@ public class VTTestEnv extends TestEnv {
|
|||
}
|
||||
|
||||
private VTSessionDB createAndOpenVTSession() throws IOException {
|
||||
session = new VTSessionDB("Test", sourceProgram, destinationProgram, getTool());
|
||||
session = new VTSessionDB("Test", sourceProgram, destinationProgram, this);
|
||||
|
||||
runSwing(() -> controller.openVersionTrackingSession(session), false);
|
||||
|
||||
|
|
Loading…
Reference in a new issue