File tree Expand file tree Collapse file tree
javascript/ql/src/semmle/javascript/frameworks Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -161,8 +161,31 @@ module Templating {
161161 }
162162 }
163163
164+ /** Gets an API node that may flow to `succ` through a template instantiation. */
165+ private API:: Node getTemplateInput ( DataFlow:: SourceNode succ ) {
166+ exists ( TemplateInstantiaton inst , API:: Node base , string name |
167+ base .getARhs ( ) = inst .getTemplateParamsNode ( ) and
168+ result = base .getMember ( name ) and
169+ succ = inst .getTemplateFile ( ) .getAPlaceholder ( ) .getInnerTopLevel ( ) .getAVariableUse ( name )
170+ )
171+ or
172+ exists ( string prop , DataFlow:: SourceNode prev |
173+ result = getTemplateInput ( prev ) .getMember ( prop ) and
174+ succ = prev .getAPropertyRead ( prop )
175+ )
176+ }
177+
178+ private class TemplateInputStep extends DataFlow:: SharedFlowStep {
179+ override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
180+ getTemplateInput ( succ ) .getARhs ( ) = pred
181+ }
182+ }
183+
164184 /** A file that can be referenced by a template instantiation. */
165- abstract class TemplateFile extends File { }
185+ abstract class TemplateFile extends File {
186+ /** Gets a placeholder tag in this file. */
187+ final TemplatePlaceholderTag getAPlaceholder ( ) { result .getFile ( ) = this }
188+ }
166189
167190 /** Any HTML file, seen as a possible target for template instantiation. */
168191 private class TemplateFileByExtension extends TemplateFile {
You can’t perform that action at this time.
0 commit comments