]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
fix unicode ipaddr crashes in rdata.from_text and tokenizer.Tokenizer, fixes #41 87/head
authorThomas Waldmann <tw@waldmann-edv.de>
Tue, 24 Feb 2015 18:49:23 +0000 (19:49 +0100)
committerThomas Waldmann <tw@waldmann-edv.de>
Tue, 24 Feb 2015 18:49:23 +0000 (19:49 +0100)
also added unit tests for both issues.

dns/rdata.py
dns/tokenizer.py
tests/test_rdata.py [new file with mode: 0644]
tests/test_tokenizer.py

index 3a31ae1c44512d93ec2c26a46a434da87a659193..ef0dddefdf5583dd6f7cdfe409b29c268e7d22a5 100644 (file)
@@ -412,7 +412,7 @@ def from_text(rdclass, rdtype, tok, origin = None, relativize = True):
     @type relativize: bool
     @rtype: dns.rdata.Rdata instance"""
 
-    if isinstance(tok, str):
+    if isinstance(tok, (str, unicode)):
         tok = dns.tokenizer.Tokenizer(tok)
     cls = get_rdata_class(rdclass, rdtype)
     if cls != GenericRdata:
index ab5687310dad3f0f8e08568d212267cb9ee870dc..6a489756b9d28d6dd07ea7c66b55e603cf6dddb7 100644 (file)
@@ -197,7 +197,7 @@ class Tokenizer(object):
         @type filename: string
         """
 
-        if isinstance(f, str):
+        if isinstance(f, (str, unicode)):
             f = cStringIO.StringIO(f)
             if filename is None:
                 filename = '<string>'
diff --git a/tests/test_rdata.py b/tests/test_rdata.py
new file mode 100644 (file)
index 0000000..69e64e1
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import unittest
+
+import dns.rdata
+import dns.rdataclass
+import dns.rdatatype
+
+class RdataTestCase(unittest.TestCase):
+
+    def test_str(self):
+        rdata = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, "1.2.3.4")
+        self.failUnless(rdata.address == "1.2.3.4")
+
+    def test_unicode(self):
+        rdata = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, u"1.2.3.4")
+        self.failUnless(rdata.address == "1.2.3.4")
+
+if __name__ == '__main__':
+    unittest.main()
index 1d561ae1b5dc06e74787d3d1610efca676118026..d75de3b1afb9122c7ee5350129c2ab51292cc18c 100644 (file)
@@ -22,6 +22,16 @@ Token = dns.tokenizer.Token
 
 class TokenizerTestCase(unittest.TestCase):
 
+    def testStr(self):
+        tok = dns.tokenizer.Tokenizer('foo')
+        token = tok.get()
+        self.failUnless(token == Token(dns.tokenizer.IDENTIFIER, 'foo'))
+
+    def testUnicode(self):
+        tok = dns.tokenizer.Tokenizer(u'foo')
+        token = tok.get()
+        self.failUnless(token == Token(dns.tokenizer.IDENTIFIER, 'foo'))
+
     def testQuotedString1(self):
         tok = dns.tokenizer.Tokenizer(r'"foo"')
         token = tok.get()