diff options
| author | Natalia <124304+nessita@users.noreply.github.com> | 2025-07-14 14:45:03 -0300 |
|---|---|---|
| committer | nessita <124304+nessita@users.noreply.github.com> | 2025-08-13 17:49:04 -0300 |
| commit | 09801786df0f413e990a378f4603c8aeb16968cc (patch) | |
| tree | 36065b8077ee037213461638c006467db5551730 /tests/utils_tests | |
| parent | 19e7b955520bfa78826c8e6c40b1756a39ba04b7 (diff) | |
[5.1.x] Fixed #36499 -- Adjusted utils_tests.test_html.TestUtilsHtml.test_strip_tags following Python's HTMLParser new behavior.
Python fixed a quadratic complexity processing for HTMLParser in:
https://github.com/python/cpython/commit/6eb6c5db.
Backport of 2980627502c84a9fd09272e1349dc574a2ff1fb1 from main.
Diffstat (limited to 'tests/utils_tests')
| -rw-r--r-- | tests/utils_tests/test_html.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py index 78db84e1a1..c072b13348 100644 --- a/tests/utils_tests/test_html.py +++ b/tests/utils_tests/test_html.py @@ -1,4 +1,5 @@ import os +import sys from datetime import datetime from django.core.exceptions import SuspiciousOperation @@ -96,6 +97,21 @@ class TestUtilsHtml(SimpleTestCase): self.check_output(linebreaks, lazystr(value), output) def test_strip_tags(self): + # Python fixed a quadratic-time issue in HTMLParser in 3.13.6, 3.12.12, + # 3.11.14, 3.10.19, and 3.9.24. The fix slightly changes HTMLParser's + # output, so tests for particularly malformed input must handle both + # old and new results. The check below is temporary until all supported + # Python versions and CI workers include the fix. See: + # https://github.com/python/cpython/commit/6eb6c5db + min_fixed = { + (3, 14): (3, 14), + (3, 13): (3, 13, 6), + (3, 12): (3, 12, 12), + (3, 11): (3, 11, 14), + (3, 10): (3, 10, 19), + (3, 9): (3, 9, 24), + } + htmlparser_fixed = sys.version_info >= min_fixed[sys.version_info[:2]] items = ( ( "<p>See: 'é is an apostrophe followed by e acute</p>", @@ -123,10 +139,16 @@ class TestUtilsHtml(SimpleTestCase): ("&gotcha&#;<>", "&gotcha&#;<>"), ("<sc<!-- -->ript>test<<!-- -->/script>", "ript>test"), ("<script>alert()</script>&h", "alert()h"), - ("><!" + ("&" * 16000) + "D", "><!" + ("&" * 16000) + "D"), + ( + "><!" + ("&" * 16000) + "D", + ">" if htmlparser_fixed else "><!" + ("&" * 16000) + "D", + ), ("X<<<<br>br>br>br>X", "XX"), ("<" * 50 + "a>" * 50, ""), - (">" + "<a" * 500 + "a", ">" + "<a" * 500 + "a"), + ( + ">" + "<a" * 500 + "a", + ">" if htmlparser_fixed else ">" + "<a" * 500 + "a", + ), ("<a" * 49 + "a" * 951, "<a" * 49 + "a" * 951), ("<" + "a" * 1_002, "<" + "a" * 1_002), ) |
