Skip to content

Commit e843b02

Browse files
fix issue404 by more strict junitxml escape
1 parent 305cbec commit e843b02

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Unreleased
2+
-----------------------------------
3+
4+
- fix issue404 by always using the binary xml escape in the junitxml plugin
5+
16
2.5.0
27
-----------------------------------
38

_pytest/junitxml.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,36 +130,36 @@ def append_failure(self, report):
130130
self.skipped += 1
131131
else:
132132
fail = Junit.failure(message="test failure")
133-
fail.append(unicode(report.longrepr))
133+
fail.append(bin_xml_escape(report.longrepr))
134134
self.append(fail)
135135
self.failed += 1
136136
self._write_captured_output(report)
137137

138138
def append_collect_failure(self, report):
139139
#msg = str(report.longrepr.reprtraceback.extraline)
140-
self.append(Junit.failure(unicode(report.longrepr),
140+
self.append(Junit.failure(bin_xml_escape(report.longrepr),
141141
message="collection failure"))
142142
self.errors += 1
143143

144144
def append_collect_skipped(self, report):
145145
#msg = str(report.longrepr.reprtraceback.extraline)
146-
self.append(Junit.skipped(unicode(report.longrepr),
146+
self.append(Junit.skipped(bin_xml_escape(report.longrepr),
147147
message="collection skipped"))
148148
self.skipped += 1
149149

150150
def append_error(self, report):
151-
self.append(Junit.error(unicode(report.longrepr),
151+
self.append(Junit.error(bin_xml_escape(report.longrepr),
152152
message="test setup failure"))
153153
self.errors += 1
154154

155155
def append_skipped(self, report):
156156
if hasattr(report, "wasxfail"):
157-
self.append(Junit.skipped(unicode(report.wasxfail),
157+
self.append(Junit.skipped(bin_xml_escape(report.wasxfail),
158158
message="expected test failure"))
159159
else:
160160
filename, lineno, skipreason = report.longrepr
161161
if skipreason.startswith("Skipped: "):
162-
skipreason = skipreason[9:]
162+
skipreason = bin_xml_escape(skipreason[9:])
163163
self.append(
164164
Junit.skipped("%s:%s: %s" % report.longrepr,
165165
type="pytest.skip",
@@ -193,7 +193,7 @@ def pytest_collectreport(self, report):
193193

194194
def pytest_internalerror(self, excrepr):
195195
self.errors += 1
196-
data = py.xml.escape(excrepr)
196+
data = bin_xml_escape(excrepr)
197197
self.tests.append(
198198
Junit.testcase(
199199
Junit.error(data, message="internal error"),

testing/test_junitxml.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,19 @@ def test_hello():
284284
if not sys.platform.startswith("java"):
285285
assert "hx" in fnode.toxml()
286286

287+
def test_assertion_binchars(self, testdir):
288+
"""this test did fail when the escaping wasnt strict"""
289+
testdir.makepyfile("""
290+
291+
M1 = '\x01\x02\x03\x04'
292+
M2 = '\x01\x02\x03\x05'
293+
294+
def test_str_compare():
295+
assert M1 == M2
296+
""")
297+
result, dom = runandparse(testdir)
298+
print dom.toxml()
299+
287300
def test_pass_captures_stdout(self, testdir):
288301
testdir.makepyfile("""
289302
def test_pass():
@@ -392,7 +405,6 @@ def test_print_nullbyte():
392405
text = xmlf.read()
393406
assert '#x0' in text
394407

395-
396408
def test_invalid_xml_escape():
397409
# Test some more invalid xml chars, the full range should be
398410
# tested really but let's just thest the edges of the ranges

0 commit comments

Comments
 (0)