From cc024d18207f9967c707186eec77731a6c1eea35 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 29 Oct 2013 02:23:46 +0100 Subject: Issue #18408: Fix iobase_readline(), handle PyByteArray_Resize() failure --- Modules/_io/iobase.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index ae188dd..b58687e 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -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 @@ iobase_readline(PyObject *self, PyObject *args) } 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 @@ rawiobase_readall(PyObject *self, PyObject *args) int r; PyObject *chunks = PyList_New(0); PyObject *result; - + if (chunks == NULL) return NULL; -- cgit v0.12