mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
Fix a couple of bugs exposed by the new __index__ code. The 64-bit buildbots
were failing due to inappropriate clipping of numbers larger than 2**31 with new-style classes. (typeobject.c) In reviewing the code for classic classes, there were 2 problems. Any negative value return could be returned. Always return -1 if there was an error. Also make the checks similar with the new-style classes. I believe this is correct for 32 and 64 bit boxes, including Windows64. Add a test of classic classes too.
This commit is contained in:
parent
8a87f5d37e
commit
1872b1c01f
4 changed files with 25 additions and 13 deletions
|
|
@ -181,8 +181,8 @@ class OverflowTestCase(unittest.TestCase):
|
|||
self.assertEqual(self.pos.__index__(), self.pos)
|
||||
self.assertEqual(self.neg.__index__(), self.neg)
|
||||
|
||||
def test_getitem(self):
|
||||
class GetItem(object):
|
||||
def _getitem_helper(self, base):
|
||||
class GetItem(base):
|
||||
def __len__(self):
|
||||
return maxint
|
||||
def __getitem__(self, key):
|
||||
|
|
@ -195,6 +195,13 @@ class OverflowTestCase(unittest.TestCase):
|
|||
self.assertEqual(x[self.neg:self.pos], (-1, maxint))
|
||||
self.assertEqual(x[self.neg:self.pos:1].indices(maxint), (0, maxint, 1))
|
||||
|
||||
def test_getitem(self):
|
||||
self._getitem_helper(object)
|
||||
|
||||
def test_getitem_classic(self):
|
||||
class Empty: pass
|
||||
self._getitem_helper(Empty)
|
||||
|
||||
def test_sequence_repeat(self):
|
||||
self.failUnlessRaises(OverflowError, lambda: "a" * self.pos)
|
||||
self.failUnlessRaises(OverflowError, lambda: "a" * self.neg)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue