#26378: Incorrect behavior in GenericIPAddressField with protocol='both',
unpack_ipv4=False
-------------------------------------+-------------------------------------
     Reporter:  bshen                |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.8
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  1                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by timgraham:

Old description:

> https://dpaste.de/EMJa
>
> 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.

New description:

 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.

 {{{ #!python
 # 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
 Python 2.7.6 (default, Sep  9 2014, 15:04:36)
 Type "copyright", "credits" or "license" for more information.

 IPython 4.0.1 -- An enhanced Interactive Python.
 ?         -> Introduction and overview of IPython's features.
 %quickref -> Quick reference.
 help      -> Python's own help system.
 object?   -> Details about 'object', use 'object??' for extra details.

 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                           Traceback (most recent call
 last)
 <ipython-input-6-9a763f56e907> in <module>()
 ----> 1 testipnounpack.clean_fields()

 .../lib/python2.7/site-packages/django/db/models/base.pyc in
 clean_fields(self, exclude)
    1194
    1195         if errors:
 -> 1196             raise ValidationError(errors)
    1197
    1198     @classmethod

 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                           Traceback (most recent call
 last)
 <ipython-input-8-e228d0855286> in <module>()
 ----> 1 testipnounpack2.clean_fields()

 .../lib/python2.7/site-packages/django/db/models/base.pyc in
 clean_fields(self, exclude)
    1194
    1195         if errors:
 -> 1196             raise ValidationError(errors)
    1197
    1198     @classmethod

 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'

 }}}

--

--
Ticket URL: <https://code.djangoproject.com/ticket/26378#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/063.485b0c3e0fdd9259deecf469cc28385b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to