From: Cody Maloney Date: Thu, 4 Jul 2024 12:59:18 +0000 (-0700) Subject: gh-120754: Update estimated_size in C truncate (#121357) X-Git-Tag: v3.14.0a1~1228 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index d5bf328eee9c..5d9d87d6118a 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 */