Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 16 additions & 24 deletions java/ql/lib/experimental/quantum/JCA.qll
Original file line number Diff line number Diff line change
Expand Up @@ -556,40 +556,32 @@ module JCAModel {

module GetInstanceToInitToUseFlow = DataFlow::GlobalWithState<GetInstanceToInitToUseConfig>;

GetInstance getInstantiationFromUse(
Use use, GetInstanceToInitToUseFlow::PathNode src, GetInstanceToInitToUseFlow::PathNode sink
) {
src.getNode().asExpr() = result and
sink.getNode().asExpr() = use.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flowPath(src, sink)
GetInstance getInstantiationFromUse(Use use, DataFlow::Node src, DataFlow::Node sink) {
src.asExpr() = result and
sink.asExpr() = use.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flow(src, sink)
}

GetInstance getInstantiationFromInit(
Init init, GetInstanceToInitToUseFlow::PathNode src, GetInstanceToInitToUseFlow::PathNode sink
) {
src.getNode().asExpr() = result and
sink.getNode().asExpr() = init.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flowPath(src, sink)
GetInstance getInstantiationFromInit(Init init, DataFlow::Node src, DataFlow::Node sink) {
src.asExpr() = result and
sink.asExpr() = init.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flow(src, sink)
}

Init getInitFromUse(
Use use, GetInstanceToInitToUseFlow::PathNode src, GetInstanceToInitToUseFlow::PathNode sink
) {
src.getNode().asExpr() = result.(MethodCall).getQualifier() and
sink.getNode().asExpr() = use.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flowPath(src, sink)
Init getInitFromUse(Use use, DataFlow::Node src, DataFlow::Node sink) {
src.asExpr() = result.(MethodCall).getQualifier() and
sink.asExpr() = use.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flow(src, sink)
}

predicate hasInit(Use use) { exists(getInitFromUse(use, _, _)) }

Use getAnIntermediateUseFromFinalUse(
Use final, GetInstanceToInitToUseFlow::PathNode src, GetInstanceToInitToUseFlow::PathNode sink
) {
Use getAnIntermediateUseFromFinalUse(Use final, DataFlow::Node src, DataFlow::Node sink) {
not final.isIntermediate() and
result.isIntermediate() and
src.getNode().asExpr() = result.(MethodCall).getQualifier() and
sink.getNode().asExpr() = final.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flowPath(src, sink)
src.asExpr() = result.(MethodCall).getQualifier() and
sink.asExpr() = final.(MethodCall).getQualifier() and
GetInstanceToInitToUseFlow::flow(src, sink)
}
}

Expand Down