gh-120754: Update estimated_size in C truncate (#121357)
https://github.com/python/cpython/commit/06a1c3fb24c4be9ce3b432022ebaf3f913f... commit: 06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7 branch: main author: Cody Maloney <cmaloney@users.noreply.github.com> committer: vstinner <vstinner@python.org> date: 2024-07-04T12:59:18Z summary: gh-120754: Update estimated_size in C truncate (#121357) Sometimes a large file is truncated (test_largefile). While estimated_size is used as a estimate (the read will stil get the number of bytes in the file), that it is much larger than the actual size of data can result in a significant over allocation and sometimes lead to a MemoryError / running out of memory. This brings the C implementation to match the Python _pyio implementation. files: M Modules/_io/fileio.c diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index d5bf328eee9c10..5d9d87d6118a75 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -1094,6 +1094,12 @@ _io_FileIO_truncate_impl(fileio *self, PyTypeObject *cls, PyObject *posobj) return NULL; } + /* Sometimes a large file is truncated. While estimated_size is used as a + estimate, that it is much larger than the actual size can result in a + significant over allocation and sometimes a MemoryError / running out of + memory. */ + self->estimated_size = pos; + return posobj; } #endif /* HAVE_FTRUNCATE */
participants (1)
-
vstinner