mirror of
https://github.com/github/codeql.git
synced 2025-12-24 12:46:34 +01:00
introduce PropRef#mayHavePropertyName
This commit is contained in:
@@ -537,6 +537,14 @@ module DataFlow {
|
||||
*/
|
||||
abstract Expr getPropertyNameExpr();
|
||||
|
||||
/**
|
||||
* Holds if this property reference may access a property named `propName`.
|
||||
*/
|
||||
predicate mayHavePropertyName(string propName) {
|
||||
propName = this.getPropertyName() or
|
||||
this.getPropertyNameExpr().flow().mayHaveStringValue(propName)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the property being read or written,
|
||||
* if it can be statically determined.
|
||||
|
||||
@@ -552,7 +552,7 @@ module JQuery {
|
||||
// Handle basic dynamic method dispatch (e.g. `$element[html ? 'html' : 'text'](content)`)
|
||||
exists(DataFlow::PropRead read | read = this.getCalleeNode() |
|
||||
read.getBase().getALocalSource() = [dollar(), objectRef()] and
|
||||
read.getPropertyNameExpr().flow().mayHaveStringValue(name)
|
||||
read.mayHavePropertyName(name)
|
||||
)
|
||||
or
|
||||
// Handle contributed JQuery objects that aren't source nodes (usually parameter uses)
|
||||
@@ -616,10 +616,7 @@ module JQuery {
|
||||
)
|
||||
) and
|
||||
plugin = write.getRhs() and
|
||||
(
|
||||
pluginName = write.getPropertyName() or
|
||||
write.getPropertyNameExpr().flow().mayHaveStringValue(pluginName)
|
||||
)
|
||||
write.mayHavePropertyName(pluginName)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -81,10 +81,7 @@ module XssThroughDom {
|
||||
DOMTextSource() {
|
||||
exists(DataFlow::PropRead read | read = this |
|
||||
read.getBase().getALocalSource() = DOM::domValueRef() and
|
||||
exists(string propName | propName = ["innerText", "textContent", "value", "name"] |
|
||||
read.getPropertyName() = propName or
|
||||
read.getPropertyNameExpr().flow().mayHaveStringValue(propName)
|
||||
)
|
||||
read.mayHavePropertyName(["innerText", "textContent", "value", "name"])
|
||||
)
|
||||
or
|
||||
exists(DataFlow::MethodCallNode mcn | mcn = this |
|
||||
|
||||
Reference in New Issue
Block a user