1+ import lxml .etree as ET
2+
3+ def ensure_tainted (* args ):
4+ pass
5+
6+ TAINTED_STRING = "<a><b></b></a>"
7+ src = TAINTED_STRING
8+
9+ def test ():
10+ ensure_tainted (
11+ src , # $ tainted
12+ ET .fromstring (src ), # $ tainted
13+ ET .XML (src ), # $ tainted
14+ ET .HTML (src ), # $ tainted
15+ ET .fromstringlist ([src ]), # $ tainted
16+ ET .XMLID (src ), # $ tainted
17+ ET .XMLDTD (src ), # $ tainted
18+ )
19+
20+
21+ parser = ET .XmlParser ()
22+ parser .feed (src )
23+ ensure_tainted (parser .close ()), # $ tainted
24+
25+ parser2 = ET .get_default_parser ()
26+ parser .feed (data = src )
27+ ensure_tainted (parser2 .close ()), # $ tainted
28+
29+ elem = ET .XML (src )
30+ ensure_tainted (
31+ elem , # $ tainted
32+ ET .tostring (elem ), # $ tainted
33+ ET .tostringlist (elem ), # $ tainted
34+ elem .attrib , # $ tainted
35+ elem .base , # $ tainted
36+ elem .nsmap , # $ tainted
37+ elem .prefix , # $ tainted
38+ elem .tag , # $ tainted
39+ elem .tail , # $ tainted
40+ elem .text , # $ tainted
41+ elem [0 ], # $ tainted
42+ elem [0 ].text , # $ tainted
43+ elem .cssselect ("b" ), # $ tainted
44+ elem .cssselect ("b" )[0 ].text , # $ tainted
45+ elem .find ("b" ).text , # $ tainted
46+ elem .findall ("b" ), # $ tainted
47+ list (elem .findall ("b" ))[0 ].text , # $ tainted
48+ elem .get ("at" ), # $ tainted
49+ elem .getchildren (), # $ tainted
50+ list (elem .getchildren ())[0 ].text , # $ tainted,
51+ elem .getiterator (), # $ tainted
52+ list (elem .getiterator ())[0 ].text , # $ tainted
53+ elem .getnext ().text , # $ tainted
54+ elem .getparent ().text , # $ tainted
55+ elem .getprevious ().text , # $ tainted
56+ elem .getroottree (), # $ tainted
57+ elem .getroottree ().getroot ().text , # $ tainted
58+ elem .items (), # $ tainted
59+ list (elem .items ())[0 ].text , # $ tainted
60+ elem .iter (), # $ tainted
61+ list (elem .iter ())[0 ].text , # $ tainted
62+ elem .iterancestors (), # $ tainted
63+ list (elem .iterancestors ())[0 ].text , # $ tainted
64+ elem .iterchildren (), # $ tainted
65+ list (elem .iterchildren ())[0 ].text , # $ tainted
66+ elem .iterdecendants (), # $ tainted
67+ list (elem .iterdecendants ())[0 ].text , # $ tainted
68+ elem .iterfind (), # $ tainted
69+ list (elem .iterfind ())[0 ].text , # $ tainted
70+ elem .itersiblings (), # $ tainted
71+ list (elem .itersiblings ())[0 ].text , # $ tainted
72+ elem .itertext (), # $ tainted
73+ list (elem .itertext ())[0 ].text , # $ tainted
74+ elem .keys (), # $ tainted
75+ elem .values (), # $ tainted
76+ elem .xpath ("b" ), # $ tainted
77+ list (elem .xpath ("b" ))[0 ].text , # $ tainted
78+ )
79+
80+ for ch in elem :
81+ ensure_tainted (
82+ ch , # $ tainted
83+ ch .text # $ tainted
84+ )
85+
86+ tree = ET .parse (src )
87+ ensure_tainted (
88+ tree , # $ tainted
89+ tree .getroot ().text , # $ tainted
90+ tree .find ("a" ).text , # $ tainted
91+ tree .findall ("a" ), # $ tainted
92+ list (tree .findall ("a" ))[0 ].text , # $ tainted
93+ tree .getiterator (), # $ tainted
94+ list (tree .getiterator ())[0 ].text , # $ tainted
95+ tree .iter (), # $ tainted
96+ list (tree .iter ())[0 ].text , # $ tainted
97+ tree .iterfind (), # $ tainted
98+ list (tree .iterfind ())[0 ].text , # $ tainted
99+ )
100+
101+
102+
103+ test ()
0 commit comments