Skip to content

Commit b37da7c

Browse files
authored
Merge pull request github#5386 from erik-krogh/cachePrepend
Approved by asgerf
2 parents 40acb95 + fa2e7fd commit b37da7c

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

javascript/ql/src/semmle/javascript/dataflow/TypeTracking.qll

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
private import javascript
1010
private import internal.FlowSteps
1111
private import internal.StepSummary
12+
private import semmle.javascript.internal.CachedStages
1213

1314
private newtype TTypeTracker = MkTypeTracker(Boolean hasCall, OptionalPropertyName prop)
1415

@@ -51,7 +52,9 @@ class TypeTracker extends TTypeTracker {
5152
/** Gets the summary resulting from appending `step` to this type-tracking summary. */
5253
cached
5354
TypeTracker append(StepSummary step) {
54-
step = LevelStep() and result = this
55+
Stages::TypeTracking::ref() and
56+
step = LevelStep() and
57+
result = this
5558
or
5659
exists(string toProp | step = LoadStoreStep(prop, toProp) |
5760
result = MkTypeTracker(hasCall, toProp)
@@ -214,8 +217,11 @@ class TypeBackTracker extends TTypeBackTracker {
214217
TypeBackTracker() { this = MkTypeBackTracker(hasReturn, prop) }
215218

216219
/** Gets the summary resulting from prepending `step` to this type-tracking summary. */
220+
cached
217221
TypeBackTracker prepend(StepSummary step) {
218-
step = LevelStep() and result = this
222+
Stages::TypeTracking::ref() and
223+
step = LevelStep() and
224+
result = this
219225
or
220226
exists(string fromProp | step = LoadStoreStep(fromProp, prop) |
221227
result = MkTypeBackTracker(hasReturn, fromProp)

javascript/ql/src/semmle/javascript/internal/CachedStages.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ module Stages {
181181
PreCallGraphStep::loadStep(_, _, _)
182182
or
183183
basicLoadStep(_, _, _)
184+
or
185+
exists(any(DataFlow::TypeTracker t).append(_))
186+
or
187+
exists(any(DataFlow::TypeBackTracker t).prepend(_))
184188
}
185189
}
186190

0 commit comments

Comments
 (0)