]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Raise IndexError in Answer get and delete if rrset is None.
authorBob Halley <halley@dnspython.org>
Mon, 9 Jan 2017 14:10:39 +0000 (06:10 -0800)
committerBob Halley <halley@dnspython.org>
Mon, 9 Jan 2017 14:10:39 +0000 (06:10 -0800)
Thanks to mschwager for reporting this.
[Issue #226].

dns/resolver.py
tests/test_resolver.py

index abc431d7f3f4ef9d3c038a930d12718a52dfdc34..e63eefccbfbb50d35c11b67adc1efc025626fb8a 100644 (file)
@@ -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]
 
 
index 1f3662592a174066604d4ef422da7d3520a06559..35372273ec75d195acc3c5343801cf2bd1ec6b9a 100644 (file)
@@ -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.')