[Python-checkins] GH-94857: fix test_io refleak (GH-94858)
miss-islington
webhook-mailer at python.org
Mon Jul 18 10:18:15 EDT 2022
https://github.com/python/cpython/commit/a914fa979e0d6043da4b591e02d2b99d26853411
commit: a914fa979e0d6043da4b591e02d2b99d26853411
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-07-18T07:17:55-07:00
summary:
GH-94857: fix test_io refleak (GH-94858)
(cherry picked from commit 631160c262b40bf4ce3da6cd7bbb972ae2e9fc91)
Co-authored-by: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2022-07-15-08-13-51.gh-issue-94857.9_KvZJ.rst
M Modules/_io/textio.c
diff --git a/Misc/NEWS.d/next/Library/2022-07-15-08-13-51.gh-issue-94857.9_KvZJ.rst b/Misc/NEWS.d/next/Library/2022-07-15-08-13-51.gh-issue-94857.9_KvZJ.rst
new file mode 100644
index 0000000000000..e684415595d1d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-07-15-08-13-51.gh-issue-94857.9_KvZJ.rst
@@ -0,0 +1 @@
+Fix refleak in ``_io.TextIOWrapper.reconfigure``. Patch by Kumar Aditya.
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 660396b8b03ea..89094d66f3834 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -1247,6 +1247,7 @@ textiowrapper_change_encoding(textio *self, PyObject *encoding,
if (errors == Py_None) {
errors = self->errors;
}
+ Py_INCREF(encoding);
}
else {
if (_PyUnicode_EqualToASCIIString(encoding, "locale")) {
@@ -1254,6 +1255,8 @@ textiowrapper_change_encoding(textio *self, PyObject *encoding,
if (encoding == NULL) {
return -1;
}
+ } else {
+ Py_INCREF(encoding);
}
if (errors == Py_None) {
errors = &_Py_ID(strict);
@@ -1262,6 +1265,7 @@ textiowrapper_change_encoding(textio *self, PyObject *encoding,
const char *c_errors = PyUnicode_AsUTF8(errors);
if (c_errors == NULL) {
+ Py_DECREF(encoding);
return -1;
}
@@ -1269,16 +1273,17 @@ textiowrapper_change_encoding(textio *self, PyObject *encoding,
PyObject *codec_info = _PyCodec_LookupTextEncoding(
PyUnicode_AsUTF8(encoding), "codecs.open()");
if (codec_info == NULL) {
+ Py_DECREF(encoding);
return -1;
}
if (_textiowrapper_set_decoder(self, codec_info, c_errors) != 0 ||
_textiowrapper_set_encoder(self, codec_info, c_errors) != 0) {
Py_DECREF(codec_info);
+ Py_DECREF(encoding);
return -1;
}
Py_DECREF(codec_info);
- Py_INCREF(encoding);
Py_INCREF(errors);
Py_SETREF(self->encoding, encoding);
Py_SETREF(self->errors, errors);
More information about the Python-checkins
mailing list