(original) (raw)

changeset: 86719:4749c3ac0654 user: Victor Stinner victor.stinner@gmail.com date: Tue Oct 29 02:23:46 2013 +0100 files: Modules/_io/iobase.c description: Issue #18408: Fix iobase_readline(), handle PyByteArray_Resize() failure diff -r 7f4a976829f1 -r 4749c3ac0654 Modules/_io/iobase.c --- a/Modules/_io/iobase.c Tue Oct 29 01:46:24 2013 +0100 +++ b/Modules/_io/iobase.c Tue Oct 29 02:23:46 2013 +0100 @@ -1,9 +1,9 @@ /* An implementation of the I/O abstract base classes hierarchy as defined by PEP 3116 - "New I/O" - + Classes defined here: IOBase, RawIOBase. - + Written by Amaury Forgeot d'Arc and Antoine Pitrou */ @@ -19,7 +19,7 @@ typedef struct { PyObject_HEAD - + PyObject *dict; PyObject *weakreflist; } iobase; @@ -530,7 +530,10 @@ } old_size = PyByteArray_GET_SIZE(buffer); - PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b)); + if (PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b)) < 0) { + Py_DECREF(b); + goto fail; + } memcpy(PyByteArray_AS_STRING(buffer) + old_size, PyBytes_AS_STRING(b), PyBytes_GET_SIZE(b)); @@ -835,7 +838,7 @@ int r; PyObject *chunks = PyList_New(0); PyObject *result; - + if (chunks == NULL) return NULL; /victor.stinner@gmail.com