Skip to content

Commit bd7e20d

Browse files
committed
Shared: Cache the sourceBoundedFastTC structure instead of the resulting materialized relation.
1 parent eae9a6f commit bd7e20d

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ module TypeTracking<LocationSig Location, TypeTrackingInput<Location> I> {
7070

7171
private class ContentOption = ContentOption::Option;
7272

73+
private predicate isLocalSourceNode(LocalSourceNode n) {
74+
not nonStandardFlowsTo(_, _) and exists(n)
75+
}
76+
7377
cached
7478
private module Cached {
7579
cached
@@ -249,21 +253,9 @@ module TypeTracking<LocationSig Location, TypeTrackingInput<Location> I> {
249253
returnStep(nodeFrom, nodeTo) and summary = ReturnStep()
250254
}
251255

252-
private predicate isLocalSourceNode(LocalSourceNode n) {
253-
not nonStandardFlowsTo(_, _) and exists(n)
254-
}
255-
256-
private predicate simpleLocalSmallStepPlus(Node localSource, Node dst) =
257-
sourceBoundedFastTC(simpleLocalSmallStep/2, isLocalSourceNode/1)(localSource, dst)
258-
259256
cached
260-
predicate standardFlowsTo(Node localSource, Node dst) {
261-
// explicit type check in base case to avoid repeated type tests in recursive case
262-
isLocalSourceNode(localSource) and
263-
dst = localSource
264-
or
265-
simpleLocalSmallStepPlus(localSource, dst)
266-
}
257+
predicate simpleLocalSmallStepPlus(Node localSource, Node dst) =
258+
sourceBoundedFastTC(simpleLocalSmallStep/2, isLocalSourceNode/1)(localSource, dst)
267259

268260
cached
269261
predicate stepNoCall(LocalSourceNode nodeFrom, LocalSourceNode nodeTo, StepSummary summary) {
@@ -276,6 +268,15 @@ module TypeTracking<LocationSig Location, TypeTrackingInput<Location> I> {
276268
}
277269
}
278270

271+
pragma[inline]
272+
predicate standardFlowsTo(Node localSource, Node dst) {
273+
// explicit type check in base case to avoid repeated type tests in recursive case
274+
isLocalSourceNode(localSource) and
275+
dst = localSource
276+
or
277+
simpleLocalSmallStepPlus(localSource, dst)
278+
}
279+
279280
import Cached
280281

281282
/**

0 commit comments

Comments
 (0)