Skip to content

Commit ec64572

Browse files
authored
Bump codeql submodule
Syncs up the shared type tracking implementation with Python.
1 parent 42c06bf commit ec64572

3 files changed

Lines changed: 16 additions & 16 deletions

File tree

codeql

Submodule codeql updated 1803 files

ql/src/codeql_ruby/typetracking/TypeTracker.qll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private module Cached {
5959
* Steps contained in this predicate should _not_ depend on the call graph.
6060
*/
6161
cached
62-
predicate stepNoCall(LocalSourceNode nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
62+
predicate stepNoCall(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
6363
exists(Node mid | nodeFrom.flowsTo(mid) and smallstepNoCall(mid, nodeTo, summary))
6464
}
6565

@@ -68,7 +68,7 @@ private module Cached {
6868
* inter-procedural step from `nodeFrom` to `nodeTo`.
6969
*/
7070
cached
71-
predicate stepCall(LocalSourceNode nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
71+
predicate stepCall(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
7272
exists(Node mid | nodeFrom.flowsTo(mid) and smallstepCall(mid, nodeTo, summary))
7373
}
7474
}
@@ -96,7 +96,7 @@ class StepSummary extends TStepSummary {
9696
}
9797

9898
pragma[noinline]
99-
private predicate smallstepNoCall(Node nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
99+
private predicate smallstepNoCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
100100
jumpStep(nodeFrom, nodeTo) and
101101
summary = LevelStep()
102102
or
@@ -109,7 +109,7 @@ private predicate smallstepNoCall(Node nodeFrom, LocalSourceNode nodeTo, StepSum
109109
}
110110

111111
pragma[noinline]
112-
private predicate smallstepCall(Node nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
112+
private predicate smallstepCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
113113
callStep(nodeFrom, nodeTo) and summary = CallStep()
114114
or
115115
returnStep(nodeFrom, nodeTo) and
@@ -129,7 +129,7 @@ module StepSummary {
129129
* call graph.
130130
*/
131131
pragma[inline]
132-
predicate step(LocalSourceNode nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
132+
predicate step(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
133133
stepNoCall(nodeFrom, nodeTo, summary)
134134
or
135135
stepCall(nodeFrom, nodeTo, summary)
@@ -143,7 +143,7 @@ module StepSummary {
143143
* type-preserving steps.
144144
*/
145145
pragma[inline]
146-
predicate smallstep(Node nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
146+
predicate smallstep(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) {
147147
smallstepNoCall(nodeFrom, nodeTo, summary)
148148
or
149149
smallstepCall(nodeFrom, nodeTo, summary)
@@ -174,7 +174,7 @@ module StepSummary {
174174
* function. This means we will track the fact that `x.attr` can have the type of `y` into the
175175
* assignment to `z` inside `bar`, even though this attribute write happens _after_ `bar` is called.
176176
*/
177-
predicate localSourceStoreStep(Node nodeFrom, LocalSourceNode nodeTo, string content) {
177+
predicate localSourceStoreStep(Node nodeFrom, TypeTrackingNode nodeTo, string content) {
178178
exists(Node obj | nodeTo.flowsTo(obj) and basicStoreStep(nodeFrom, obj, content))
179179
}
180180
}
@@ -192,7 +192,7 @@ private newtype TTypeTracker = MkTypeTracker(Boolean hasCall, OptionalContentNam
192192
* It is recommended that all uses of this type are written in the following form,
193193
* for tracking some type `myType`:
194194
* ```ql
195-
* DataFlow::LocalSourceNode myType(DataFlow::TypeTracker t) {
195+
* DataFlow::TypeTrackingNode myType(DataFlow::TypeTracker t) {
196196
* t.start() and
197197
* result = < source of myType >
198198
* or
@@ -275,7 +275,7 @@ class TypeTracker extends TTypeTracker {
275275
* heap and/or inter-procedural step from `nodeFrom` to `nodeTo`.
276276
*/
277277
pragma[inline]
278-
TypeTracker step(LocalSourceNode nodeFrom, LocalSourceNode nodeTo) {
278+
TypeTracker step(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo) {
279279
exists(StepSummary summary |
280280
StepSummary::step(nodeFrom, pragma[only_bind_out](nodeTo), pragma[only_bind_into](summary)) and
281281
result = this.append(pragma[only_bind_into](summary))
@@ -342,7 +342,7 @@ private newtype TTypeBackTracker = MkTypeBackTracker(Boolean hasReturn, Optional
342342
* for back-tracking some callback type `myCallback`:
343343
*
344344
* ```ql
345-
* DataFlow::LocalSourceNode myCallback(DataFlow::TypeBackTracker t) {
345+
* DataFlow::TypeTrackingNode myCallback(DataFlow::TypeBackTracker t) {
346346
* t.start() and
347347
* result = (< some API call >).getArgument(< n >).getALocalSource()
348348
* or
@@ -351,7 +351,7 @@ private newtype TTypeBackTracker = MkTypeBackTracker(Boolean hasReturn, Optional
351351
* )
352352
* }
353353
*
354-
* DataFlow::LocalSourceNode myCallback() { result = myCallback(DataFlow::TypeBackTracker::end()) }
354+
* DataFlow::TypeTrackingNode myCallback() { result = myCallback(DataFlow::TypeBackTracker::end()) }
355355
* ```
356356
*
357357
* Instead of `result = myCallback(t2).backtrack(t2, t)`, you can also use the equivalent
@@ -418,7 +418,7 @@ class TypeBackTracker extends TTypeBackTracker {
418418
* heap and/or inter-procedural step from `nodeTo` to `nodeFrom`.
419419
*/
420420
pragma[inline]
421-
TypeBackTracker step(LocalSourceNode nodeFrom, LocalSourceNode nodeTo) {
421+
TypeBackTracker step(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo) {
422422
exists(StepSummary summary |
423423
StepSummary::step(pragma[only_bind_out](nodeFrom), nodeTo, pragma[only_bind_into](summary)) and
424424
this = result.prepend(pragma[only_bind_into](summary))
@@ -431,7 +431,7 @@ class TypeBackTracker extends TTypeBackTracker {
431431
*
432432
* Unlike `TypeBackTracker::step`, this predicate exposes all edges
433433
* in the flowgraph, and not just the edges between
434-
* `LocalSourceNode`s. It may therefore be less performant.
434+
* `TypeTrackingNode`s. It may therefore be less performant.
435435
*
436436
* Type tracking predicates using small steps typically take the following form:
437437
* ```ql

ql/src/codeql_ruby/typetracking/TypeTrackerSpecific.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ private import codeql_ruby.controlflow.CfgNodes
88

99
class Node = DataFlowPublic::Node;
1010

11-
class LocalSourceNode = DataFlowPublic::LocalSourceNode;
11+
class TypeTrackingNode = DataFlowPublic::LocalSourceNode;
1212

1313
predicate simpleLocalFlowStep = DataFlowPrivate::simpleLocalFlowStep/2;
1414

@@ -70,7 +70,7 @@ predicate returnStep(DataFlowPrivate::ReturnNode nodeFrom, Node nodeTo) {
7070
* to `z` inside `bar`, even though this content write happens _after_ `bar` is
7171
* called.
7272
*/
73-
predicate basicStoreStep(Node nodeFrom, LocalSourceNode nodeTo, string content) {
73+
predicate basicStoreStep(Node nodeFrom, DataFlowPublic::LocalSourceNode nodeTo, string content) {
7474
// TODO: support SetterMethodCall inside TuplePattern
7575
exists(ExprNodes::MethodCallCfgNode call |
7676
content = getSetterCallAttributeName(call.getExpr()) and

0 commit comments

Comments
 (0)