Fixed #26269 -- Prohibited spaces in is_valid_ipv6_address().

This commit is contained in:
Nick Malakhov 2016-02-12 15:26:45 +03:00 committed by Tim Graham
parent 22d2a5b00a
commit ee69789f45
2 changed files with 8 additions and 0 deletions

View File

@ -1,6 +1,8 @@
# This code was mostly based on ipaddr-py # This code was mostly based on ipaddr-py
# Copyright 2007 Google Inc. https://github.com/google/ipaddr-py # Copyright 2007 Google Inc. https://github.com/google/ipaddr-py
# Licensed under the Apache License, Version 2.0 (the "License"). # Licensed under the Apache License, Version 2.0 (the "License").
import re
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.six.moves import range from django.utils.six.moves import range
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -155,6 +157,10 @@ def is_valid_ipv6_address(ip_str):
""" """
from django.core.validators import validate_ipv4_address from django.core.validators import validate_ipv4_address
symbols_re = re.compile(r'^[0-9a-fA-F:.]+$')
if not symbols_re.match(ip_str):
return False
# We need to have at least one ':'. # We need to have at least one ':'.
if ':' not in ip_str: if ':' not in ip_str:
return False return False

View File

@ -28,6 +28,8 @@ class TestUtilsIPv6(unittest.TestCase):
self.assertFalse(is_valid_ipv6_address('1::2:3:4:5:6:7:8')) self.assertFalse(is_valid_ipv6_address('1::2:3:4:5:6:7:8'))
self.assertFalse(is_valid_ipv6_address('1:2')) self.assertFalse(is_valid_ipv6_address('1:2'))
self.assertFalse(is_valid_ipv6_address('1:::2')) self.assertFalse(is_valid_ipv6_address('1:::2'))
self.assertFalse(is_valid_ipv6_address('fe80::223: 6cff:fe8a:2e8a'))
self.assertFalse(is_valid_ipv6_address('2a02::223:6cff :fe8a:2e8a'))
def test_validates_incorrect_with_v4mapping(self): def test_validates_incorrect_with_v4mapping(self):
self.assertFalse(is_valid_ipv6_address('::ffff:999.42.16.14')) self.assertFalse(is_valid_ipv6_address('::ffff:999.42.16.14'))