From 06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7 Mon Sep 17 00:00:00 2001 From: Cody Maloney Date: Thu, 4 Jul 2024 05:59:18 -0700 Subject: [PATCH] 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. --- Modules/_io/fileio.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index d5bf328eee9..5d9d87d6118 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 */