diff options
| author | Bob Halley <halley@play-bow.org> | 2015-02-26 05:53:07 -0800 |
|---|---|---|
| committer | Bob Halley <halley@play-bow.org> | 2015-02-26 05:53:07 -0800 |
| commit | 335aaeeb10b2a1f49d0f3df6c3ba025b82edc2dd (patch) | |
| tree | bffc94cf8034ad1ae39f6a355a7b4c88babd4889 | |
| parent | ae423039dbac7f5a6463da6484435b05a448dc83 (diff) | |
| parent | 0f0850f738425fda85b21e04cb72f7ca6f2923c0 (diff) | |
| download | dnspython-335aaeeb10b2a1f49d0f3df6c3ba025b82edc2dd.tar.gz | |
Merge pull request #87 from ThomasWaldmann/master
fix unicode ipaddr crashes in rdata.from_text and tokenizer.Tokenizer
| -rw-r--r-- | dns/rdata.py | 2 | ||||
| -rw-r--r-- | dns/tokenizer.py | 2 | ||||
| -rw-r--r-- | tests/test_rdata.py | 33 | ||||
| -rw-r--r-- | tests/test_tokenizer.py | 10 |
4 files changed, 45 insertions, 2 deletions
diff --git a/dns/rdata.py b/dns/rdata.py index 3a31ae1..ef0ddde 100644 --- a/dns/rdata.py +++ b/dns/rdata.py @@ -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: diff --git a/dns/tokenizer.py b/dns/tokenizer.py index f1faa72..b046f2b 100644 --- a/dns/tokenizer.py +++ b/dns/tokenizer.py @@ -195,7 +195,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 index 0000000..69e64e1 --- /dev/null +++ b/tests/test_rdata.py @@ -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() diff --git a/tests/test_tokenizer.py b/tests/test_tokenizer.py index 1d561ae..d75de3b 100644 --- a/tests/test_tokenizer.py +++ b/tests/test_tokenizer.py @@ -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() |
