summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2005-09-02 05:22:55 +0000
committerBob Halley <halley@dnspython.org>2005-09-02 05:22:55 +0000
commit41f0d3de53790175d3b8127afe78044683f350e8 (patch)
tree691d92fa02e0e14648742f400abaee05579ca4cb
parentdfd9ea2fdc4b3afcf2af6c5efd9dbd1c042b98da (diff)
downloaddnspython-41f0d3de53790175d3b8127afe78044683f350e8.tar.gz
parse LOC milliseconds correctly
Original author: Bob Halley <halley@dnspython.org> Date: 2004-06-16 05:27:28
-rw-r--r--ChangeLog6
-rw-r--r--README7
-rw-r--r--dns/rdtypes/ANY/LOC.py36
-rw-r--r--dns/version.py2
-rwxr-xr-xsetup.py2
-rw-r--r--tests/example2
-rw-r--r--tests/example1.good2
-rw-r--r--tests/example2.good2
8 files changed, 54 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 7fcdc44..25036a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-16 Bob Halley <halley@dnspython.org>
+
+ * 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 <halley@dnspython.org>
* (Version 1.3.1 released)
diff --git a/README b/README
index b8273ae..2fc4c60 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 f30bb95..a8dda71 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 f27cf4a..b2cf98a 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 170ab84..fe364fa 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 4dcb0f1..27420f1 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 4cd2d64..f71c6d4 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 5cf5a4c..64b6df5 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 "" "" "" .