Exemple #1
0
 def test_highly_nested_objects_encoding(self):
     # See #12051
     l, d = [], {}
     for x in range(100000):
         l, d = [l], {'k':d}
     with self.assertRaises(RecursionError):
         with support.infinite_recursion():
             self.dumps(l)
     with self.assertRaises(RecursionError):
         with support.infinite_recursion():
             self.dumps(d)
Exemple #2
0
 def test_highly_nested_objects_decoding(self):
     # test that loading highly-nested objects doesn't segfault when C
     # accelerations are used. See #12017
     with self.assertRaises(RecursionError):
         with support.infinite_recursion():
             self.loads('{"a":' * 100000 + '1' + '}' * 100000)
     with self.assertRaises(RecursionError):
         with support.infinite_recursion():
             self.loads('{"a":' * 100000 + '[1]' + '}' * 100000)
     with self.assertRaises(RecursionError):
         with support.infinite_recursion():
             self.loads('[' * 100000 + '1' + ']' * 100000)
Exemple #3
0
 def test_infinite_cycle_in_bases(self):
     """Regression test for bpo-30570."""
     class X:
         @property
         def __bases__(self):
             return (self, self, self)
     with support.infinite_recursion():
         self.assertRaises(RecursionError, issubclass, X(), int)
Exemple #4
0
 def test_infinite_recursion_via_bases_tuple(self):
     """Regression test for bpo-30570."""
     class Failure(object):
         def __getattr__(self, attr):
             return (self, None)
     with support.infinite_recursion():
         with self.assertRaises(RecursionError):
             issubclass(Failure(), int)
Exemple #5
0
 def test_infinite_recursion_in_bases(self):
     class X:
         @property
         def __bases__(self):
             return self.__bases__
     with support.infinite_recursion():
         self.assertRaises(RecursionError, issubclass, X(), int)
         self.assertRaises(RecursionError, issubclass, int, X())
         self.assertRaises(RecursionError, isinstance, 1, X())
Exemple #6
0
    def test_endless_recursion(self):
        # See #12051
        class EndlessJSONEncoder(self.json.JSONEncoder):
            def default(self, o):
                """If check_circular is False, this will keep adding another list."""
                return [o]

        with self.assertRaises(RecursionError):
            with support.infinite_recursion():
                EndlessJSONEncoder(check_circular=False).encode(5j)
Exemple #7
0
 def test_infinitely_many_bases(self):
     """Regression test for bpo-30570."""
     class X:
         def __getattr__(self, attr):
             self.assertEqual(attr, "__bases__")
             class A:
                 pass
             class B:
                 pass
             A.__getattr__ = B.__getattr__ = X.__getattr__
             return (A(), B())
     with support.infinite_recursion():
         self.assertRaises(RecursionError, issubclass, X(), int)
Exemple #8
0
 def test_isinstance_recursion_limit(self):
     # make sure that issubclass raises RecursionError before the C stack is
     # blown
     with support.infinite_recursion():
         self.assertRaises(RecursionError, blowstack, isinstance, '', str)