summaryrefslogtreecommitdiffstats
path: root/Modules/_io/stringio.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-06-30 17:57:50 (GMT)
committerGitHub <noreply@github.com>2018-06-30 17:57:50 (GMT)
commitfdb5a50ef34f7951c3b01eb77b1359725a9ad670 (patch)
tree772e7c9d7632341fcf835dbbe84fbc4736ec9466 /Modules/_io/stringio.c
parent0cdf5f42898350261c5ff65d96334e736130780f (diff)
downloadcpython-fdb5a50ef34f7951c3b01eb77b1359725a9ad670.zip
cpython-fdb5a50ef34f7951c3b01eb77b1359725a9ad670.tar.gz
cpython-fdb5a50ef34f7951c3b01eb77b1359725a9ad670.tar.bz2
bpo-25862: Fix several bugs in the _io module. (GH-8026)
They can be exposed when some C API calls fail due to lack of memory. * Failed Py_BuildValue() could cause an assertion error in the following TextIOWrapper.tell(). * input_chunk could be decrefed twice in TextIOWrapper.seek() after failed Py_BuildValue(). * initvalue could leak in StringIO.__getstate__() after failed PyDict_Copy().
Diffstat (limited to 'Modules/_io/stringio.c')
-rw-r--r--Modules/_io/stringio.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index f280b30..5a03715 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -826,8 +826,10 @@ stringio_getstate(stringio *self, PyObject *Py_UNUSED(ignored))
}
else {
dict = PyDict_Copy(self->dict);
- if (dict == NULL)
+ if (dict == NULL) {
+ Py_DECREF(initvalue);
return NULL;
+ }
}
state = Py_BuildValue("(OOnN)", initvalue,