Skip to content

Commit 322c731

Browse files
committed
Attempt at AttributeDefinition to generalise Angular Renderer2 support
1 parent 6fb2013 commit 322c731

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,3 +1032,37 @@ private class BindCall extends DataFlow::PartialInvokeNode::Range, DataFlow::Cal
10321032
result = this.getArgument(0)
10331033
}
10341034
}
1035+
1036+
/**
1037+
* A DOM attribute write, using the AngularJS Renderer2 API: a call to `Renderer2.setProperty`.
1038+
*/
1039+
private class AngularRenderer2AttributeDefinition extends DOM::AttributeDefinition {
1040+
DataFlow::Node propertyNode;
1041+
DataFlow::Node valueNode;
1042+
DataFlow::Node elementNode;
1043+
1044+
AngularRenderer2AttributeDefinition() {
1045+
exists(API::CallNode setProperty |
1046+
setProperty =
1047+
API::moduleImport("@angular/core")
1048+
.getMember("Renderer2")
1049+
.getInstance()
1050+
.getMember("setProperty")
1051+
.getACall() and
1052+
elementNode = setProperty.getArgument(0) and
1053+
propertyNode = setProperty.getArgument(1) and
1054+
valueNode = setProperty.getArgument(2) and
1055+
this = setProperty.asExpr()
1056+
)
1057+
}
1058+
1059+
override string getName() { result = propertyNode.getStringValue() }
1060+
1061+
// override DOM::ElementDefinition getElement() { /* TODO */ }
1062+
1063+
DataFlow::Node getElementNode() { result = elementNode }
1064+
1065+
override DataFlow::Node getValueNode() { result = valueNode }
1066+
1067+
//override predicate mayHaveTemplateValue() { /* TODO */ }
1068+
}

0 commit comments

Comments
 (0)