From: Bob Halley Date: Mon, 9 Jan 2017 14:10:39 +0000 (-0800) Subject: Raise IndexError in Answer get and delete if rrset is None. X-Git-Tag: v1.16.0~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c276e2536058efc28a4fc71b7306c2a069deb65;p=thirdparty%2Fdnspython.git Raise IndexError in Answer get and delete if rrset is None. Thanks to mschwager for reporting this. [Issue #226]. --- diff --git a/dns/resolver.py b/dns/resolver.py index abc431d7..e63eefcc 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -278,9 +278,13 @@ class Answer(object): return self.rrset and iter(self.rrset) or iter(tuple()) def __getitem__(self, i): + if self.rrset is None: + raise IndexError return self.rrset[i] def __delitem__(self, i): + if self.rrset is None: + raise IndexError del self.rrset[i] diff --git a/tests/test_resolver.py b/tests/test_resolver.py index 1f366259..35372273 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -134,6 +134,26 @@ class BaseResolverTests(unittest.TestCase): self.failUnless(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN)) is None) + def testIndexErrorOnEmptyRRsetAccess(self): + def bad(): + message = dns.message.from_text(message_text) + name = dns.name.from_text('example.') + answer = dns.resolver.Answer(name, dns.rdatatype.MX, + dns.rdataclass.IN, message, + False) + return answer[0] + self.failUnlessRaises(IndexError, bad) + + def testIndexErrorOnEmptyRRsetDelete(self): + def bad(): + message = dns.message.from_text(message_text) + name = dns.name.from_text('example.') + answer = dns.resolver.Answer(name, dns.rdatatype.MX, + dns.rdataclass.IN, message, + False) + del answer[0] + self.failUnlessRaises(IndexError, bad) + @unittest.skipIf(not _network_available, "Internet not reachable") def testZoneForName1(self): name = dns.name.from_text('www.dnspython.org.')