From: Bob Halley Date: Fri, 2 Sep 2005 05:22:55 +0000 (+0000) Subject: parse LOC milliseconds correctly X-Git-Tag: v1.3.4~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41f0d3de53790175d3b8127afe78044683f350e8;p=thirdparty%2Fdnspython.git parse LOC milliseconds correctly Original author: Bob Halley Date: 2004-06-16 05:27:28 --- diff --git a/ChangeLog b/ChangeLog index 7fcdc440..25036a1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-06-16 Bob Halley + + * dns/rdtypes/ANY/LOC.py (LOC.from_text): LOC milliseconds values + were converted incorrectly if the length of the milliseconds + string was less than 3. + 2004-06-06 Bob Halley * (Version 1.3.1 released) diff --git a/README b/README index b8273ae5..2fc4c601 100644 --- a/README +++ b/README @@ -22,7 +22,12 @@ development by continuing to employ the author :). ABOUT THIS RELEASE -This is dnspython 1.3.1. +This is dnspython 1.3.2. + +New since 1.3.1: + + The conversion of LOC milliseconds values from text to binary was + incorrect if the length of the milliseconds string was not 3. New since 1.3.0: diff --git a/dns/rdtypes/ANY/LOC.py b/dns/rdtypes/ANY/LOC.py index f30bb95a..a8dda718 100644 --- a/dns/rdtypes/ANY/LOC.py +++ b/dns/rdtypes/ANY/LOC.py @@ -166,8 +166,24 @@ class LOC(dns.rdata.Rdata): t = tok.get_string() if '.' in t: (seconds, milliseconds) = t.split('.') + if not seconds.isdigit(): + raise dns.exception.SyntaxError, \ + 'bad latitude seconds value' latitude[2] = int(seconds) - latitude[3] = int(milliseconds) + if latitude[2] >= 60: + raise dns.exception.SyntaxError, \ + 'latitude seconds >= 60' + l = len(milliseconds) + if l == 0 or l > 3 or not milliseconds.isdigit(): + raise dns.exception.SyntaxError, \ + 'bad latitude milliseconds value' + if l == 1: + m = 100 + elif l == 2: + m = 10 + else: + m = 1 + latitude[3] = m * int(milliseconds) t = tok.get_string() elif t.isdigit(): latitude[2] = int(t) @@ -184,8 +200,24 @@ class LOC(dns.rdata.Rdata): t = tok.get_string() if '.' in t: (seconds, milliseconds) = t.split('.') + if not seconds.isdigit(): + raise dns.exception.SyntaxError, \ + 'bad longitude seconds value' longitude[2] = int(seconds) - longitude[3] = int(milliseconds) + if longitude[2] >= 60: + raise dns.exception.SyntaxError, \ + 'longitude seconds >= 60' + l = len(milliseconds) + if l == 0 or l > 3 or not milliseconds.isdigit(): + raise dns.exception.SyntaxError, \ + 'bad longitude milliseconds value' + if l == 1: + m = 100 + elif l == 2: + m = 10 + else: + m = 1 + longitude[3] = m * int(milliseconds) t = tok.get_string() elif t.isdigit(): longitude[2] = int(t) diff --git a/dns/version.py b/dns/version.py index f27cf4a9..b2cf98ad 100644 --- a/dns/version.py +++ b/dns/version.py @@ -19,7 +19,7 @@ MAJOR = 1 MINOR = 3 -MICRO = 1 +MICRO = 2 RELEASELEVEL = 0x0f SERIAL = 0 diff --git a/setup.py b/setup.py index 170ab84c..fe364fa4 100755 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ from distutils.core import setup setup( name = "dnspython", - version = "1.3.1", + version = "1.3.2", description = "DNS toolkit", long_description = \ """dnspython is a DNS toolkit for Python. It supports almost all diff --git a/tests/example b/tests/example index 4dcb0f1e..27420f1b 100644 --- a/tests/example +++ b/tests/example @@ -110,6 +110,8 @@ kx02 KX 10 . loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m loc03 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 90000000.00m 2000m 20m +loc04 LOC 60 9 1.5 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc05 LOC 60 9 1.51 N 24 39 0.000 E 10.00m 20m 2000m 20m ;; ;; XXXRTH These are all obsolete and unused. dnspython doesn't implement ;; them diff --git a/tests/example1.good b/tests/example1.good index 4cd2d649..f71c6d45 100644 --- a/tests/example1.good +++ b/tests/example1.good @@ -48,6 +48,8 @@ kx02 3600 IN KX 10 . loc01 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m loc02 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m loc03 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 90000000.00m 2000.00m 20.00m +loc04 3600 IN LOC 60 9 1.500 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m +loc05 3600 IN LOC 60 9 1.510 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m mx01 3600 IN MX 10 mail mx02 3600 IN MX 10 . naptr01 3600 IN NAPTR 0 0 "" "" "" . diff --git a/tests/example2.good b/tests/example2.good index 5cf5a4c0..64b6df5c 100644 --- a/tests/example2.good +++ b/tests/example2.good @@ -48,6 +48,8 @@ kx02.example. 3600 IN KX 10 . loc01.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m loc02.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m loc03.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 90000000.00m 2000.00m 20.00m +loc04.example. 3600 IN LOC 60 9 1.500 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m +loc05.example. 3600 IN LOC 60 9 1.510 N 24 39 0.000 E 10.00m 20.00m 2000.00m 20.00m mx01.example. 3600 IN MX 10 mail.example. mx02.example. 3600 IN MX 10 . naptr01.example. 3600 IN NAPTR 0 0 "" "" "" .