Skip to content

Commit 1be326a

Browse files
committed
add a CopyStep type-tracking step, for loadStoreSteps that loads and stores the same property
1 parent 9fc8ed1 commit 1be326a

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

javascript/ql/src/semmle/javascript/Collections.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ module CollectionsTypeTracking {
8787
summary = StoreStep(field) and
8888
step.store(pred, result, field)
8989
or
90+
summary = CopyStep(field) and
91+
step.loadStore(pred, result, field)
92+
or
9093
exists(string toField | summary = LoadStoreStep(field, toField) |
91-
field = toField and
92-
step.loadStore(pred, result, field)
93-
or
9494
step.loadStore(pred, result, field, toField)
9595
)
9696
)

javascript/ql/src/semmle/javascript/Promises.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ module PromiseTypeTracking {
176176
summary = StoreStep(field) and
177177
step.store(pred, result, field)
178178
or
179-
summary = LoadStoreStep(field, field) and
179+
summary = CopyStep(field) and
180180
step.loadStore(pred, result, field)
181181
)
182182
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class TypeTracker extends TTypeTracker {
5757
result = MkTypeTracker(hasCall, toProp)
5858
)
5959
or
60+
step = CopyStep(prop) and result = this
61+
or
6062
step = CallStep() and result = MkTypeTracker(true, prop)
6163
or
6264
step = ReturnStep() and hasCall = false and result = this
@@ -219,6 +221,8 @@ class TypeBackTracker extends TTypeBackTracker {
219221
result = MkTypeBackTracker(hasReturn, fromProp)
220222
)
221223
or
224+
step = CopyStep(prop) and result = this
225+
or
222226
step = CallStep() and hasReturn = false and result = this
223227
or
224228
step = ReturnStep() and result = MkTypeBackTracker(true, prop)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ newtype TStepSummary =
4040
ReturnStep() or
4141
StoreStep(PropertyName prop) or
4242
LoadStep(PropertyName prop) or
43+
CopyStep(PropertyName prop) or
4344
LoadStoreStep(PropertyName fromProp, PropertyName toProp) {
44-
fromProp = toProp
45-
or
4645
exists(TypeTrackingPseudoProperty prop | fromProp = prop and toProp = prop.getLoadStoreToProp())
4746
}
4847

@@ -64,6 +63,8 @@ class StepSummary extends TStepSummary {
6463
or
6564
exists(string prop | this = LoadStep(prop) | result = "load " + prop)
6665
or
66+
exists(string prop | this = CopyStep(prop) | result = "copy " + prop)
67+
or
6768
exists(string fromProp, string toProp | this = LoadStoreStep(fromProp, toProp) |
6869
result = "copy " + fromProp + " to " + toProp
6970
)

0 commit comments

Comments
 (0)