mirror of
https://github.com/github/codeql.git
synced 2026-01-04 10:10:20 +01:00
28 lines
784 B
Plaintext
28 lines
784 B
Plaintext
import semmle.code.cpp.pointsto.PointsTo
|
|
|
|
/** Holds if there exists a call to a function that might close the file specified by `e`. */
|
|
predicate closed(Expr e) {
|
|
fcloseCall(_, e) or
|
|
exists(ExprCall c |
|
|
// cautiously assume that any ExprCall could be a call to fclose.
|
|
c.getAnArgument() = e
|
|
)
|
|
}
|
|
|
|
/** An expression for which there exists a function call that might close it. */
|
|
class ClosedExpr extends PointsToExpr {
|
|
ClosedExpr() { closed(this) }
|
|
|
|
override predicate interesting() { closed(this) }
|
|
}
|
|
|
|
/**
|
|
* Holds if `fc` is a call to a function that opens a file that might be closed. For example:
|
|
* ```
|
|
* FILE* f = fopen("file.txt", "r");
|
|
* ...
|
|
* fclose(f);
|
|
* ```
|
|
*/
|
|
predicate fopenCallMayBeClosed(FunctionCall fc) { fopenCall(fc) and anythingPointsTo(fc) }
|