mirror of
https://github.com/github/codeql.git
synced 2025-12-27 14:16:34 +01:00
38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
import cpp
|
|
import DataflowTestCommon as ASTCommon
|
|
import IRDataflowTestCommon as IRCommon
|
|
import semmle.code.cpp.dataflow.DataFlow as ASTDataFlow
|
|
import semmle.code.cpp.ir.dataflow.DataFlow as IRDataFlow
|
|
|
|
predicate astFlow(Location sourceLocation, Location sinkLocation) {
|
|
exists(ASTDataFlow::DataFlow::Node source, ASTDataFlow::DataFlow::Node sink,
|
|
ASTCommon::TestAllocationConfig cfg |
|
|
cfg.hasFlow(source, sink) and
|
|
sourceLocation = source.getLocation() and
|
|
sinkLocation = sink.getLocation()
|
|
)
|
|
}
|
|
|
|
predicate irFlow(Location sourceLocation, Location sinkLocation) {
|
|
exists(IRDataFlow::DataFlow::Node source, IRDataFlow::DataFlow::Node sink,
|
|
IRCommon::TestAllocationConfig cfg |
|
|
cfg.hasFlow(source, sink) and
|
|
sourceLocation = source.getLocation() and
|
|
sinkLocation = sink.getLocation()
|
|
)
|
|
}
|
|
|
|
from Location sourceLocation, Location sinkLocation, string note
|
|
where
|
|
(
|
|
astFlow(sourceLocation, sinkLocation) and
|
|
not irFlow(sourceLocation, sinkLocation) and
|
|
note = "AST only"
|
|
) or
|
|
(
|
|
irFlow(sourceLocation, sinkLocation) and
|
|
not astFlow(sourceLocation, sinkLocation) and
|
|
note = "IR only"
|
|
)
|
|
select sourceLocation.toString(), sinkLocation.toString(), note
|