mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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.
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| import os | ||||
| import sys | ||||
| from datetime import datetime | ||||
|  | ||||
| from django.core.exceptions import SuspiciousOperation | ||||
| @@ -115,6 +116,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>", | ||||
| @@ -142,10 +158,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), | ||||
|         ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user