package tests.argumentTainter; import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.LinkedList; import java.util.List; import neo4j.readWriteDB.Neo4JDBInterface; import neo4j.traversals.readWriteDB.Traversals; import org.junit.Test; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.index.IndexHits; import tests.TestDBTestReadWriteDB; import tools.argumentTainter.DefUseCFGPatcher; import tools.argumentTainter.DefUseCFGPatcher.DefUseLink; import ddg.DefUseCFG.DefUseCFG; import ddg.DefUseCFG.DefUseCFGFactory; import ddg.DefUseCFG.ReadWriteDbFactory; public class TestArgumentTainter extends TestDBTestReadWriteDB { private DefUseCFGFactory defUseGraphFactory = new ReadWriteDbFactory(); @Test public void testDefUseCFGPatcher() { Long funcId = getFunctionIdByFunctionName("arg_tainter_basic_test"); List<Node> statementsToPatch = getStatementsToPatch(funcId, "memset"); DefUseCFGPatcher defUseCFGPatcher = new DefUseCFGPatcher(); DefUseCFG defUseCFG = defUseGraphFactory.create(funcId); defUseCFGPatcher.setSourceToPatch("memset", 0); defUseCFGPatcher.patchDefUseCFG(defUseCFG, statementsToPatch); Collection<DefUseLink> defUseLinksToAdd = defUseCFGPatcher .getDefUseLinksToAdd(); assertTrue(defUseLinksToAdd.size() == 4); for (DefUseLink a : defUseLinksToAdd) { assertTrue(a.symbol.contains("myVar")); } } @Test public void testDDGPatcher() { } private List<Node> getStatementsToPatch(Long funcId, String source) { List<Node> statementsToPatch = new LinkedList<Node>(); List<Node> callNodes = Traversals.getCallsToForFunction(source, funcId); for (Node callNode : callNodes) { statementsToPatch.add(Traversals.getStatementForASTNode(callNode)); } return statementsToPatch; } private Long getFunctionIdByFunctionName(String functionName) { IndexHits<Node> hits = Traversals.getFunctionsByName(functionName); Long funcId = hits.next().getId(); return funcId; } }