Index: renpy-8.5.0-source/renpy/cslots.pyx
===================================================================
--- renpy-8.5.0-source.orig/renpy/cslots.pyx
+++ renpy-8.5.0-source/renpy/cslots.pyx
@@ -32,6 +32,9 @@ Value unions, followed by a series of by
from cpython.mem cimport PyMem_Calloc, PyMem_Free
from cpython.object cimport PyObject, PyTypeObject, Py_TPFLAGS_HAVE_GC, PyObject_Free
from cpython.ref cimport Py_XINCREF, Py_XDECREF, Py_CLEAR
+cdef extern from "<limits.h>":
+ const long long LLONG_MIN
+ const long long LLONG_MAX
from copyreg import __newobj__
@@ -51,7 +54,7 @@ cdef unsigned char DEFAULT_VALUE = 0xff
cdef union Value:
PyObject *object
- unsigned long long integer
+ long long integer
cdef class CMetaclass(type):
@@ -369,10 +372,15 @@ cdef class IntegerSlot(Slot):
super(IntegerSlot, self).__init__(default_value)
self.default_int_value = default_value
- def __set__(self, CObject instance, unsigned int value):
+ def __set__(self, CObject instance, long long value):
cdef Value v
+ if value >= (LLONG_MAX >> 1):
+ raise OverflowError("Value is too large for an IntegerSlot")
+ if value <= (LLONG_MIN >> 1):
+ raise OverflowError("Value is too small for an IntegerSlot")
+
if value == self.default_int_value:
v.object = NULL
else: