From: Bob Halley Date: Thu, 18 Jun 2020 15:46:21 +0000 (-0700) Subject: more tokenizer coverage X-Git-Tag: v2.0.0rc1~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f06393896a4e909645cf71543ca168d4132eb716;p=thirdparty%2Fdnspython.git more tokenizer coverage --- diff --git a/dns/tokenizer.py b/dns/tokenizer.py index db6d8ecb..cb5ebd37 100644 --- a/dns/tokenizer.py +++ b/dns/tokenizer.py @@ -297,7 +297,8 @@ class Tokenizer: """ if self.ungotten_char is not None: - raise UngetBufferFull + # this should never happen! + raise UngetBufferFull # pragma: no cover self.ungotten_char = c def skip_whitespace(self): diff --git a/tests/test_tokenizer.py b/tests/test_tokenizer.py index d82f08c5..ff189dde 100644 --- a/tests/test_tokenizer.py +++ b/tests/test_tokenizer.py @@ -294,5 +294,39 @@ class TokenizerTestCase(unittest.TestCase): v = tok.get_ttl() self.assertRaises(dns.exception.SyntaxError, bad) + def testDanglingEscapes(self): + def bad1(): + tok = dns.tokenizer.Tokenizer('"\\"') + t = tok.get().unescape() + self.assertRaises(dns.exception.SyntaxError, bad1) + def bad2(): + tok = dns.tokenizer.Tokenizer('"\\0"') + t = tok.get().unescape() + self.assertRaises(dns.exception.SyntaxError, bad2) + def bad3(): + tok = dns.tokenizer.Tokenizer('"\\00"') + t = tok.get().unescape() + self.assertRaises(dns.exception.SyntaxError, bad3) + def bad4(): + tok = dns.tokenizer.Tokenizer('"\\"') + t = tok.get().unescape_to_bytes() + self.assertRaises(dns.exception.SyntaxError, bad4) + def bad5(): + tok = dns.tokenizer.Tokenizer('"\\0"') + t = tok.get().unescape_to_bytes() + self.assertRaises(dns.exception.SyntaxError, bad5) + def bad6(): + tok = dns.tokenizer.Tokenizer('"\\00"') + t = tok.get().unescape_to_bytes() + self.assertRaises(dns.exception.SyntaxError, bad6) + def bad7(): + tok = dns.tokenizer.Tokenizer('"\\00a"') + t = tok.get().unescape() + self.assertRaises(dns.exception.SyntaxError, bad7) + def bad8(): + tok = dns.tokenizer.Tokenizer('"\\00a"') + t = tok.get().unescape_to_bytes() + self.assertRaises(dns.exception.SyntaxError, bad8) + if __name__ == '__main__': unittest.main()