New Features
- Add side-effect analysis.
- The options
--class-pathand--app-class-pathcan be repeated multiple times to specify multiple paths. - Pointer analysis
- Add
Plugin.onPhaseFinish(). - Support specifying multiple method signatures in one
@InvokeHandlerannotation. - 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.AnalysisModelPluginandIRModelPluginto replace originalModelandIRModel, 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.SignatureMatcherwhich supports retrieving classes, methods, or fields whose signature match given pattern. - Use signature matcher in taint analysis and
@InvokeHandlerto 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.ModelandIRModel(these two interfaces are currently preserved for compatibility, and will be removed in the future). - Change
PrimitiveTypefromenumto aninterfaceand implement it by classes that represent concrete primitive types. Refine the types of certain expressions fromPrimitiveTypeto the concrete primitive types.
- Change
Fixes
- Fix incorrect classpath argument for the frontend where the
-acpoption 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.