]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Fix exception when parsing certain generate statements 353/head
authorSigmund Augdal <sigmund.augdal@uninett.no>
Thu, 21 Feb 2019 11:39:34 +0000 (12:39 +0100)
committerSigmund Augdal <sigmund.augdal@uninett.no>
Thu, 21 Feb 2019 11:39:34 +0000 (12:39 +0100)
dns/zone.py
tests/test_generate.py

index 9f552ad0cf53b2c134933cae4adefcd89576ec29..5310a35858c22d11f83d119324383945350b2ccc 100644 (file)
@@ -747,10 +747,10 @@ class _MasterReader(object):
             base = 'd'
         g3 = is_generate3.match(side)
         if g3:
-            mod, sign, offset, width = g1.groups()
+            mod, sign, offset, width = g3.groups()
             if sign == '':
                 sign = '+'
-            width = g1.groups()[2]
+            width = g3.groups()[2]
             base = 'd'
 
         if not (g1 or g2 or g3):
index e06e9c64e724298de78558da2c1646380944fab1..d7e5dbe01ddd58297b57b4ffabd83343f4a5b3d4 100644 (file)
@@ -131,6 +131,17 @@ ns2 3600 IN A 10.0.0.2
 $GENERATE 27-28 $.2 PTR zlb${-26}.oob
 """
 
+example_text11 = """$TTL 1h
+@ 3600 IN SOA foo bar 1 2 3 4 5
+@ 3600 IN NS ns1
+@ 3600 IN NS ns2
+bar.foo 300 IN MX 0 blaz.foo
+ns1 3600 IN A 10.0.0.1
+ns2 3600 IN A 10.0.0.2
+$GENERATE 27-28 prefix-${0,3}  A 10.0.0.$
+"""
+
+
 def _rdata_sort(a):
     return (a[0], a[2].rdclass, a[2].to_text())
 
@@ -495,6 +506,47 @@ class GenerateTestCase(unittest.TestCase):
         exl.sort(key=_rdata_sort)
         self.failUnless(l == exl)
 
+    def testGenerate8(self): # type: () -> None
+        z = dns.zone.from_text(example_text11, 'example.', relativize=True)
+        l = list(z.iterate_rdatas())
+        l.sort(key=_rdata_sort)
+        exl = [(dns.name.from_text('@', None),
+                3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
+                                    'ns1')),
+               (dns.name.from_text('@', None),
+                3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
+                                    'ns2')),
+               (dns.name.from_text('@', None),
+                3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
+                                    'foo bar 1 2 3 4 5')),
+               (dns.name.from_text('bar.foo', None),
+                300,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
+                                    '0 blaz.foo')),
+
+               (dns.name.from_text('prefix-27', None), 3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
+                                    '10.0.0.27')),
+
+               (dns.name.from_text('prefix-28', None), 3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
+                                    '10.0.0.28')),
+
+               (dns.name.from_text('ns1', None),
+                3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
+                                    '10.0.0.1')),
+               (dns.name.from_text('ns2', None),
+                3600,
+                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
+                                    '10.0.0.2'))]
+
+        exl.sort(key=_rdata_sort)
+        self.failUnless(l == exl)
+
 
 if __name__ == '__main__':
     unittest.main()