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 {
247
247
override js:: DataFlow:: Node getAResult ( ) { result .asExpr ( ) = this }
248
248
}
249
249
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
+
250
279
private class XMLParserTaintStep extends js:: TaintTracking:: AdditionalTaintStep {
251
280
XML:: ParserInvocation parser ;
252
281
Original file line number Diff line number Diff line change @@ -149,3 +149,4 @@ typeInferenceMismatch
149
149
| xml.js:12:17:12:24 | source() | xml.js:13:14:13:19 | result |
150
150
| xml.js:23:18:23:25 | source() | xml.js:20:14:20:17 | attr |
151
151
| 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 25
25
var convert = require ( 'xml-js' ) ;
26
26
sink ( convert . xml2json ( source ( ) , { } ) ) ; // NOT OK
27
27
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
+
28
37
} ) ( ) ;
You can’t perform that action at this time.
0 commit comments