github: Update chunk_from_chars() CodeQL query to new data flow API
This commit is contained in:
@@ -10,8 +10,7 @@
|
|||||||
* @precision very-high
|
* @precision very-high
|
||||||
*/
|
*/
|
||||||
import cpp
|
import cpp
|
||||||
import DataFlow::PathGraph
|
import semmle.code.cpp.dataflow.new.DataFlow
|
||||||
import semmle.code.cpp.dataflow.DataFlow
|
|
||||||
|
|
||||||
class ChunkFromChars extends Expr {
|
class ChunkFromChars extends Expr {
|
||||||
ChunkFromChars() {
|
ChunkFromChars() {
|
||||||
@@ -23,29 +22,30 @@ class ChunkFromChars extends Expr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChunkFromCharsUsage extends DataFlow::Configuration {
|
module ChunkFromCharsConfig implements DataFlow::ConfigSig {
|
||||||
ChunkFromCharsUsage() { this = "ChunkFromCharsUsage" }
|
predicate isSource(DataFlow::Node source) {
|
||||||
|
|
||||||
override predicate isSource(DataFlow::Node source) {
|
|
||||||
source.asExpr() instanceof ChunkFromChars
|
source.asExpr() instanceof ChunkFromChars
|
||||||
}
|
}
|
||||||
|
|
||||||
override predicate isSink(DataFlow::Node sink) {
|
predicate isSink(DataFlow::Node sink) {
|
||||||
exists(sink.asExpr())
|
exists(sink.asExpr())
|
||||||
}
|
}
|
||||||
|
|
||||||
override predicate isBarrierOut(DataFlow::Node node) {
|
predicate isBarrierOut(DataFlow::Node node) {
|
||||||
/* don't track beyond function calls */
|
/* don't track beyond function calls */
|
||||||
exists(FunctionCall fc | node.asExpr().getParent*() = fc)
|
exists(FunctionCall fc | node.asExpr().getParent*() = fc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module ChunkFromCharsFlow = DataFlow::Global<ChunkFromCharsConfig>;
|
||||||
|
import ChunkFromCharsFlow::PathGraph
|
||||||
|
|
||||||
BlockStmt enclosingBlock(BlockStmt b) {
|
BlockStmt enclosingBlock(BlockStmt b) {
|
||||||
result = b.getEnclosingBlock()
|
result = b.getEnclosingBlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
from ChunkFromCharsUsage usage, DataFlow::PathNode source, DataFlow::PathNode sink
|
from ChunkFromCharsFlow::PathNode source, ChunkFromCharsFlow::PathNode sink
|
||||||
where
|
where
|
||||||
usage.hasFlowPath(source, sink)
|
ChunkFromCharsFlow::flowPath(source, sink)
|
||||||
and not source.getNode().asExpr().getEnclosingBlock() = enclosingBlock*(sink.getNode().asExpr().getEnclosingBlock())
|
and not source.getNode().asExpr().getEnclosingBlock() = enclosingBlock*(sink.getNode().asExpr().getEnclosingBlock())
|
||||||
select source, source, sink, "Invalid use of chunk_from_chars() result in sibling/parent block."
|
select source, source, sink, "Invalid use of chunk_from_chars() result in sibling/parent block."
|
||||||
|
|||||||
Reference in New Issue
Block a user