From: Bob Halley Date: Sat, 13 Jun 2015 12:26:31 +0000 (-0700) Subject: Fix CAA from_wire() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b0c15086f0e5f6eacc06d77a119280c31731b3c;p=thirdparty%2Fdnspython.git Fix CAA from_wire() --- diff --git a/dns/rdtypes/ANY/CAA.py b/dns/rdtypes/ANY/CAA.py index 74256064..2381ea64 100644 --- a/dns/rdtypes/ANY/CAA.py +++ b/dns/rdtypes/ANY/CAA.py @@ -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) diff --git a/tests/test_bugs.py b/tests/test_bugs.py index 906e0fd8..5aae6a43 100644 --- a/tests/test_bugs.py +++ b/tests/test_bugs.py @@ -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()