]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
more tokenizer coverage
authorBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 15:46:21 +0000 (08:46 -0700)
committerBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 15:46:21 +0000 (08:46 -0700)
dns/tokenizer.py
tests/test_tokenizer.py

index db6d8ecba8cd4c2a4c498af0e2a81a1a4ed45332..cb5ebd375c8d0ee9ba9dc50721d00cdc10bf702e 100644 (file)
@@ -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):
index d82f08c574352d837ccc7a091b803aaca12e83a0..ff189ddea3cad4ee3e9ae3f1dc2416dfff47da62 100644 (file)
@@ -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()