diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-01-14 23:08:50 +0100 |
|---|---|---|
| committer | Natalia <124304+nessita@users.noreply.github.com> | 2025-01-15 13:54:57 -0300 |
| commit | 043dfadbcebc752d5ab2e9ff08c7e48044d20dc2 (patch) | |
| tree | 5ddece46e01540ffba77caa09bc36f760c205792 /tests | |
| parent | 8769b44fdabc960dc23d1222430470809fd751b1 (diff) | |
[4.2.x] Fixed #36098 -- Fixed validate_ipv6_address()/validate_ipv46_address() crash for non-string values.
Regression in ca2be7724e1244a4cb723de40a070f873c6e94bf.
Backport of b3c5830769d8a5dbf2f974da7116fe503c9454d9 from main.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/utils_tests/test_ipv6.py | 18 | ||||
| -rw-r--r-- | tests/validators/tests.py | 11 |
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/utils_tests/test_ipv6.py b/tests/utils_tests/test_ipv6.py index 2d06507fa1..3734222318 100644 --- a/tests/utils_tests/test_ipv6.py +++ b/tests/utils_tests/test_ipv6.py @@ -1,5 +1,7 @@ import traceback +from decimal import Decimal from io import StringIO +from ipaddress import IPv6Address from django.core.exceptions import ValidationError from django.test import SimpleTestCase @@ -24,6 +26,16 @@ class TestUtilsIPv6(SimpleTestCase): self.assertTrue(is_valid_ipv6_address("::ffff:254.42.16.14")) self.assertTrue(is_valid_ipv6_address("::ffff:0a0a:0a0a")) + def test_validates_correct_with_ipv6_instance(self): + cases = [ + IPv6Address("::ffff:2.125.160.216"), + IPv6Address("fe80::1"), + IPv6Address("::"), + ] + for case in cases: + with self.subTest(case=case): + self.assertIs(is_valid_ipv6_address(case), True) + def test_validates_incorrect_plain_address(self): self.assertFalse(is_valid_ipv6_address("foo")) self.assertFalse(is_valid_ipv6_address("127.0.0.1")) @@ -46,6 +58,12 @@ class TestUtilsIPv6(SimpleTestCase): self.assertFalse(is_valid_ipv6_address("::999.42.16.14")) self.assertFalse(is_valid_ipv6_address("::zzzz:0a0a")) + def test_validates_incorrect_with_non_string(self): + cases = [None, [], {}, (), Decimal("2.46"), 192.168, 42] + for case in cases: + with self.subTest(case=case): + self.assertIs(is_valid_ipv6_address(case), False) + def test_cleans_plain_address(self): self.assertEqual(clean_ipv6_address("DEAD::0:BEEF"), "dead::beef") self.assertEqual( diff --git a/tests/validators/tests.py b/tests/validators/tests.py index e99baab862..f4ab7fbece 100644 --- a/tests/validators/tests.py +++ b/tests/validators/tests.py @@ -1,3 +1,4 @@ +import ipaddress import re import types from datetime import datetime, timedelta @@ -381,15 +382,25 @@ TEST_DATA = [ (validate_ipv6_address, "fe80::1", None), (validate_ipv6_address, "::1", None), (validate_ipv6_address, "1:2:3:4:5:6:7:8", None), + (validate_ipv6_address, ipaddress.IPv6Address("::ffff:2.125.160.216"), None), + (validate_ipv6_address, ipaddress.IPv6Address("fe80::1"), None), + (validate_ipv6_address, Decimal("33.1"), ValidationError), + (validate_ipv6_address, 9.22, ValidationError), (validate_ipv6_address, "1:2", ValidationError), (validate_ipv6_address, "::zzz", ValidationError), (validate_ipv6_address, "12345::", ValidationError), (validate_ipv46_address, "1.1.1.1", None), (validate_ipv46_address, "255.0.0.0", None), (validate_ipv46_address, "0.0.0.0", None), + (validate_ipv46_address, ipaddress.IPv4Address("1.1.1.1"), None), + (validate_ipv46_address, ipaddress.IPv4Address("255.0.0.0"), None), (validate_ipv46_address, "fe80::1", None), (validate_ipv46_address, "::1", None), (validate_ipv46_address, "1:2:3:4:5:6:7:8", None), + (validate_ipv46_address, ipaddress.IPv6Address("::ffff:2.125.160.216"), None), + (validate_ipv46_address, ipaddress.IPv6Address("fe80::1"), None), + (validate_ipv46_address, Decimal("33.1"), ValidationError), + (validate_ipv46_address, 9.22, ValidationError), (validate_ipv46_address, "256.1.1.1", ValidationError), (validate_ipv46_address, "25.1.1.", ValidationError), (validate_ipv46_address, "25,1,1,1", ValidationError), |
