summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2013-04-26 13:03:42 +0100
committerBob Halley <halley@dnspython.org>2013-04-26 13:03:42 +0100
commitdaa371c882ae009ff023175f6e74c572ff2a6e0f (patch)
treebca3832cd5472c7e8a32a0201339b8a3e1a14ebc
parent3950b2a88e7204a874c0a72aae120355bb755db9 (diff)
downloaddnspython-daa371c882ae009ff023175f6e74c572ff2a6e0f.tar.gz
In dns.ipv6.inet_ntoa(), do not use :: to shorten just one 16-bit 0 field
-rw-r--r--ChangeLog7
-rw-r--r--dns/ipv6.py2
-rw-r--r--tests/ntoaaton.py6
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d3eda06..ef4ab5f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-04-26 Bob Halley <halley@dnspython.org>
+
+ * dns/ipv6.py (inet_ntoa): We now comply with RFC 5952 section
+ 5.2.2, by *not* using the :: syntax to shorten just one 16-bit
+ field. Thanks to David Waitzman for reporting the bug and
+ suggesting the fix.
+
2012-09-25 Sean Leach
* added set_flags() method to dns.resolver.Resolver
diff --git a/dns/ipv6.py b/dns/ipv6.py
index 69db34a..1ab00da 100644
--- a/dns/ipv6.py
+++ b/dns/ipv6.py
@@ -72,7 +72,7 @@ def inet_ntoa(address):
if current_len > best_len:
best_start = start
best_len = current_len
- if best_len > 0:
+ if best_len > 1:
if best_start == 0 and \
(best_len == 6 or
best_len == 5 and chunks[5] == 'ffff'):
diff --git a/tests/ntoaaton.py b/tests/ntoaaton.py
index 9d8bedd..e93de2d 100644
--- a/tests/ntoaaton.py
+++ b/tests/ntoaaton.py
@@ -193,5 +193,11 @@ class NtoAAtoNTestCase(unittest.TestCase):
for addr in addrs:
self.failUnlessRaises(dns.exception.SyntaxError, make_bad(addr))
+ def test_rfc5952_section_4_2_2(self):
+ addr = '2001:db8:0:1:1:1:1:1'
+ b1 = aton6(addr)
+ t1 = ntoa6(b1)
+ self.failUnless(t1 == addr)
+
if __name__ == '__main__':
unittest.main()