Skip to content

Commit 066b400

Browse files
committed
Add lxml.etree.XMLParser missing resolve_entities dangerous case
1 parent 58bc110 commit 066b400

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

  • python/ql/src/experimental/semmle/python/frameworks

python/ql/src/experimental/semmle/python/frameworks/XML.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ private module XML {
9999
/**
100100
* Gets a call to `lxml.etree.XMLParser` or `lxml.etree.get_default_parser` and `mayBeDangerous()`
101101
* identifies whether the argument `no_network` is set to `False` or the arguments `huge_tree`
102-
* or `resolve_entities` are set to True.
102+
* or `resolve_entities` are set to True. Since `resolve_entities` default value is `True`,
103+
* the predicate will also succeed if the argument is not set.
103104
*/
104105
private class LXMLParser extends DataFlow::CallCfgNode, XMLParser::Range {
105106
LXMLParser() { this = lxmlEtree().getMember(["XMLParser", "get_default_parser"]).getACall() }
@@ -110,7 +111,8 @@ private module XML {
110111
not exists(this.getArgByName(_)) or
111112
DataFlow::localFlow(DataFlow::exprNode(any(False falseName)), this.getArgByName("no_network")) or
112113
DataFlow::localFlow(DataFlow::exprNode(any(True trueName)),
113-
this.getArgByName(["huge_tree", "resolve_entities"]))
114+
this.getArgByName(["huge_tree", "resolve_entities"])) or
115+
not exists(this.getArgByName("resolve_entities"))
114116
}
115117
}
116118

0 commit comments

Comments
 (0)