@@ -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