changeset: 102396:54cc0480904c branch: 3.5 parent: 102394:610b6a5d0c34 user: Martin Panter date: Mon Jul 18 07:53:13 2016 +0000 files: Misc/NEWS Objects/bytearrayobject.c description: Issue #27507: Check for integer overflow in bytearray.extend() Patch by Xiang Zhang. diff -r 610b6a5d0c34 -r 54cc0480904c Misc/NEWS --- a/Misc/NEWS Sun Jul 17 21:58:01 2016 -0700 +++ b/Misc/NEWS Mon Jul 18 07:53:13 2016 +0000 @@ -22,6 +22,9 @@ - Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. +- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by + Xiang Zhang. + - Issue #27443: __length_hint__() of bytearray iterators no longer return a negative integer for a resized bytearray. diff -r 610b6a5d0c34 -r 54cc0480904c Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c Sun Jul 17 21:58:01 2016 -0700 +++ b/Objects/bytearrayobject.c Mon Jul 18 07:53:13 2016 +0000 @@ -2474,7 +2474,17 @@ Py_DECREF(item); if (len >= buf_size) { - buf_size = len + (len >> 1) + 1; + Py_ssize_t addition; + if (len == PY_SSIZE_T_MAX) { + Py_DECREF(it); + Py_DECREF(bytearray_obj); + return PyErr_NoMemory(); + } + addition = len >> 1; + if (addition > PY_SSIZE_T_MAX - len - 1) + buf_size = PY_SSIZE_T_MAX; + else + buf_size = len + addition + 1; if (PyByteArray_Resize((PyObject *)bytearray_obj, buf_size) < 0) { Py_DECREF(it); Py_DECREF(bytearray_obj);