Incorrect behavior in GenericIPAddressField with protocol='both', unpack_ipv4=False
— at Version 6
Basically, IPv4-mapped IPv6 addresses in the CIDR block ::ffff:0.0.0.0/104 are validated as invalid when unpack_ipv4=False, yet is valid when the first IPv4 octet is non-zero or when unpack_ipv4=True.
# my.app.models
# Django==1.8.6
from django.db import models
class TestIPNoUnpack(models.Model):
ip = models.GenericIPAddressField(null=False, protocol='both', unpack_ipv4=False)
class TestIPUnpack(models.Model):
ip = models.GenericIPAddressField(null=False, protocol='both', unpack_ipv4=True)
> python manage.py shell
In [1]: from my.app.models import TestIPNoUnpack, TestIPUnpack
In [2]: testipunpack = TestIPUnpack(ip='::ffff:0.0.0.0')
In [3]: testipunpack.clean_fields()
In [4]: testipunpack.ip
Out[4]: '0.0.0.0'
In [5]: testipnounpack = TestIPNoUnpack(ip='::ffff:0.0.0.0')
In [6]: testipnounpack.clean_fields()
ValidationError: {'ip': [u'Enter a valid IPv4 or IPv6 address.']}
In [7]: testipnounpack2 = TestIPNoUnpack(ip='::ffff:0.255.255.255')
In [8]: testipnounpack2.clean_fields()
ValidationError: {'ip': [u'Enter a valid IPv4 or IPv6 address.']}
In [9]: testipnounpack3 = TestIPNoUnpack(ip='::ffff:1.0.0.0')
In [10]: testipnounpack3.clean_fields()
In [11]: testipnounpack3.ip
Out[11]: '::ffff:1.0.0.0'
PR