]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-120754: Update estimated_size in C truncate (#121357)
authorCody Maloney <cmaloney@users.noreply.github.com>
Thu, 4 Jul 2024 12:59:18 +0000 (05:59 -0700)
committerGitHub <noreply@github.com>
Thu, 4 Jul 2024 12:59:18 +0000 (12:59 +0000)
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

index d5bf328eee9c106c1d64042cf35c80c406a4f8c9..5d9d87d6118a751e2f90d5604fbd98d93850cd92 100644 (file)
@@ -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 */