mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
JS: Make PropWrite not depend on SourceNode
This commit is contained in:
@@ -647,25 +647,24 @@ module DataFlow {
|
||||
* writes to the corresponding property.
|
||||
*/
|
||||
private class ObjectDefinePropertyAsPropWrite extends PropWrite, ValueNode {
|
||||
CallToObjectDefineProperty odp;
|
||||
override MethodCallExpr astNode;
|
||||
|
||||
ObjectDefinePropertyAsPropWrite() { odp = this }
|
||||
|
||||
override Node getBase() { result = odp.getBaseObject() }
|
||||
|
||||
override Expr getPropertyNameExpr() { result = odp.getArgument(1).asExpr() }
|
||||
|
||||
override string getPropertyName() { result = odp.getPropertyName() }
|
||||
|
||||
override Node getRhs() {
|
||||
// not using `CallToObjectDefineProperty::getAPropertyAttribute` for performance reasons
|
||||
exists(ObjectLiteralNode propdesc |
|
||||
propdesc.flowsTo(odp.getPropertyDescriptor()) and
|
||||
propdesc.hasPropertyWrite("value", result)
|
||||
)
|
||||
ObjectDefinePropertyAsPropWrite() {
|
||||
astNode.getReceiver().(GlobalVarAccess).getName() = "Object" and
|
||||
astNode.getMethodName() = "defineProperty"
|
||||
}
|
||||
|
||||
override ControlFlowNode getWriteNode() { result = odp.getAstNode() }
|
||||
override Node getBase() { result = astNode.getArgument(0).flow() }
|
||||
|
||||
override Expr getPropertyNameExpr() { result = astNode.getArgument(1) }
|
||||
|
||||
override string getPropertyName() { result = astNode.getArgument(1).getStringValue() }
|
||||
|
||||
override Node getRhs() {
|
||||
result = astNode.getArgument(2).(ObjectExpr).getPropertyByName("value").getInit().flow()
|
||||
}
|
||||
|
||||
override ControlFlowNode getWriteNode() { result = astNode }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user