|
1 | 1 | """
|
2 | 2 | Test that we have defused XML.
|
3 |
| -
|
4 |
| -For these tests, the defusing will happen in one or more of the `conftest.py` |
5 |
| -files that runs at pytest startup calls `defuse_xml_libs()`. |
6 |
| -
|
7 |
| -In production, the defusing happens when the LMS or Studio `wsgi.py` files |
8 |
| -call `defuse_xml_libs()`. |
9 | 3 | """
|
10 | 4 |
|
11 | 5 |
|
12 |
| -import defusedxml |
13 | 6 | from lxml import etree
|
14 | 7 |
|
15 | 8 | import pytest
|
16 | 9 |
|
17 | 10 |
|
18 |
| -@pytest.mark.parametrize("attr", ["XML", "fromstring", "parse"]) |
19 |
| -def test_etree_is_defused(attr): |
20 |
| - func = getattr(etree, attr) |
21 |
| - assert "defused" in func.__code__.co_filename |
| 11 | +def test_entities_resolved(): |
| 12 | + xml = '<?xml version="1.0"?><!DOCTYPE mydoc [<!ENTITY hi "Hello">]> <root>&hi;</root>' |
| 13 | + parser = etree.XMLParser(resolve_entities=True) |
| 14 | + tree = etree.fromstring(xml, parser=parser) |
| 15 | + pr = etree.tostring(tree) |
| 16 | + assert pr == b'<root>Hello</root>' |
22 | 17 |
|
23 | 18 |
|
24 | 19 | def test_entities_arent_resolved():
|
25 |
| - # Make sure we have disabled entity resolution. |
26 | 20 | xml = '<?xml version="1.0"?><!DOCTYPE mydoc [<!ENTITY hi "Hello">]> <root>&hi;</root>'
|
27 |
| - parser = etree.XMLParser() |
28 |
| - with pytest.raises(defusedxml.EntitiesForbidden): |
29 |
| - _ = etree.XML(xml, parser=parser) |
| 21 | + parser = etree.XMLParser(resolve_entities=False) |
| 22 | + tree = etree.fromstring(xml, parser=parser) |
| 23 | + pr = etree.tostring(tree) |
| 24 | + assert pr == b'<root>&hi;</root>' |
0 commit comments