Repository navigation
Expand file tree
/
Copy pathtest_lxml_safe_parameter_defaults.py
More file actions
115 lines (94 loc) · 3.09 KB
/
Copy pathtest_lxml_safe_parameter_defaults.py
File metadata and controls
115 lines (94 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import pytest
from core_codemods.lxml_safe_parser_defaults import LxmlSafeParserDefaults
from tests.codemods.base_codemod_test import BaseSemgrepCodemodTest
each_class = pytest.mark.parametrize(
"klass", ["XMLParser", "ETCompatXMLParser", "XMLTreeBuilder", "XMLPullParser"]
)
class TestLxmlSafeParserDefaults(BaseSemgrepCodemodTest):
codemod = LxmlSafeParserDefaults
def test_name(self):
assert self.codemod.name == "safe-lxml-parser-defaults"
@each_class
def test_import(self, tmpdir, klass):
input_code = f"""import lxml.etree
parser = lxml.etree.{klass}()
var = "hello"
"""
expexted_output = f"""import lxml.etree
parser = lxml.etree.{klass}(resolve_entities=False)
var = "hello"
"""
self.run_and_assert(tmpdir, input_code, expexted_output)
@each_class
def test_from_import(self, tmpdir, klass):
input_code = f"""from lxml.etree import {klass}
parser = {klass}()
var = "hello"
"""
expexted_output = f"""from lxml.etree import {klass}
parser = {klass}(resolve_entities=False)
var = "hello"
"""
self.run_and_assert(tmpdir, input_code, expexted_output)
@each_class
def test_from_import_module(self, tmpdir, klass):
input_code = f"""from lxml import etree
parser = etree.{klass}()
var = "hello"
"""
expexted_output = f"""from lxml import etree
parser = etree.{klass}(resolve_entities=False)
var = "hello"
"""
self.run_and_assert(tmpdir, input_code, expexted_output)
@each_class
def test_import_alias(self, tmpdir, klass):
input_code = f"""from lxml.etree import {klass} as xmlklass
parser = xmlklass()
var = "hello"
"""
expexted_output = f"""from lxml.etree import {klass} as xmlklass
parser = xmlklass(resolve_entities=False)
var = "hello"
"""
self.run_and_assert(tmpdir, input_code, expexted_output)
@pytest.mark.parametrize(
"input_args,expected_args",
[
(
"resolve_entities=True",
"resolve_entities=False",
),
(
"resolve_entities=False",
"resolve_entities=False",
),
(
"""resolve_entities=True, no_network=False, dtd_validation=True""",
"""resolve_entities=False, no_network=True, dtd_validation=False""",
),
(
"""dtd_validation=True""",
"""dtd_validation=False, resolve_entities=False""",
),
(
"""no_network=False""",
"""no_network=True, resolve_entities=False""",
),
(
"""no_network=True""",
"""no_network=True, resolve_entities=False""",
),
],
)
@each_class
def test_verify_variations(self, tmpdir, klass, input_args, expected_args):
input_code = f"""import lxml.etree
parser = lxml.etree.{klass}({input_args})
var = "hello"
"""
expexted_output = f"""import lxml.etree
parser = lxml.etree.{klass}({expected_args})
var = "hello"
"""
self.run_and_assert(tmpdir, input_code, expexted_output)