From: Bob Halley Date: Tue, 18 Aug 2020 13:28:21 +0000 (-0700) Subject: node replace_rdataset() should not permit rrsets X-Git-Tag: v2.1.0rc1~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=279dbec2722bd9836b1adf76db5136aeb346421e;p=thirdparty%2Fdnspython.git node replace_rdataset() should not permit rrsets --- diff --git a/dns/node.py b/dns/node.py index b7e21b54..b1baf27b 100644 --- a/dns/node.py +++ b/dns/node.py @@ -180,6 +180,10 @@ class Node: if not isinstance(replacement, dns.rdataset.Rdataset): raise ValueError('replacement is not an rdataset') + if isinstance(replacement, dns.rrset.RRset): + # RRsets are not good replacements as the match() method + # is not compatible. + replacement = replacement.to_rdataset() self.delete_rdataset(replacement.rdclass, replacement.rdtype, replacement.covers) self.rdatasets.append(replacement) diff --git a/tests/test_zone.py b/tests/test_zone.py index a301cb25..78fbb28c 100644 --- a/tests/test_zone.py +++ b/tests/test_zone.py @@ -792,5 +792,14 @@ class ZoneTestCase(unittest.TestCase): z2 = dns.zone.from_text(out, 'example.', relativize=True) self.assertEqual(z, z2) + def testNodeReplaceRdatasetConvertsRRsets(self): + node = dns.node.Node() + rrs = dns.rrset.from_text('foo', 300, 'in', 'a', '10.0.0.1') + node.replace_rdataset(rrs) + rds = node.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A) + self.assertEqual(rds, rrs) + self.assertTrue(rds is not rrs) + self.assertFalse(isinstance(rds, dns.rrset.RRset)) + if __name__ == '__main__': unittest.main()