Skip to content

Commit 2974c49

Browse files
committed
introduce and use isAPropertyWrite
1 parent 8f6721e commit 2974c49

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

javascript/ql/src/Declarations/DeadStoreOfProperty.ql

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ predicate postDominatedPropWrite(
6161
int getRank(ReachableBasicBlock bb, ControlFlowNode ref, string name) {
6262
ref =
6363
rank[result](ControlFlowNode e |
64-
exists(DataFlow::PropWrite write |
65-
write.getPropertyName() = name and
66-
e = write.getWriteNode() and
67-
unambiguousPropWrite(write)
68-
)
69-
or
64+
isAPropertyWrite(e, name) or
7065
isAPropertyRead(e, name)
7166
|
7267
e order by any(int i | e = bb.getNode(i))
@@ -80,6 +75,13 @@ predicate isAPropertyRead(Expr e, string name) {
8075
exists(DataFlow::PropRead read | read.asExpr() = e and read.getPropertyName() = name)
8176
}
8277

78+
/**
79+
* Holds if `e` is a property write of a property `name`.
80+
*/
81+
predicate isAPropertyWrite(ControlFlowNode e, string name) {
82+
exists(DataFlow::PropWrite write | write.getWriteNode() = e and write.getPropertyName() = name) // TODO: umambi?
83+
}
84+
8385
/**
8486
* Holds if `e` may access a property named `name`.
8587
*/
@@ -218,12 +220,11 @@ ControlFlowNode getANodeWithNoPropAccessBetweenInsideBlock(string name, DataFlow
218220
// stop at reads of `name` and at impure expressions (except writes to `name`)
219221
not (
220222
maybeAccessesProperty(result, name) and
221-
not result = any(DataFlow::PropWrite w | w.getPropertyName() = name).getWriteNode()
223+
not isAPropertyWrite(result, name)
222224
) and
223225
// stop at the first write to `name` that comes after `write`.
224226
(
225-
not result.getAPredecessor() =
226-
any(DataFlow::PropWrite w | w.getPropertyName() = name).getWriteNode()
227+
not isAPropertyWrite(result.getAPredecessor(), name)
227228
or
228229
result.getAPredecessor() = write.getWriteNode()
229230
)

0 commit comments

Comments
 (0)