foss-vuln-tracker/repoman/src/main/java/it/unitn/repoman/core/slicers/tainters/MethodCallTainter.java

39 lines
1.4 KiB
Java

package it.unitn.repoman.core.slicers.tainters;
import it.unitn.repoman.core.lang.traversals.generic.MethodCallTraversal;
import org.antlr.v4.runtime.ParserRuleContext;
import java.util.*;
public class MethodCallTainter extends AbstractTainter {
public MethodCallTainter(Set<ParserRuleContext> collectables, Set<ParserRuleContext> seeds) {
super(collectables, seeds);
}
@Override
protected void initSeeds(Set<ParserRuleContext> seeds) {
this.taintedStatements.addAll(seeds);
}
@Override
public Set<ParserRuleContext> iterate(ParserRuleContext taintedStmt) {
Set<ParserRuleContext> elementsToAdd = new LinkedHashSet<>();
ParserRuleContext taintedScope = wrapper.getContainer(taintedStmt);
for (ParserRuleContext collectable : collectables) {
if (!taintedStatements.contains(collectable)) {
if (wrapper.getContainer(collectable).equals(taintedScope)) {
MethodCallTraversal t = wrapper.getMethodCallTraversal(collectable);
MethodCallTraversal tt = wrapper.getMethodCallTraversal(taintedStmt);
if (t.getMethodName().equals(tt.getMethodName()) && t.getParamsNumber() == tt.getParamsNumber()) {
elementsToAdd.add(collectable);
}
}
}
}
return elementsToAdd;
}
}