File tree Expand file tree Collapse file tree 3 files changed +39
-0
lines changed
src/semmle/javascript/frameworks
test/library-tests/TaintTracking Expand file tree Collapse file tree 3 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -247,6 +247,35 @@ module XML {
247247 override js:: DataFlow:: Node getAResult ( ) { result .asExpr ( ) = this }
248248 }
249249
250+ /**
251+ * An invocation of `htmlparser2`.
252+ */
253+ private class HtmlParser2Invocation extends XML:: ParserInvocation {
254+ js:: DataFlow:: NewNode parser ;
255+
256+ HtmlParser2Invocation ( ) {
257+ parser = js:: DataFlow:: moduleMember ( "htmlparser2" , "Parser" ) .getAnInstantiation ( ) and
258+ this = parser .getAMemberCall ( "write" ) .asExpr ( )
259+ }
260+
261+ override js:: Expr getSourceArgument ( ) { result = getArgument ( 0 ) }
262+
263+ override predicate resolvesEntities ( XML:: EntityKind kind ) {
264+ // htmlparser2 does not expand entities.
265+ none ( )
266+ }
267+
268+ override js:: DataFlow:: Node getAResult ( ) {
269+ result =
270+ parser
271+ .getArgument ( 0 )
272+ .getALocalSource ( )
273+ .getAPropertySource ( )
274+ .getAFunctionValue ( )
275+ .getAParameter ( )
276+ }
277+ }
278+
250279 private class XMLParserTaintStep extends js:: TaintTracking:: AdditionalTaintStep {
251280 XML:: ParserInvocation parser ;
252281
Original file line number Diff line number Diff line change @@ -149,3 +149,4 @@ typeInferenceMismatch
149149| xml.js:12:17:12:24 | source() | xml.js:13:14:13:19 | result |
150150| xml.js:23:18:23:25 | source() | xml.js:20:14:20:17 | attr |
151151| xml.js:26:27:26:34 | source() | xml.js:26:10:26:39 | convert ... (), {}) |
152+ | xml.js:34:18:34:25 | source() | xml.js:31:18:31:21 | name |
Original file line number Diff line number Diff line change 2525 var convert = require ( 'xml-js' ) ;
2626 sink ( convert . xml2json ( source ( ) , { } ) ) ; // NOT OK
2727
28+ const htmlparser2 = require ( "htmlparser2" ) ;
29+ const parser = new htmlparser2 . Parser ( {
30+ onopentag ( name , attributes ) {
31+ sink ( name ) // NOT OK
32+ }
33+ } ) ;
34+ parser . write ( source ( ) ) ;
35+ parser . end ( ) ;
36+
2837} ) ( ) ;
You can’t perform that action at this time.
0 commit comments