Kaydet (Commit) 16f842da authored tarafından Alexey Izbyshev's avatar Alexey Izbyshev Kaydeden (comit) Eric Snow

bpo-35972: _xxsubinterpreters: Fix potential integer truncation on 32-bit in…

bpo-35972: _xxsubinterpreters: Fix potential integer truncation on 32-bit in channel_send() (gh-11822)
üst b01786c8
...@@ -393,7 +393,19 @@ class ShareableTypeTests(unittest.TestCase): ...@@ -393,7 +393,19 @@ class ShareableTypeTests(unittest.TestCase):
for i in range(-1, 258)) for i in range(-1, 258))
def test_int(self): def test_int(self):
self._assert_values(range(-1, 258)) self._assert_values(itertools.chain(range(-1, 258),
[sys.maxsize, -sys.maxsize - 1]))
def test_non_shareable_int(self):
ints = [
sys.maxsize + 1,
-sys.maxsize - 2,
2**1000,
]
for i in ints:
with self.subTest(i):
with self.assertRaises(OverflowError):
interpreters.channel_send(self.cid, i)
################################## ##################################
......
...@@ -1467,13 +1467,17 @@ _str_shared(PyObject *obj, _PyCrossInterpreterData *data) ...@@ -1467,13 +1467,17 @@ _str_shared(PyObject *obj, _PyCrossInterpreterData *data)
static PyObject * static PyObject *
_new_long_object(_PyCrossInterpreterData *data) _new_long_object(_PyCrossInterpreterData *data)
{ {
return PyLong_FromLongLong((intptr_t)(data->data)); return PyLong_FromSsize_t((Py_ssize_t)(data->data));
} }
static int static int
_long_shared(PyObject *obj, _PyCrossInterpreterData *data) _long_shared(PyObject *obj, _PyCrossInterpreterData *data)
{ {
int64_t value = PyLong_AsLongLong(obj); /* Note that this means the size of shareable ints is bounded by
* sys.maxsize. Hence on 32-bit architectures that is half the
* size of maximum shareable ints on 64-bit.
*/
Py_ssize_t value = PyLong_AsSsize_t(obj);
if (value == -1 && PyErr_Occurred()) { if (value == -1 && PyErr_Occurred()) {
if (PyErr_ExceptionMatches(PyExc_OverflowError)) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
PyErr_SetString(PyExc_OverflowError, "try sending as bytes"); PyErr_SetString(PyExc_OverflowError, "try sending as bytes");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment