Skip to content

Commit 384df88

Browse files
authored
Merge pull request github#3359 from erik-krogh/MayHavePropName
Approved by esbena
2 parents 5c9fb23 + 1ad64bc commit 384df88

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,14 @@ module DataFlow {
536536
*/
537537
abstract Expr getPropertyNameExpr();
538538

539+
/**
540+
* Holds if this property reference may access a property named `propName`.
541+
*/
542+
predicate mayHavePropertyName(string propName) {
543+
propName = this.getPropertyName() or
544+
this.getPropertyNameExpr().flow().mayHaveStringValue(propName)
545+
}
546+
539547
/**
540548
* Gets the name of the property being read or written,
541549
* if it can be statically determined.

javascript/ql/src/semmle/javascript/frameworks/jQuery.qll

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ module JQuery {
590590
// Handle basic dynamic method dispatch (e.g. `$element[html ? 'html' : 'text'](content)`)
591591
exists(DataFlow::PropRead read | read = this.getCalleeNode() |
592592
read.getBase().getALocalSource() = [dollar(), objectRef()] and
593-
read.getPropertyNameExpr().flow().mayHaveStringValue(name)
593+
read.mayHavePropertyName(name)
594594
)
595595
or
596596
// Handle contributed JQuery objects that aren't source nodes (usually parameter uses)
@@ -654,10 +654,7 @@ module JQuery {
654654
)
655655
) and
656656
plugin = write.getRhs() and
657-
(
658-
pluginName = write.getPropertyName() or
659-
write.getPropertyNameExpr().flow().mayHaveStringValue(pluginName)
660-
)
657+
write.mayHavePropertyName(pluginName)
661658
)
662659
}
663660

javascript/ql/src/semmle/javascript/security/dataflow/XssThroughDom.qll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,7 @@ module XssThroughDom {
8181
DOMTextSource() {
8282
exists(DataFlow::PropRead read | read = this |
8383
read.getBase().getALocalSource() = DOM::domValueRef() and
84-
exists(string propName | propName = ["innerText", "textContent", "value", "name"] |
85-
read.getPropertyName() = propName or
86-
read.getPropertyNameExpr().flow().mayHaveStringValue(propName)
87-
)
84+
read.mayHavePropertyName(["innerText", "textContent", "value", "name"])
8885
)
8986
or
9087
exists(DataFlow::MethodCallNode mcn | mcn = this |

0 commit comments

Comments
 (0)