From f5134e312515d8fc882a80b69dbb24bb3b13f291 Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Tue, 16 Sep 2025 17:20:44 +0100 Subject: [PATCH] Java: Eliminate pointless use of PathNodes over DataFlow::Node The use of PathNode prevents these from being overlay informed. --- java/ql/lib/experimental/quantum/JCA.qll | 40 ++++++++++-------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index 108835c2c94e..e2c03d698830 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -556,40 +556,32 @@ module JCAModel { module GetInstanceToInitToUseFlow = DataFlow::GlobalWithState; - 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) } }