diff --git a/java/ql/test/library-tests/dataflow/capture/test.ql b/java/ql/test/library-tests/dataflow/capture/test.ql index 989094c520d..448bb030583 100644 --- a/java/ql/test/library-tests/dataflow/capture/test.ql +++ b/java/ql/test/library-tests/dataflow/capture/test.ql @@ -1,17 +1,16 @@ import java import semmle.code.java.dataflow.DataFlow -import DataFlow StringLiteral src() { result.getCompilationUnit().fromSource() } -class Conf extends Configuration { - Conf() { this = "qq capture" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() = src() } - override predicate isSource(Node n) { n.asExpr() = src() } - - override predicate isSink(Node n) { any() } + predicate isSink(DataFlow::Node n) { any() } } -from Node src, Node sink, Conf conf -where conf.hasFlow(src, sink) +module Flow = DataFlow::Global; + +from DataFlow::Node src, DataFlow::Node sink +where Flow::flow(src, sink) select src, sink diff --git a/java/ql/test/library-tests/dataflow/records/test.ql b/java/ql/test/library-tests/dataflow/records/test.ql index 3ce69be095e..7d1e315efea 100644 --- a/java/ql/test/library-tests/dataflow/records/test.ql +++ b/java/ql/test/library-tests/dataflow/records/test.ql @@ -1,15 +1,14 @@ import java import semmle.code.java.dataflow.DataFlow -import DataFlow -class Conf extends Configuration { - Conf() { this = "qqconf" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - - override predicate isSink(Node n) { n.asExpr().(Argument).getCall().getCallee().hasName("sink") } + predicate isSink(DataFlow::Node n) { n.asExpr().(Argument).getCall().getCallee().hasName("sink") } } -from Conf conf, Node src, Node sink -where conf.hasFlow(src, sink) +module Flow = DataFlow::Global; + +from DataFlow::Node src, DataFlow::Node sink +where Flow::flow(src, sink) select src, sink diff --git a/java/ql/test/library-tests/dataflow/switchexpr/switchexprflow.ql b/java/ql/test/library-tests/dataflow/switchexpr/switchexprflow.ql index 2a6f2cc12b8..c9cb216feea 100644 --- a/java/ql/test/library-tests/dataflow/switchexpr/switchexprflow.ql +++ b/java/ql/test/library-tests/dataflow/switchexpr/switchexprflow.ql @@ -1,15 +1,14 @@ import java import semmle.code.java.dataflow.DataFlow -import DataFlow -class Conf extends Configuration { - Conf() { this = "qqconf" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - - override predicate isSink(Node n) { any() } + predicate isSink(DataFlow::Node n) { any() } } -from Conf c, Node sink -where c.hasFlow(_, sink) +module Flow = DataFlow::Global; + +from DataFlow::Node sink +where Flow::flowTo(sink) select sink diff --git a/java/ql/test/library-tests/dataflow/taintgettersetter/taintgettersetter.ql b/java/ql/test/library-tests/dataflow/taintgettersetter/taintgettersetter.ql index 86e176345d6..6da67a65cc3 100644 --- a/java/ql/test/library-tests/dataflow/taintgettersetter/taintgettersetter.ql +++ b/java/ql/test/library-tests/dataflow/taintgettersetter/taintgettersetter.ql @@ -1,25 +1,24 @@ import java import semmle.code.java.dataflow.DataFlow -import DataFlow -class Conf extends Configuration { - Conf() { this = "taintgettersetter" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodAccess).getMethod().hasName("taint") } - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("taint") } - - override predicate isSink(Node n) { + predicate isSink(DataFlow::Node n) { exists(MethodAccess sink | sink.getAnArgument() = n.asExpr() and sink.getMethod().hasName("sink") ) } - override predicate isAdditionalFlowStep(Node n1, Node n2) { + predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) { exists(AddExpr add | add.getType() instanceof TypeString and add.getAnOperand() = n1.asExpr() and n2.asExpr() = add ) } } -from Node src, Node sink, Conf conf -where conf.hasFlow(src, sink) +module Flow = DataFlow::Global; + +from DataFlow::Node src, DataFlow::Node sink +where Flow::flow(src, sink) select src, sink diff --git a/java/ql/test/library-tests/dataflow/taintreturn/taintreturn.ql b/java/ql/test/library-tests/dataflow/taintreturn/taintreturn.ql index 4d264ac6f28..46400b5ab45 100644 --- a/java/ql/test/library-tests/dataflow/taintreturn/taintreturn.ql +++ b/java/ql/test/library-tests/dataflow/taintreturn/taintreturn.ql @@ -1,6 +1,5 @@ import java import semmle.code.java.dataflow.TaintTracking -import DataFlow predicate step(Expr e1, Expr e2) { exists(MethodAccess ma | @@ -17,28 +16,35 @@ predicate isSink0(Expr sink) { ) } -class Conf1 extends Configuration { - Conf1() { this = "testconf1" } +module FirstConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodAccess).getMethod().hasName("src") } - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("src") } + predicate isSink(DataFlow::Node n) { any() } - override predicate isSink(Node n) { any() } - - override predicate isAdditionalFlowStep(Node n1, Node n2) { step(n1.asExpr(), n2.asExpr()) } + predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) { + step(n1.asExpr(), n2.asExpr()) + } } -class Conf2 extends Configuration { - Conf2() { this = "testconf2" } +module FirstFlow = DataFlow::Global; - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("src") } +module SecondConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodAccess).getMethod().hasName("src") } - override predicate isSink(Node n) { isSink0(n.asExpr()) } + predicate isSink(DataFlow::Node n) { isSink0(n.asExpr()) } - override predicate isAdditionalFlowStep(Node n1, Node n2) { step(n1.asExpr(), n2.asExpr()) } + predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) { + step(n1.asExpr(), n2.asExpr()) + } } +module SecondFlow = DataFlow::Global; + from int i1, int i2 where - i1 = count(Node src, Node sink, Conf1 c | c.hasFlow(src, sink) and isSink0(sink.asExpr())) and - i2 = count(Node src, Node sink, Conf2 c | c.hasFlow(src, sink)) + i1 = + count(DataFlow::Node src, DataFlow::Node sink | + FirstFlow::flow(src, sink) and isSink0(sink.asExpr()) + ) and + i2 = count(DataFlow::Node src, DataFlow::Node sink | SecondFlow::flow(src, sink)) select i1, i2 diff --git a/java/ql/test/library-tests/dataflow/this-flow/this-flow.ql b/java/ql/test/library-tests/dataflow/this-flow/this-flow.ql index 481cb2108d9..aa7811d07eb 100644 --- a/java/ql/test/library-tests/dataflow/this-flow/this-flow.ql +++ b/java/ql/test/library-tests/dataflow/this-flow/this-flow.ql @@ -1,19 +1,18 @@ import java import semmle.code.java.dataflow.DataFlow -import DataFlow -class ThisFlowConfig extends Configuration { - ThisFlowConfig() { this = "ThisFlowConfig" } - - override predicate isSource(Node src) { - exists(PostUpdateNode cie | cie.asExpr() instanceof ClassInstanceExpr | +module ThisFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { + exists(DataFlow::PostUpdateNode cie | cie.asExpr() instanceof ClassInstanceExpr | cie.getPreUpdateNode() = src or cie = src ) } - override predicate isSink(Node sink) { any() } + predicate isSink(DataFlow::Node sink) { any() } } -from Node n, ThisFlowConfig conf -where conf.hasFlow(_, n) +module ThisFlow = DataFlow::Global; + +from DataFlow::Node n +where ThisFlow::flowTo(n) select n diff --git a/java/ql/test/library-tests/dataflow/typepruning/test.ql b/java/ql/test/library-tests/dataflow/typepruning/test.ql index c86476afeed..018a4f428fe 100644 --- a/java/ql/test/library-tests/dataflow/typepruning/test.ql +++ b/java/ql/test/library-tests/dataflow/typepruning/test.ql @@ -2,18 +2,16 @@ import java import semmle.code.java.dataflow.DataFlow import DataFlow -class Conf extends Configuration { - Conf() { this = "test types" } +module Config implements DataFlow::ConfigSig { + predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - override predicate isSource(Node n) { n.asExpr().(MethodAccess).getMethod().hasName("source") } - - override predicate isSink(Node n) { + predicate isSink(Node n) { exists(MethodAccess sink | sink.getAnArgument() = n.asExpr() and sink.getMethod().hasName("sink") ) } - override predicate isAdditionalFlowStep(Node n1, Node n2) { + predicate isAdditionalFlowStep(Node n1, Node n2) { exists(MethodAccess ma | ma.getMethod().hasName("customStep") and ma.getAnArgument() = n1.asExpr() and @@ -22,6 +20,8 @@ class Conf extends Configuration { } } -from Node src, Node sink, Conf conf -where conf.hasFlow(src, sink) +module Flow = DataFlow::Global; + +from Node src, Node sink +where Flow::flow(src, sink) select src, sink, sink.getEnclosingCallable()