package de.ecspride.util; import java.util.HashSet; import java.util.Set; import soot.jimple.infoflow.android.data.AndroidMethod; import soot.jimple.infoflow.android.data.AndroidMethod.CATEGORY; import soot.jimple.infoflow.android.data.parsers.CategorizedAndroidSourceSinkParser; import de.ecspride.Settings; public class SourcesSinks { public Set<AndroidMethod> getAndroidSourcesMethods(String sourceFile){ Set<AndroidMethod> sources = new HashSet<AndroidMethod>(); Set<CATEGORY> categories = new HashSet<CATEGORY>(); if(Settings.instance.sourceCategories.equals(CATEGORY.ALL)) categories.add(CATEGORY.ALL); else{ for(String category : Settings.instance.sourceCategories.split("\\|")) categories.add(CATEGORY.valueOf(category)); } try{ CategorizedAndroidSourceSinkParser parser = new CategorizedAndroidSourceSinkParser(categories, sourceFile, true, false); for (AndroidMethod am : parser.parse()){ if (am.isSource()) sources.add(am); } }catch(Exception ex){ ex.printStackTrace(); System.exit(1); } return sources; } public Set<AndroidMethod> getAndroidSinkMethods(String sinkFile){ Set<AndroidMethod> sinks = new HashSet<AndroidMethod>(); Set<CATEGORY> categories = new HashSet<CATEGORY>(); for(String category : Settings.instance.sinkCategories.split("\\|")) categories.add(CATEGORY.valueOf(category)); try{ CategorizedAndroidSourceSinkParser parser = new CategorizedAndroidSourceSinkParser(categories, sinkFile, false, true); for (AndroidMethod am : parser.parse()){ if (am.isSink()) sinks.add(am); } }catch(Exception ex){ ex.printStackTrace(); System.exit(1); } return sinks; } }