From ad0410ec4f458aa39803e5f6b9a3736527062dcd Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Wed, 14 Jun 2023 12:23:06 +0200 Subject: Fixed CVE-2023-36053 -- Prevented potential ReDoS in EmailValidator and URLValidator. Thanks Seokchan Yoon for reports. --- tests/forms_tests/field_tests/test_emailfield.py | 3 ++- tests/forms_tests/tests/test_forms.py | 19 +++++++++++-------- tests/validators/tests.py | 3 +++ 3 files changed, 16 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/forms_tests/field_tests/test_emailfield.py b/tests/forms_tests/field_tests/test_emailfield.py index 869a1aacc5..079267ca8b 100644 --- a/tests/forms_tests/field_tests/test_emailfield.py +++ b/tests/forms_tests/field_tests/test_emailfield.py @@ -8,8 +8,9 @@ from . import FormFieldAssertionsMixin class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_emailfield_1(self): f = EmailField() + self.assertEqual(f.max_length, 320) self.assertWidgetRendersTo( - f, '' + f, '' ) with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean("") diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 5563dc35fd..c283ab20ef 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -546,7 +546,8 @@ class FormsTestCase(SimpleTestCase): f = SignupForm(auto_id=False) self.assertHTMLEqual( - str(f["email"]), '' + str(f["email"]), + '', ) self.assertHTMLEqual( str(f["get_spam"]), '' @@ -555,7 +556,8 @@ class FormsTestCase(SimpleTestCase): f = SignupForm({"email": "test@example.com", "get_spam": True}, auto_id=False) self.assertHTMLEqual( str(f["email"]), - '', + '", ) self.assertHTMLEqual( str(f["get_spam"]), @@ -3521,7 +3523,7 @@ Options:
  • -
  • +
  • @@ -3543,7 +3545,7 @@ Options:

    -

    +

    @@ -3563,7 +3565,7 @@ Options: - + """, @@ -3578,7 +3580,7 @@ Options:
    ' - '
    ' + '' '
    • This field is required.
    ' '
    ', @@ -5094,8 +5096,9 @@ class OverrideTests(SimpleTestCase): '

    Name:

    ' '
    ' '
    Enter a valid email address.
    ' - '

    Email:

    ' - '
    ' + "

    Email: " + '' + '

    ' '
    This field is required.
    ' '

    Comment:

    ', ) diff --git a/tests/validators/tests.py b/tests/validators/tests.py index af08a785fe..e689435e3c 100644 --- a/tests/validators/tests.py +++ b/tests/validators/tests.py @@ -106,6 +106,7 @@ VALID_URLS = [ "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" "ddddddddddddddddd:password@example.com:8080", + "http://userid:password" + "d" * 2000 + "@example.aaaaaaaaaaaaa.com", "http://142.42.1.1/", "http://142.42.1.1:8080/", "http://➡.ws/䨹", @@ -236,6 +237,7 @@ INVALID_URLS = [ "aaaaaa.com", "http://example.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaa", + "http://example." + ("a" * 63 + ".") * 1000 + "com", "http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaa." "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaa" @@ -291,6 +293,7 @@ TEST_DATA = [ (validate_email, "example@%s.%s.atm" % ("a" * 63, "b" * 10), None), (validate_email, "example@atm.%s" % ("a" * 64), ValidationError), (validate_email, "example@%s.atm.%s" % ("b" * 64, "a" * 63), ValidationError), + (validate_email, "example@%scom" % (("a" * 63 + ".") * 100), ValidationError), (validate_email, None, ValidationError), (validate_email, "", ValidationError), (validate_email, "abc", ValidationError), -- cgit v1.3