]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Fix CAA from_wire()
authorBob Halley <halley@play-bow.org>
Sat, 13 Jun 2015 12:26:31 +0000 (05:26 -0700)
committerBob Halley <halley@play-bow.org>
Sat, 13 Jun 2015 12:26:31 +0000 (05:26 -0700)
dns/rdtypes/ANY/CAA.py
tests/test_bugs.py

index 7425606489ab73c9ef209ddc2e73eb3015692690..2381ea64db05894297e1846b3459d20b2f602852 100644 (file)
@@ -69,5 +69,5 @@ class CAA(dns.rdata.Rdata):
         (flags, l) = struct.unpack('!BB', wire[current : current + 2])
         current += 2
         tag = wire[current : current + l].decode('latin_1')
-        value = wire[current + l:].decode('latin_1')
+        value = wire[current + l:current + rdlen - 2].decode('latin_1')
         return cls(rdclass, rdtype, flags, tag, value)
index 906e0fd87ad67c946a51308d1461a5c3d3d06fee..5aae6a4380ccbde9ce8226664577be25f262b6bc 100644 (file)
@@ -14,6 +14,7 @@
 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 import binascii
+import io
 import unittest
 
 import dns.rdata
@@ -59,6 +60,17 @@ class BugsTestCase(unittest.TestCase):
                                      b"", 0, 0)
         self.assertTrue(rdata == rdata2)
 
+    def test_CAA_from_wire(self):
+        rdata = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CAA,
+                                    '0 issue "ca.example.net"');
+        f = io.BytesIO()
+        rdata.to_wire(f)
+        wire = f.getvalue()
+        rdlen = len(wire)
+        wire += b"trailing garbage"
+        rdata2 = dns.rdata.from_wire(dns.rdataclass.IN, dns.rdatatype.CAA,
+                                     wire, 0, rdlen)
+        self.failUnless(rdata == rdata2)
 
 if __name__ == '__main__':
     unittest.main()