Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 70b3eec

Browse files
committed
Python: Merge xml.etree.ElementTree models
I forgot about the existing ones when I promoted it
1 parent db43d04 commit 70b3eec

1 file changed

Lines changed: 62 additions & 65 deletions

File tree

python/ql/lib/semmle/python/frameworks/Stdlib.qll

Lines changed: 62 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,70 +2835,6 @@ private module StdlibPrivate {
28352835
override string getKind() { result = Escaping::getRegexKind() }
28362836
}
28372837

2838-
// ---------------------------------------------------------------------------
2839-
// xml.etree.ElementTree
2840-
// ---------------------------------------------------------------------------
2841-
/**
2842-
* An instance of `xml.etree.ElementTree.ElementTree`.
2843-
*
2844-
* See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree
2845-
*/
2846-
private API::Node elementTreeInstance() {
2847-
//parse to a tree
2848-
result =
2849-
API::moduleImport("xml")
2850-
.getMember("etree")
2851-
.getMember("ElementTree")
2852-
.getMember("parse")
2853-
.getReturn()
2854-
or
2855-
// construct a tree without parsing
2856-
result =
2857-
API::moduleImport("xml")
2858-
.getMember("etree")
2859-
.getMember("ElementTree")
2860-
.getMember("ElementTree")
2861-
.getReturn()
2862-
}
2863-
2864-
/**
2865-
* An instance of `xml.etree.ElementTree.Element`.
2866-
*
2867-
* See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element
2868-
*/
2869-
private API::Node elementInstance() {
2870-
// parse or go to the root of a tree
2871-
result = elementTreeInstance().getMember(["parse", "getroot"]).getReturn()
2872-
or
2873-
// parse directly to an element
2874-
result =
2875-
API::moduleImport("xml")
2876-
.getMember("etree")
2877-
.getMember("ElementTree")
2878-
.getMember(["fromstring", "fromstringlist", "XML"])
2879-
.getReturn()
2880-
}
2881-
2882-
/**
2883-
* A call to a find method on a tree or an element will execute an XPath expression.
2884-
*/
2885-
private class ElementTreeFindCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode {
2886-
string methodName;
2887-
2888-
ElementTreeFindCall() {
2889-
methodName in ["find", "findall", "findtext"] and
2890-
(
2891-
this = elementTreeInstance().getMember(methodName).getACall()
2892-
or
2893-
this = elementInstance().getMember(methodName).getACall()
2894-
)
2895-
}
2896-
2897-
override DataFlow::Node getXPath() { result in [this.getArg(0), this.getArgByName("match")] }
2898-
2899-
override string getName() { result = "xml.etree" }
2900-
}
2901-
29022838
// ---------------------------------------------------------------------------
29032839
// urllib
29042840
// ---------------------------------------------------------------------------
@@ -3176,8 +3112,69 @@ private module StdlibPrivate {
31763112
}
31773113

31783114
// ---------------------------------------------------------------------------
3179-
// xml.etree
3115+
// xml.etree.ElementTree
31803116
// ---------------------------------------------------------------------------
3117+
/**
3118+
* An instance of `xml.etree.ElementTree.ElementTree`.
3119+
*
3120+
* See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree
3121+
*/
3122+
private API::Node elementTreeInstance() {
3123+
//parse to a tree
3124+
result =
3125+
API::moduleImport("xml")
3126+
.getMember("etree")
3127+
.getMember("ElementTree")
3128+
.getMember("parse")
3129+
.getReturn()
3130+
or
3131+
// construct a tree without parsing
3132+
result =
3133+
API::moduleImport("xml")
3134+
.getMember("etree")
3135+
.getMember("ElementTree")
3136+
.getMember("ElementTree")
3137+
.getReturn()
3138+
}
3139+
3140+
/**
3141+
* An instance of `xml.etree.ElementTree.Element`.
3142+
*
3143+
* See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element
3144+
*/
3145+
private API::Node elementInstance() {
3146+
// parse or go to the root of a tree
3147+
result = elementTreeInstance().getMember(["parse", "getroot"]).getReturn()
3148+
or
3149+
// parse directly to an element
3150+
result =
3151+
API::moduleImport("xml")
3152+
.getMember("etree")
3153+
.getMember("ElementTree")
3154+
.getMember(["fromstring", "fromstringlist", "XML"])
3155+
.getReturn()
3156+
}
3157+
3158+
/**
3159+
* A call to a find method on a tree or an element will execute an XPath expression.
3160+
*/
3161+
private class ElementTreeFindCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode {
3162+
string methodName;
3163+
3164+
ElementTreeFindCall() {
3165+
methodName in ["find", "findall", "findtext"] and
3166+
(
3167+
this = elementTreeInstance().getMember(methodName).getACall()
3168+
or
3169+
this = elementInstance().getMember(methodName).getACall()
3170+
)
3171+
}
3172+
3173+
override DataFlow::Node getXPath() { result in [this.getArg(0), this.getArgByName("match")] }
3174+
3175+
override string getName() { result = "xml.etree" }
3176+
}
3177+
31813178
/**
31823179
* Provides models for `xml.etree` parsers
31833180
*

0 commit comments

Comments
 (0)