]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
dns.name.from_text() did not complain if an escape ended too soon
authorBob Halley <halley@dnspython.org>
Fri, 2 Sep 2005 05:22:27 +0000 (05:22 +0000)
committerBob Halley <halley@dnspython.org>
Fri, 2 Sep 2005 05:22:27 +0000 (05:22 +0000)
Original author: Bob Halley <halley@dnspython.org>
Date: 2004-05-08 11:45:58

dns/name.py
tests/name.py

index 615e4c67744dd0aa5a36c72e624ac454f0978eb4..3d61531fbf16ae756f8806a7af5953cc15073725 100644 (file)
@@ -532,6 +532,8 @@ def from_text(text, origin = root):
                 total = 0
             else:
                 label += c
+        if escaping:
+            raise BadEscape
         if len(label) > 0:
             labels.append(label)
         else:
index 3a0e334f5e29a5f68c4932cbe8ed2ba1616296ec..8578d57e3f53140cc9c3bb24ed928155fc73cff8 100644 (file)
@@ -49,6 +49,46 @@ class NameTestCase(unittest.TestCase):
         n = dns.name.from_text('foo.bar.')
         self.failUnless(n.labels == ('foo', 'bar', ''))
 
+    def testTortureFromText(self):
+        good = [
+            r'.',
+            r'a',
+            r'a.',
+            r'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
+            r'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
+            r'\000.\008.\010.\032.\046.\092.\099.\255',
+            r'\\',
+            r'\..\.',
+            r'\\.\\',
+            r'!"#%&/()=+-',
+            r'\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255',
+            ]
+        bad = [
+            r'..',
+            r'.a',
+            r'\\..',
+            '\\',              # yes, we don't want the 'r' prefix!
+            r'\0',
+            r'\00',
+            r'\00Z',
+            r'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
+            r'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
+            r'\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255.\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255',
+            ]
+        for t in good:
+            try:
+                n = dns.name.from_text(t)
+            except:
+                self.fail("good test '%s' raised an exception" % t)
+        for t in bad:
+            caught = False
+            try:
+                n = dns.name.from_text(t)
+            except:
+                caught = True
+            if not caught:
+                self.fail("bad test '%s' did not raise an exception" % t)
+
     def testImmutable1(self):
         def bad():
             self.origin.labels = ()
@@ -238,7 +278,7 @@ class NameTestCase(unittest.TestCase):
         n = dns.name.Name(['a' * 63, 'a' * 63, 'a' * 63, 'a' * 62])
         self.failUnless(n)
 
-    def testLabelTooLong(self):
+    def testNameTooLong(self):
         def bad():
             n = dns.name.Name(['a' * 63, 'a' * 63, 'a' * 63, 'a' * 63])
         self.failUnlessRaises(dns.name.NameTooLong, bad)