Skip to content

Commit e2a66bf

Browse files
committed
add model for xml-js
1 parent 73f7cd1 commit e2a66bf

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

javascript/ql/src/semmle/javascript/frameworks/XmlParsers.qll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,27 @@ module XML {
226226
}
227227
}
228228

229+
/**
230+
* An invocation of `xml-js`.
231+
*/
232+
private class XmlJSInvocation extends XML::ParserInvocation {
233+
XmlJSInvocation() {
234+
this =
235+
js::DataFlow::moduleMember("xml-js", ["xml2json", "xml2js", "json2xml", "js2xml"])
236+
.getACall()
237+
.asExpr()
238+
}
239+
240+
override js::Expr getSourceArgument() { result = getArgument(0) }
241+
242+
override predicate resolvesEntities(XML::EntityKind kind) {
243+
// xml-js does not expand custom entities.
244+
none()
245+
}
246+
247+
override js::DataFlow::Node getAResult() { result.asExpr() = this }
248+
}
249+
229250
private class XMLParserTaintStep extends js::TaintTracking::AdditionalTaintStep {
230251
XML::ParserInvocation parser;
231252

javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,4 @@ typeInferenceMismatch
148148
| xml.js:5:18:5:25 | source() | xml.js:8:14:8:17 | text |
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 |
151+
| xml.js:26:27:26:34 | source() | xml.js:26:10:26:39 | convert ... (), {}) |

javascript/ql/test/library-tests/TaintTracking/xml.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@
2222

2323
parser.write(source()).close();
2424

25+
var convert = require('xml-js');
26+
sink(convert.xml2json(source(), {})); // NOT OK
27+
2528
})();

0 commit comments

Comments
 (0)