1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #35627 -- Raised a LookupError rather than an unhandled ValueError in get_supported_language_variant().

LocaleMiddleware didn't handle the ValueError raised by
get_supported_language_variant() when language codes were
over 500 characters.

Regression in 9e9792228a.
This commit is contained in:
Lorenzo Peña
2024-07-23 12:06:29 +02:00
committed by Sarah Boyce
parent 2c024c9ac0
commit 0e94f292cd
6 changed files with 31 additions and 7 deletions

View File

@@ -1673,14 +1673,13 @@ class MiscTests(SimpleTestCase):
g("xyz")
with self.assertRaises(LookupError):
g("xy-zz")
msg = "'lang_code' exceeds the maximum accepted length"
with self.assertRaises(LookupError):
g("x" * LANGUAGE_CODE_MAX_LENGTH)
with self.assertRaisesMessage(ValueError, msg):
with self.assertRaises(LookupError):
g("x" * (LANGUAGE_CODE_MAX_LENGTH + 1))
# 167 * 3 = 501 which is LANGUAGE_CODE_MAX_LENGTH + 1.
self.assertEqual(g("en-" * 167), "en")
with self.assertRaisesMessage(ValueError, msg):
with self.assertRaises(LookupError):
g("en-" * 167, strict=True)
self.assertEqual(g("en-" * 30000), "en") # catastrophic test
@@ -1734,6 +1733,7 @@ class MiscTests(SimpleTestCase):
("/i-mingo/", "i-mingo"),
("/kl-tunumiit/", "kl-tunumiit"),
("/nan-hani-tw/", "nan-hani-tw"),
(f"/{'a' * 501}/", None),
]
for path, language in tests:
with self.subTest(path=path):
@@ -2009,6 +2009,11 @@ class CountrySpecificLanguageTests(SimpleTestCase):
lang = get_language_from_request(request)
self.assertEqual("bg", lang)
def test_get_language_from_request_code_too_long(self):
request = self.rf.get("/", headers={"accept-language": "a" * 501})
lang = get_language_from_request(request)
self.assertEqual("en-us", lang)
def test_get_language_from_request_null(self):
lang = trans_null.get_language_from_request(None)
self.assertEqual(lang, "en")