Skip to content

Commit 0b12d91

Browse files
committed
Python: Port xml.sax tests
1 parent 5fb4c4d commit 0b12d91

File tree

2 files changed

+47
-104
lines changed
  • python/ql/test/experimental

2 files changed

+47
-104
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from io import StringIO
2+
import xml.sax
3+
4+
x = "some xml"
5+
6+
class MainHandler(xml.sax.ContentHandler):
7+
def __init__(self):
8+
self._result = []
9+
10+
def characters(self, data):
11+
self._result.append(data)
12+
13+
def parse(self, f):
14+
xml.sax.parse(f, self) # $ MISSING: input=f vuln='Billion Laughs' vuln='Quadratic Blowup'
15+
self._result
16+
17+
MainHandler().parse(StringIO(x))
18+
19+
parser = xml.sax.make_parser()
20+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup'
21+
22+
# You can make it vuln to both XXE and DTD retrieval by setting this flag
23+
# see https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges
24+
parser = xml.sax.make_parser()
25+
parser.setFeature(xml.sax.handler.feature_external_ges, True)
26+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE'
27+
28+
parser = xml.sax.make_parser()
29+
parser.setFeature(xml.sax.handler.feature_external_ges, False)
30+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup'
31+
32+
# Forward Type Tracking test
33+
34+
def func(cond):
35+
parser = xml.sax.make_parser()
36+
if cond:
37+
parser.setFeature(xml.sax.handler.feature_external_ges, True)
38+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE'
39+
else:
40+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup'
41+
42+
# make it vuln, then making it safe
43+
# a bit of an edge-case, but is nice to be able to handle.
44+
parser = xml.sax.make_parser()
45+
parser.setFeature(xml.sax.handler.feature_external_ges, True)
46+
parser.setFeature(xml.sax.handler.feature_external_ges, False)
47+
parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup'

python/ql/test/experimental/query-tests/Security/CWE-611/xml_sax.py

Lines changed: 0 additions & 104 deletions
This file was deleted.

0 commit comments

Comments
 (0)