From a58c4192542197174e03fb297221e221681ee43e Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Fri, 26 Apr 2013 13:04:01 +0100 Subject: [PATCH] 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 bae1b348..c8b5d920 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-08-28 Bob Halley * dns/rdtypes/ANY/NSEC3.py (NSEC3.from_text): The NSEC3 from_text() diff --git a/dns/ipv6.py b/dns/ipv6.py index 17d43a39..73f62320 100644 --- a/dns/ipv6.py +++ b/dns/ipv6.py @@ -67,7 +67,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 b103c21a..bef83f37 100644 --- a/tests/ntoaaton.py +++ b/tests/ntoaaton.py @@ -193,5 +193,11 @@ class NtoAAtoNTestCase(unittest.TestCase): for addr in addrs: self.assertRaises(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.assertTrue(t1 == addr) + if __name__ == '__main__': unittest.main() -- 2.47.3