Uh oh!
There was an error while loading. Please reload this page.
gh-151814: Fix unbounded memory growth from repeated empty writes to io.TextIOWrapper - #151817
Conversation
| else if (!PyList_CheckExact(self->pending_bytes)) { | ||
| PyObject *list = PyList_New(2); | ||
| if (list == NULL) { | ||
| if (bytes_len > 0) { |
There was a problem hiding this comment.
Git seems to render the diff poorly, locally I see with -w (--ignore-all-space):
$ git show -w HEAD -- Modules/_io/textio.c
commit c6b5163133619febd0fbe8c327e52399b1a54ffd (HEAD -> textio-acc, origin/textio-acc)
Author: Stan Ulbrych <stan@python.org>
Date: Sat Jun 20 21:16:54 2026 +0100
Fix unbounded memory growth from repeated empty writes to io.TextIOWrapper
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 24e08cec88f..5b2a20a30c2 100644
--- a/Modules/_io/textio.c+++ b/Modules/_io/textio.c@@ -1820,6 +1820,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text)
}
}
+ if (bytes_len > 0) {
if (self->pending_bytes == NULL) {
assert(self->pending_bytes_count == 0);
self->pending_bytes = b;
@@ -1846,6 +1847,11 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text)
}
self->pending_bytes_count += bytes_len;
+ }+ else {+ Py_DECREF(b);+ }+
if (self->pending_bytes_count >= self->chunk_size || needflush ||
text_needflush) {
if (_textiowrapper_writeflush(self) < 0)There was a problem hiding this comment.
Cool, thanks! But, it seems to be limited and unfortunately doesn’t support all options, ?ignore-all-space=1 didn't work for me.
io.TextIOWrapperUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Thanks @StanFromIreland for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15. |
StanFromIreland
commented
Jun 24, 2026
Thanks for the review! |
GH-152071 is a backport of this pull request to the 3.15 branch. |
GH-152072 is a backport of this pull request to the 3.14 branch. |
GH-152073 is a backport of this pull request to the 3.13 branch. |
Uh oh!
There was an error while loading. Please reload this page.