Issue #22193: Fixed integer overflow error in sys.getsizeof(). · pythoncapi/cpython@030e92d · GitHub
Skip to content

Commit 030e92d

Browse files
Issue python#22193: Fixed integer overflow error in sys.getsizeof().
Fixed an error in _PySys_GetSizeOf declaration.
1 parent ed73010 commit 030e92d

3 files changed

Lines changed: 42 additions & 6 deletions

File tree

Include/sysmodule.h

Lines changed: 1 addition & 1 deletion

Lib/test/test_sys.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,37 @@ def test_gc_head_size(self):
723723
# but lists are
724724
self.assertEqual(sys.getsizeof([]), vsize('Pn') + gc_header_size)
725725

726+
def test_errors(self):
727+
class BadSizeof:
728+
def __sizeof__(self):
729+
raise ValueError
730+
self.assertRaises(ValueError, sys.getsizeof, BadSizeof())
731+
732+
class InvalidSizeof:
733+
def __sizeof__(self):
734+
return None
735+
self.assertRaises(TypeError, sys.getsizeof, InvalidSizeof())
736+
sentinel = ["sentinel"]
737+
self.assertIs(sys.getsizeof(InvalidSizeof(), sentinel), sentinel)
738+
739+
class FloatSizeof:
740+
def __sizeof__(self):
741+
return 4.5
742+
self.assertRaises(TypeError, sys.getsizeof, FloatSizeof())
743+
self.assertIs(sys.getsizeof(FloatSizeof(), sentinel), sentinel)
744+
745+
class OverflowSizeof(int):
746+
def __sizeof__(self):
747+
return int(self)
748+
self.assertEqual(sys.getsizeof(OverflowSizeof(sys.maxsize)),
749+
sys.maxsize + self.gc_headsize)
750+
with self.assertRaises(OverflowError):
751+
sys.getsizeof(OverflowSizeof(sys.maxsize + 1))
752+
with self.assertRaises(ValueError):
753+
sys.getsizeof(OverflowSizeof(-1))
754+
with self.assertRaises((ValueError, OverflowError)):
755+
sys.getsizeof(OverflowSizeof(-sys.maxsize - 1))
756+
726757
def test_default(self):
727758
size = test.support.calcvobjsize
728759
self.assertEqual(sys.getsizeof(True), size('') + self.longdigit)

Python/sysmodule.c

Lines changed: 10 additions & 5 deletions

0 commit comments

Comments
 (0)