New Features
- Add side-effect analysis.
- The options
--class-path
and--app-class-path
can be repeated multiple times to specify multiple paths. - Pointer analysis
- Add
Plugin.onPhaseFinish()
. - Support specifying multiple method signatures in one
@InvokeHandler
annotation. - Add
getInfo()
to call graph edges and pointer flow edges. - Add pointer analysis assertion mechanism to ease testing.
- Add
pascal.taie.analysis.pta.plugin.util.AnalysisModelPlugin
andIRModelPlugin
to replace originalModel
andIRModel
, provide more convenient interfaces to support@InvokeHandler
.
- Add
- Taint analysis
- Support specifying IndexRef (e.g.,
index: "0[*]"
andindex: "0.f"
) in call sources and parameter sources. - Support specifying IndexRef in sinks.
- Support interactive mode, allowing users to modify the taint configuration file and re-run taint analysis without needing to re-run the whole program analysis.
- Enhance TFG dumping by adding taint configuration and call site info to Source/Sink node and TaintTransfer edge.
- Support programmatic taint config provider.
- Add commonly used taint configurations.
- Support specifying IndexRef (e.g.,
- Class hierarchy analysis (CHA)
- Support ignoring call sites that call methods declared in
java.lang.Object
. - Support ignoring call sites whose callees exceed given limit.
- Support ignoring call sites that call methods declared in
- Signature pattern and matcher
- Add
pascal.taie.language.classes.SignatureMatcher
which supports retrieving classes, methods, or fields whose signature match given pattern. - Use signature matcher in taint analysis and
@InvokeHandler
to simplify signature configuration.
- Add
Breaking Changes
- API changes
- Change
Solver.addPFGEdge(Pointer,Pointer,FlowKind,Type)
andSolver.addPFGEdge(Pointer,Pointer,FlowKind,Transfer)
toSolver.addPFGEdge(PointerFlowEdge)
and related APIs. - Deprecate
pascal.taie.analysis.pta.plugin.util.Model
andIRModel
(these two interfaces are currently preserved for compatibility, and will be removed in the future). - Change
PrimitiveType
fromenum
to aninterface
and implement it by classes that represent concrete primitive types. Refine the types of certain expressions fromPrimitiveType
to the concrete primitive types.
- Change
Fixes
- Fix incorrect classpath argument for the frontend where the
-acp
option is not being used. This issue is only reproducible when--prepend-JVM
(-pp
) is set totrue
. - Fix mismatch between number of parameter names and number of actual parameters in JMethod for inner class.
- Fix option parser, now treat only the first colon as delimiter between a key and a value (before each colon is treated as delimiter).
- Fix empty log file when running via JAR.
Contributors
We would like to thank the following community members for their contributions to the releases (v0.5.1, v0.2.2) of Tai-e: Wangxiz, Chenghang Shi, YaphetsH, GnSight, Zhaohui Wang, cs-cat, Yinning Xiao, Zhiwei Zhang, Hengbin Zheng, Chenxi Zhang.