From daa371c882ae009ff023175f6e74c572ff2a6e0f Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Fri, 26 Apr 2013 13:03:42 +0100 Subject: In dns.ipv6.inet_ntoa(), do not use :: to shorten just one 16-bit 0 field --- ChangeLog | 7 +++++++ dns/ipv6.py | 2 +- tests/ntoaaton.py | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d3eda06..ef4ab5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-04-26 Bob Halley + + * 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() -- cgit v1.2.1