mirror of
https://github.com/github/codeql.git
synced 2026-06-24 14:17:05 +02:00
Adds the public facade on top of the AstNodeImpl adapter from the previous commit. Re-exposes the same API surface as semmle/python/Flow.qll (ControlFlowNode, CallNode, BasicBlock, NameNode, DefinitionNode, CompareNode, ...), backed by the shared codeql.controlflow.ControlFlowGraph library. - semmle.python.controlflow.internal.Cfg — public facade. - ControlFlow/store-load/* — basic store/load coverage via the facade. The new CFG library is added additively: it has zero callers in lib/ and src/, and the legacy CFG in semmle/python/Flow.qll remains the default. Dataflow, SSA, and production query migration land in follow-up PRs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
42 lines
1.3 KiB
Plaintext
42 lines
1.3 KiB
Plaintext
/**
|
|
* Inline-expectations test for the store/load/delete/parameter
|
|
* classification predicates on the new-CFG facade.
|
|
*
|
|
* Each tag fires when the corresponding predicate (`isLoad`,
|
|
* `isStore`, `isDelete`, `isParameter`, `isAugLoad`, `isAugStore`)
|
|
* holds on the canonical CFG node wrapping a `Py::Name` with the
|
|
* given identifier. Subscript and attribute stores are not covered
|
|
* by these tags — only the `Name`-typed targets/loads they involve.
|
|
*/
|
|
|
|
import python
|
|
import semmle.python.controlflow.internal.Cfg as Cfg
|
|
import utils.test.InlineExpectationsTest
|
|
|
|
module StoreLoadTest implements TestSig {
|
|
string getARelevantTag() { result = ["load", "store", "delete", "param", "augload", "augstore"] }
|
|
|
|
predicate hasActualResult(Location location, string element, string tag, string value) {
|
|
exists(Cfg::NameNode n |
|
|
location = n.getLocation() and
|
|
element = n.toString() and
|
|
value = n.getId() and
|
|
(
|
|
n.isLoad() and not n.isAugLoad() and tag = "load"
|
|
or
|
|
n.isStore() and not n.isAugStore() and tag = "store"
|
|
or
|
|
n.isDelete() and tag = "delete"
|
|
or
|
|
n.isParameter() and tag = "param"
|
|
or
|
|
n.isAugLoad() and tag = "augload"
|
|
or
|
|
n.isAugStore() and tag = "augstore"
|
|
)
|
|
)
|
|
}
|
|
}
|
|
|
|
import MakeTest<StoreLoadTest>
|