GP-4886 Test fixes

This commit is contained in:
ghidra1
2024-11-19 18:50:36 -05:00
parent f3eabcfb18
commit c3052c0c83
8 changed files with 56 additions and 50 deletions
@@ -476,11 +476,11 @@ public class ClassicSampleX86ProgramBuilder extends ProgramBuilder {
startTransaction();
StringDataType string = new StringDataType();
DataType pointer = new Pointer32DataType(string);
Parameter p0 = new ParameterImpl("destStr", pointer, getProgram());
Parameter p3 = new ParameterImpl("parm_3", DataType.DEFAULT, getProgram());
Parameter p4 = new ParameterImpl("parm_4", DataType.DEFAULT, getProgram());
createEmptyFunction("sscanf", "0x0100415a", 78, new Undefined1DataType(), p0, p3, p4);
DataType stringPtr = new Pointer32DataType(string);
Parameter p0 = new ParameterImpl("destStr", stringPtr, getProgram());
Parameter p3 = new ParameterImpl("parm_3", Pointer32DataType.dataType, getProgram());
Parameter p4 = new ParameterImpl("parm_4", Pointer32DataType.dataType, getProgram());
createEmptyFunction("sscanf", "0x0100415a", 78, IntegerDataType.dataType, p0, p3, p4);
ReferenceManager referenceManager = getProgram().getReferenceManager();
referenceManager.addStackReference(addr("0x0100416c"), 0, 0x4, RefType.READ,
@@ -834,7 +834,7 @@ public class TestEnv {
AbstractGuiTest.runSwing(() -> {
tool = launchDefaultTool();
ProgramManager pm = tool.getService(ProgramManager.class);
pm.openProgram(program.getDomainFile());
pm.openProgram(program);
});
if (tool == null) {
@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -45,6 +45,7 @@ import ghidra.framework.plugintool.PluginTool;
import ghidra.program.database.ProgramBuilder;
import ghidra.program.model.address.Address;
import ghidra.program.model.data.DataType;
import ghidra.program.model.data.Undefined4DataType;
import ghidra.program.model.listing.*;
import ghidra.program.model.symbol.SourceType;
import ghidra.program.model.symbol.Symbol;
@@ -73,7 +74,7 @@ public class CopyPasteFunctionInfoTest extends AbstractGhidraHeadedIntegrationTe
ToyProgramBuilder builder = new ToyProgramBuilder(name, true, ProgramBuilder._TOY);
builder.createMemory("test1", "0x01001000", 0x8000);
builder.createEntryPoint("0x1006420", "entry");
DataType dt = DataType.DEFAULT;
DataType dt = Undefined4DataType.dataType;
Parameter p = new ParameterImpl(null, dt, builder.getProgram());
builder.createEmptyFunction("ghidra", "0x1004600", 1, dt, p, p, p, p, p, p, p, p, p, p, p,
p, p);
@@ -87,7 +88,7 @@ public class CopyPasteFunctionInfoTest extends AbstractGhidraHeadedIntegrationTe
builder.createEntryPoint("0x1006420", "entry");
builder.createFunction("0x1004700");
builder.createComment("0x1006420", "FUNCTION", CodeUnit.PLATE_COMMENT);
DataType dt = DataType.DEFAULT;
DataType dt = Undefined4DataType.dataType;
Parameter p = new ParameterImpl(null, dt, builder.getProgram());
builder.createEmptyFunction("BOB", "0x1004260", 1, dt, p, p, p, p, p, p, p, p, p, p, p, p,
p);
@@ -481,8 +482,7 @@ public class CopyPasteFunctionInfoTest extends AbstractGhidraHeadedIntegrationTe
private void resetOptions() {
List<String> names = fieldOptions2.getOptionNames();
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
for (String name : names) {
if (!name.startsWith("Format Code")) {
continue;
}
@@ -358,7 +358,9 @@ public abstract class AbstractEditorTest extends AbstractGhidraHeadedIntegration
}
protected DataTypeComponent getComponent(int index) {
return runSwing(() -> model.getComponent(index));
return runSwing(() ->
model.getComponent(index));
}
protected int getOffset(int index) {
@@ -39,6 +39,7 @@ import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin;
import ghidra.app.plugin.core.data.DataPlugin;
import ghidra.app.plugin.core.disassembler.DisassemblerPlugin;
import ghidra.app.plugin.core.highlight.SetHighlightPlugin;
import ghidra.app.plugin.core.instructionsearch.model.InstructionSearchData.UpdateType;
import ghidra.app.plugin.core.navigation.*;
import ghidra.app.services.ProgramManager;
import ghidra.app.util.AddEditDialog;
@@ -52,6 +53,7 @@ import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressFactory;
import ghidra.program.model.data.*;
import ghidra.program.model.listing.*;
import ghidra.program.model.listing.Function.FunctionUpdateType;
import ghidra.program.model.symbol.*;
import ghidra.program.util.ProgramSelection;
import ghidra.test.*;
@@ -1271,6 +1273,11 @@ public class Function1Test extends AbstractGhidraHeadedIntegrationTest {
env.showTool();
loadProgram("notepad");
Function f = createFunctionAtEntry();
// Test requires a size-constrained register variable edit
program.withTransaction("Update Signature",
() -> f.updateFunction(null, null, FunctionUpdateType.CUSTOM_STORAGE, true,
SourceType.ANALYSIS, new ParameterImpl("test", Undefined4DataType.dataType,
program.getRegister("EBX"), program)));
setCustomParameterStorage(f, true);
waitForSwing();
@@ -1284,7 +1291,6 @@ public class Function1Test extends AbstractGhidraHeadedIntegrationTest {
DataTypeSelectionDialog dialog = waitForDialogComponent(DataTypeSelectionDialog.class);
setEditorText(dialog, "int[0x8888888]");
// FIXME: Dialog does not appear to register type entry until it is dismissed
// For the test to pass, the status field should show an error message containing
// the following text (this is only a part of the status message, but is enough
@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -142,7 +142,7 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
// example
// dword ptr param, EAX
String searchText = "param";
String searchText = "local_";
SearchOptions options = new SearchOptions(searchText, false, true, false);
searcher =
new ListingDisplaySearcher(tool, program, startLoc, null, options, TaskMonitor.DUMMY);
@@ -163,7 +163,7 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
// example
// dword ptr param, EAX
String searchText = "param";
String searchText = "local_";
SearchOptions options = new SearchOptions(searchText, false, false, false);
searcher =
@@ -187,17 +187,21 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
// example
// dword ptr param, EAX
SearchOptions options = new SearchOptions("param", false, false, false, false, true, true,
SearchOptions options = new SearchOptions("local_", false, false, false, false, true, true,
false, false, false, true, false, false);
searcher =
new ListingDisplaySearcher(tool, program, startLoc, null, options, TaskMonitor.DUMMY);
//set up list of answers
ArrayList<Address> startList = new ArrayList<>();
startList.add(addr(0x0100416c));
startList.add(addr(0x01004186));
startList.add(addr(0x01004189));
startList.add(addr(0x0100419c));
startList.add(addr(0x01004162));
startList.add(addr(0x01004169));
startList.add(addr(0x0100416f));
startList.add(addr(0x01004178));
startList.add(addr(0x0100417c));
startList.add(addr(0x01004180));
startList.add(addr(0x01004196));
startList.add(addr(0x010041a1));
//check that the text is found there in the correct field
checkTextFound(startList, OperandFieldLocation.class);
@@ -268,11 +272,9 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
int transactionID = program.startTransaction("test");
try {
DataType dt = program.getDataTypeManager()
.addDataType(struct,
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(struct, DataTypeConflictHandler.DEFAULT_HANDLER);
floatDt = program.getDataTypeManager()
.addDataType(new FloatDataType(),
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(new FloatDataType(), DataTypeConflictHandler.DEFAULT_HANDLER);
listing.createData(addr(0x0100689b), dt);
listing.createData(addr(0x0100688c), floatDt);
listing.createData(addr(0x01006890), floatDt);
@@ -347,11 +349,9 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
int transactionID = program.startTransaction("test");
try {
DataType dt = program.getDataTypeManager()
.addDataType(struct,
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(struct, DataTypeConflictHandler.DEFAULT_HANDLER);
floatDt = program.getDataTypeManager()
.addDataType(new FloatDataType(),
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(new FloatDataType(), DataTypeConflictHandler.DEFAULT_HANDLER);
listing.createData(addr(0x0100689b), dt);
listing.createData(addr(0x0100688c), floatDt);
listing.createData(addr(0x01006890), floatDt);
@@ -437,11 +437,9 @@ public class ListingDisplaySearcherTest extends AbstractGhidraHeadedIntegrationT
int transactionID = program.startTransaction("test");
try {
DataType dt = program.getDataTypeManager()
.addDataType(struct,
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(struct, DataTypeConflictHandler.DEFAULT_HANDLER);
floatDt = program.getDataTypeManager()
.addDataType(new FloatDataType(),
DataTypeConflictHandler.DEFAULT_HANDLER);
.addDataType(new FloatDataType(), DataTypeConflictHandler.DEFAULT_HANDLER);
listing.createData(addr(0x0100689b), dt);
listing.createData(addr(0x0100688c), floatDt);
listing.createData(addr(0x01006890), floatDt);
@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -492,9 +492,10 @@ public class FunctionEditorModelTest extends AbstractGuiTest {
public void testAutoStorageFix() {
model.addParameter();
ParamInfo paramInfo = model.getParameters().get(0);// param_0@Stack[0x4]:4
model.setParameterFormalDataType(paramInfo, IntegerDataType.dataType);
model.setUseCustomizeStorage(true);
Varnode v = paramInfo.getStorage().getFirstVarnode();
assertEquals(1, v.getSize());
assertEquals(4, v.getSize());
assertEquals(4, v.getOffset());
model.setParameterFormalDataType(paramInfo, new Undefined8DataType());
assertTrue(model.isValid());
@@ -507,9 +508,9 @@ public class FunctionEditorModelTest extends AbstractGuiTest {
public void testAutoStorageFixReg() throws Exception {
model.addParameter();
ParamInfo paramInfo = model.getParameters().get(0);
model.setParameterFormalDataType(paramInfo, new Undefined2DataType());
model.setUseCustomizeStorage(true);
model.setParameterFormalDataType(paramInfo, new Undefined2DataType());
assertTrue(model.getStatusText(), model.isValid());
Varnode v = paramInfo.getStorage().getFirstVarnode();
assertEquals(2, v.getSize());
@@ -1046,7 +1047,7 @@ public class FunctionEditorModelTest extends AbstractGuiTest {
param = model.getParameters().get(3);
assertEquals("param_2", param.getName());
assertTrue(DefaultDataType.dataType.isEquivalent(param.getDataType()));
assertEquals("Stack[0xc]:1", param.getStorage().toString());
assertEquals("<UNASSIGNED>", param.getStorage().toString());
model.setParameterFormalDataType(param, struct);
@@ -1156,7 +1157,7 @@ public class FunctionEditorModelTest extends AbstractGuiTest {
param = model.getParameters().get(3);
assertEquals("param_2", param.getName());
assertTrue(DefaultDataType.dataType.isEquivalent(param.getDataType()));
assertEquals("R9B:1", param.getStorage().toString());
assertEquals("<UNASSIGNED>", param.getStorage().toString());
model.setParameterFormalDataType(param, struct);
@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -55,7 +55,6 @@ public class CompareFunctionsDecompilerViewTest extends AbstractGhidraHeadedInte
FunctionManager functionManager = program1.getFunctionManager();
fun1 = functionManager.getFunctionAt(addr(0x01002cf5));
fun2 = functionManager.getFunctionAt(addr(0x0100415a));
}
private Address addr(long offset) {
@@ -69,6 +68,8 @@ public class CompareFunctionsDecompilerViewTest extends AbstractGhidraHeadedInte
@Test
public void testDecompDifView() throws Exception {
assertFalse(program1.isClosed());
Set<Function> functions = Set.of(fun1, fun2);
compareFunctions(functions);
@@ -76,13 +77,12 @@ public class CompareFunctionsDecompilerViewTest extends AbstractGhidraHeadedInte
waitForComponentProvider(FunctionComparisonProvider.class);
checkFunctions(provider, LEFT, fun1, fun1, fun2);
DecompilerCodeComparisonPanel panel =
(DecompilerCodeComparisonPanel) provider
.getCodeComparisonPanelByName(DecompilerCodeComparisonPanel.NAME);
DecompilerCodeComparisonPanel panel = (DecompilerCodeComparisonPanel) provider
.getCodeComparisonPanelByName(DecompilerCodeComparisonPanel.NAME);
waitForDecompiler(panel);
assertHasLines(panel.getLeftPanel(), 28);
assertHasLines(panel.getRightPanel(), 23);
assertHasLines(panel.getRightPanel(), 22);
}
private void checkFunctions(FunctionComparisonProvider provider, Side side,
@@ -113,8 +113,7 @@ public class CompareFunctionsDecompilerViewTest extends AbstractGhidraHeadedInte
}
private Program buildTestProgram() throws Exception {
ClassicSampleX86ProgramBuilder builder =
new ClassicSampleX86ProgramBuilder("Test", false);
ClassicSampleX86ProgramBuilder builder = new ClassicSampleX86ProgramBuilder("Test", false);
return builder.getProgram();
}