@@ -112,6 +112,16 @@ class MicrosoftAspNetCoreComponentsComponent extends Class {
112
112
}
113
113
}
114
114
115
+ /**
116
+ * The `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::AddComponentParameter` method.
117
+ */
118
+ private class MicrosoftAspNetCoreComponentsAddComponentParameterMethod extends Method {
119
+ MicrosoftAspNetCoreComponentsAddComponentParameterMethod ( ) {
120
+ this .hasFullyQualifiedName ( "Microsoft.AspNetCore.Components.Rendering" , "RenderTreeBuilder" ,
121
+ "AddComponentParameter" )
122
+ }
123
+ }
124
+
115
125
private module Sources {
116
126
private import semmle.code.csharp.security.dataflow.flowsources.Remote
117
127
@@ -133,3 +143,42 @@ private module Sources {
133
143
override string getSourceType ( ) { result = "ASP.NET Core component route parameter" }
134
144
}
135
145
}
146
+
147
+ private module JumpNodes {
148
+ /**
149
+ * A call to `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::AddComponentParameter` which
150
+ * sets the value of a parameter.
151
+ */
152
+ private class ParameterPassingCall extends Call {
153
+ ParameterPassingCall ( ) {
154
+ this .getTarget ( ) instanceof MicrosoftAspNetCoreComponentsAddComponentParameterMethod
155
+ }
156
+
157
+ /**
158
+ * Gets the property whose value is being set.
159
+ */
160
+ Property getParameterProperty ( ) {
161
+ result .getAnAttribute ( ) instanceof MicrosoftAspNetCoreComponentsParameterAttribute and
162
+ exists ( NameOfExpr ne | ne = this .getArgument ( 1 ) |
163
+ result .getAnAccess ( ) = ne .getAccess ( ) .( MemberAccess )
164
+ )
165
+ }
166
+
167
+ /**
168
+ * Gets the value being set.
169
+ */
170
+ Expr getParameterValue ( ) { result = this .getArgument ( 2 ) }
171
+ }
172
+
173
+ private class ComponentParameterJump extends DataFlow:: NonLocalJumpNode {
174
+ ParameterPassingCall call ;
175
+
176
+ ComponentParameterJump ( ) { this .asExpr ( ) = call .getParameterValue ( ) }
177
+
178
+ override DataFlow:: Node getAJumpSuccessor ( boolean preservesValue ) {
179
+ preservesValue = false and
180
+ result .asExpr ( ) = call .getParameterProperty ( ) .getAnAccess ( )
181
+ }
182
+ }
183
+ }
184
+
0 commit comments