soot
soot copied to clipboard
Error in Spark TypeManager when enabling full Reflective reasoning
Steps to reproduce: 1.) Hello, I'm attempting to develop a static datarace detection pass using Soot, and Spark but I would like sound analysis (e.g. reasoning conservatively about reflection). I've found Soot crashes when running Spark on a simple program if "types-for-invoke" and safe-newinstance are both enabled.
I've enabled the safe-forename, safe-newinstance, and types-for-invoke options of the cg. However, it appears that this bug occurs with the combination of the safe-newinstance and types-for-invoke flags both enabled.
Files used to reproduce: Test java file contents below:
class Simple1 {
static int a = 0;
public static void main(String[] args) {
Thread t1 = new Thread() {
public void run() {
a = 7;
System.out.println("a is: " + a);
}
};
Thread t2 = new Thread() {
public void run() {
a = 10;
System.out.println("a is: " + a);
}
};
t1.start();
try {
t1.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
t2.start();
try {
t2.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
a = 0;
t1 = new Thread() {
public void run() {
a = 2;
System.out.println("a is: " + a);
}
};
t2 = new Thread() {
public void run() {
a = 3;
System.out.println("a is: " + a);
}
};
t1.start();
t2.start();
try {
t2.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
try {
t1.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
Soot version:
trunk
Command line:
-cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar -process-dir simple1/ -d simple1Output -w -p cg.spark enabled:true -p cg safe-newinstance:true -p cg types-for-invoke:true
Max Memory:
14290MB
Stack trace:
java.lang.RuntimeException: Type mask not found for type sun.nio.cs.AbstractCharsetProvider at soot.jimple.spark.internal.TypeManager.get(TypeManager.java:137) at soot.jimple.spark.sets.HybridPointsToSet.nativeAddAll(HybridPointsToSet.java:67) at soot.jimple.spark.sets.HybridPointsToSet.addAll(HybridPointsToSet.java:98) at soot.jimple.spark.sets.PointsToSetInternal.addAll(PointsToSetInternal.java:56) at soot.jimple.spark.sets.HybridPointsToSet.superAddAll(HybridPointsToSet.java:50) at soot.jimple.spark.sets.HybridPointsToSet.addAll(HybridPointsToSet.java:93) at soot.jimple.spark.sets.DoublePointsToSet.addAll(DoublePointsToSet.java:73) at soot.jimple.spark.solver.PropWorklist.handleVarNode(PropWorklist.java:170) at soot.jimple.spark.solver.PropWorklist.propagate(PropWorklist.java:81) at soot.jimple.spark.SparkTransformer.propagatePAG(SparkTransformer.java:238) at soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:155) at soot.SceneTransformer.transform(SceneTransformer.java:36) at soot.Transform.apply(Transform.java:102) at soot.RadioScenePack.internalApply(RadioScenePack.java:68) at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:58) at soot.Pack.apply(Pack.java:117) at soot.PackManager.runWholeProgramPacks(PackManager.java:613) at soot.PackManager.runPacksNormally(PackManager.java:497) at soot.PackManager.runPacks(PackManager.java:421) at soot.Main.run(Main.java:269) at soot.Main.main(Main.java:141)
@mbenz89 I would like to investigate this issue. Can I be assigned it?