soot-oss / soot

Soot - A Java optimization framework
GNU Lesser General Public License v2.1
2.87k stars 706 forks source link

Missing Unit in unit-to-owner Mapping #2042

Open lbettels opened 8 months ago

lbettels commented 8 months ago

Describe the bug I am currently updating/extending the Soot TaintAnalysis framework. When I try to run the analysis, i encounter an error where it says that a unit is missing from the statement to owner list in the icfg, even though that unit should be part of the owner list, as Heros manages to load the active body of the method later in the analysis. This does not happen in the version 4.2.1 of soot.

I added the compiled and to-be-analyzed class files. I am interested in a taint analysis starting from target.taint.Assignment 's main method, which uses a class from another package. The missing unit is the statement this := @this: target.taint.internal.SourceClass from the target.taint.internal.SourceClass <init> method.

Input file target.zip

To reproduce I am using:

Expected behavior As heros is able to load the method body of the target.taint.internal.SourceClass methods, i expect a unit-to-owner mapping to exist in the icfg.

Stacktrace

Exception in thread "Thread-8" Exception in thread "Thread-9" java.lang.AssertionError: Statement this := @this: target.taint.internal.SourceClass not in unit-to-owner mapping
    at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.getBodyOf(AbstractJimpleBasedICFG.java:103)
    at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(AbstractJimpleBasedICFG.java:152)
    at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(AbstractJimpleBasedICFG.java:51)
    at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:897)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:840)
java.util.concurrent.RejectedExecutionException: Task heros.solver.IDESolver$PathEdgeProcessingTask@58c67daa rejected from heros.solver.CountingThreadPoolExecutor@412414b2[Shutting down, pool size = 11, active threads = 2, queued tasks = 0, completed tasks = 9]
    at java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2065)
    at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:833)
    at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1365)
    at heros.solver.CountingThreadPoolExecutor.execute(CountingThreadPoolExecutor.java:51)
    at heros.solver.IDESolver.scheduleEdgeProcessing(IDESolver.java:286)
    at heros.solver.IDESolver.propagate(IDESolver.java:651)
    at heros.solver.IDESolver.processCall(IDESolver.java:362)
    at heros.solver.IDESolver.access$000(IDESolver.java:68)
    at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:893)