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