Skip to content

Commit b7f424d

Browse files
author
Esben Sparre Andreasen
committed
JS: introduce DataFlow::PropWrite::getWriteNode
1 parent d813a7c commit b7f424d

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,11 @@ module DataFlow {
456456
prop = getPropertyName() and
457457
rhs = getRhs()
458458
}
459+
460+
/**
461+
* Gets the node where the property write happens in the control flow graph.
462+
*/
463+
abstract ControlFlowNode getWriteNode();
459464
}
460465

461466
/**
@@ -481,6 +486,10 @@ module DataFlow {
481486
override Node getRhs() {
482487
result = valueNode(astNode.(LValue).getRhs())
483488
}
489+
490+
override ControlFlowNode getWriteNode() {
491+
result = astNode.(LValue).getDefNode()
492+
}
484493
}
485494

486495
/**
@@ -505,6 +514,10 @@ module DataFlow {
505514
override Node getRhs() {
506515
result = valueNode(prop.(ValueProperty).getInit())
507516
}
517+
518+
override ControlFlowNode getWriteNode() {
519+
result = prop
520+
}
508521
}
509522

510523
/**
@@ -534,6 +547,10 @@ module DataFlow {
534547
propdesc.hasPropertyWrite("value", result)
535548
)
536549
}
550+
551+
override ControlFlowNode getWriteNode() {
552+
result = odp.getAstNode()
553+
}
537554
}
538555

539556
/**
@@ -560,6 +577,10 @@ module DataFlow {
560577
not prop instanceof AccessorMethodDefinition and
561578
result = valueNode(prop.getInit())
562579
}
580+
581+
override ControlFlowNode getWriteNode() {
582+
result = prop
583+
}
563584
}
564585

565586
/**
@@ -584,6 +605,10 @@ module DataFlow {
584605
override Node getRhs() {
585606
result = valueNode(prop.getValue())
586607
}
608+
609+
override ControlFlowNode getWriteNode() {
610+
result = prop
611+
}
587612
}
588613

589614
/**
@@ -835,6 +860,11 @@ module DataFlow {
835860
override Node getBase() {
836861
result = valueNode(arr)
837862
}
863+
864+
override ControlFlowNode getWriteNode() {
865+
result = arr
866+
}
867+
838868
}
839869

840870
/**

0 commit comments

Comments
 (0)