Skip to content

Commit 7b0194c

Browse files
committed
test: cover inline performance edge cases
1 parent b4dd328 commit 7b0194c

1 file changed

Lines changed: 48 additions & 2 deletions

File tree

tests/test_security_edge_cases.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
from mistune import create_markdown
55

66

7+
def _best_time(render, size):
8+
return min(render(size) for _ in range(3))
9+
10+
711
class TestEdgeCaseSecurity(TestCase):
812
def test_blank_list_continuations_are_near_linear(self):
913
md = create_markdown()
@@ -29,8 +33,8 @@ def render(size):
2933
return time.perf_counter() - started
3034

3135
render(1000)
32-
small = render(4000)
33-
large = render(8000)
36+
small = _best_time(render, 4000)
37+
large = _best_time(render, 8000)
3438

3539
self.assertLess(large, small * 3.5 + 0.02)
3640

@@ -40,3 +44,45 @@ def test_dense_emphasis_preserves_adjacent_tokens(self):
4044
md("*a" * 6 + "\n"),
4145
"<p><em>a</em>a<em>a</em>a<em>a</em>a</p>\n",
4246
)
47+
48+
def test_mixed_emphasis_delimiters_are_near_linear(self):
49+
md = create_markdown()
50+
51+
def render(size):
52+
started = time.perf_counter()
53+
md("*a_b" * size)
54+
return time.perf_counter() - started
55+
56+
render(500)
57+
small = _best_time(render, 2000)
58+
large = _best_time(render, 4000)
59+
60+
self.assertLess(large, small * 3 + 0.05)
61+
62+
def test_malformed_images_are_near_linear(self):
63+
md = create_markdown()
64+
65+
def render(size):
66+
started = time.perf_counter()
67+
md("![" * size + "x" + "]" * size)
68+
return time.perf_counter() - started
69+
70+
render(500)
71+
small = _best_time(render, 2000)
72+
large = _best_time(render, 4000)
73+
74+
self.assertLess(large, small * 3 + 0.05)
75+
76+
def test_unclosed_link_destinations_are_near_linear(self):
77+
md = create_markdown()
78+
79+
def render(size):
80+
started = time.perf_counter()
81+
md("[](" * size)
82+
return time.perf_counter() - started
83+
84+
render(500)
85+
small = _best_time(render, 2000)
86+
large = _best_time(render, 4000)
87+
88+
self.assertLess(large, small * 3 + 0.05)

0 commit comments

Comments
 (0)