C++: Update some dataflow tests to use DataFlow::ConfigSig

This commit is contained in:
Jeroen Ketema
2023-03-08 14:55:40 +01:00
parent 8253f2d343
commit 6f2407412e
3 changed files with 22 additions and 22 deletions

View File

@@ -1,14 +1,12 @@
import cpp
import semmle.code.cpp.ir.dataflow.DataFlow
class TestConfig extends DataFlow::Configuration {
TestConfig() { this = "TestConfig" }
override predicate isSource(DataFlow::Node source) {
module TestConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) {
source.asExpr().(FunctionCall).getTarget().getName() = "source"
}
override predicate isSink(DataFlow::Node sink) {
predicate isSink(DataFlow::Node sink) {
exists(FunctionCall call |
call.getTarget().getName() = "sink" and
sink.asExpr() = call.getAnArgument()
@@ -16,6 +14,8 @@ class TestConfig extends DataFlow::Configuration {
}
}
from DataFlow::Node sink, DataFlow::Node source, TestConfig cfg
where cfg.hasFlow(source, sink)
module TestFlow = DataFlow::Make<TestConfig>;
from DataFlow::Node sink, DataFlow::Node source
where TestFlow::hasFlow(source, sink)
select sink, source

View File

@@ -1,21 +1,19 @@
import cpp
import semmle.code.cpp.ir.dataflow.DataFlow
class TestConfig extends DataFlow::Configuration {
TestConfig() { this = "TestConfig" }
override predicate isSource(DataFlow::Node source) {
module TestConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) {
source.asExpr().(FunctionCall).getTarget().getName() = "source"
}
override predicate isSink(DataFlow::Node sink) {
predicate isSink(DataFlow::Node sink) {
exists(FunctionCall call |
call.getTarget().getName() = "sink" and
sink.asExpr() = call.getAnArgument()
)
}
override predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) {
predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) {
// Send all arguments of function-pointer-calls to a function with a
// special name
exists(Call call, Function target, int i |
@@ -27,6 +25,8 @@ class TestConfig extends DataFlow::Configuration {
}
}
from DataFlow::Node sink, DataFlow::Node source, TestConfig cfg
where cfg.hasFlow(source, sink)
module TestFlow = DataFlow::Make<TestConfig>;
from DataFlow::Node sink, DataFlow::Node source
where TestFlow::hasFlow(source, sink)
select sink, source

View File

@@ -1,14 +1,14 @@
import cpp
import semmle.code.cpp.ir.dataflow.DataFlow
class Cfg extends DataFlow::Configuration {
Cfg() { this = "from0::Cfg" }
module Cfg implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source.asExpr().getValue() = "0" }
override predicate isSource(DataFlow::Node source) { source.asExpr().getValue() = "0" }
override predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof VariableAccess }
predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof VariableAccess }
}
from Cfg cfg, Expr sink
where cfg.hasFlowToExpr(sink)
module Flow = DataFlow::Make<Cfg>;
from Expr sink
where Flow::hasFlowToExpr(sink)
select sink