Skip to content

Commit 9a78d38

Browse files
committed
add a new LoadStoreStep as a StepSummary for TypeTracking
1 parent e7fd97e commit 9a78d38

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private newtype TTypeTracker = MkTypeTracker(Boolean hasCall, OptionalPropertyNa
4444
*/
4545
class TypeTracker extends TTypeTracker {
4646
Boolean hasCall;
47-
string prop;
47+
OptionalPropertyName prop;
4848

4949
TypeTracker() { this = MkTypeTracker(hasCall, prop) }
5050

@@ -53,6 +53,8 @@ class TypeTracker extends TTypeTracker {
5353
TypeTracker append(StepSummary step) {
5454
step = LevelStep() and result = this
5555
or
56+
step = LoadStoreStep(prop) and result = this
57+
or
5658
step = CallStep() and result = MkTypeTracker(true, prop)
5759
or
5860
step = ReturnStep() and hasCall = false and result = this
@@ -211,6 +213,8 @@ class TypeBackTracker extends TTypeBackTracker {
211213
TypeBackTracker prepend(StepSummary step) {
212214
step = LevelStep() and result = this
213215
or
216+
step = LoadStoreStep(prop) and result = this
217+
or
214218
step = CallStep() and hasReturn = false and result = this
215219
or
216220
step = ReturnStep() and result = MkTypeBackTracker(true, prop)

javascript/ql/src/semmle/javascript/dataflow/internal/StepSummary.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ newtype TStepSummary =
3434
CallStep() or
3535
ReturnStep() or
3636
StoreStep(PropertyName prop) or
37-
LoadStep(PropertyName prop)
37+
LoadStep(PropertyName prop) or
38+
LoadStoreStep(PropertyName prop)
3839

3940
/**
4041
* INTERNAL: Use `TypeTracker` or `TypeBackTracker` instead.
@@ -53,6 +54,8 @@ class StepSummary extends TStepSummary {
5354
exists(string prop | this = StoreStep(prop) | result = "store " + prop)
5455
or
5556
exists(string prop | this = LoadStep(prop) | result = "load " + prop)
57+
or
58+
exists(string prop | this = LoadStoreStep(prop) | result = "in " + prop)
5659
}
5760
}
5861

0 commit comments

Comments
 (0)