mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
C++: Update some dataflow tests to use DataFlow::ConfigSig
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user