diff options
author | Cody Maloney <cmaloney@users.noreply.github.com> | 2024-07-04 12:59:18 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-04 12:59:18 (GMT) |
commit | 06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7 (patch) | |
tree | 554935b738c91e14164782dfcfe2e504b74d47ab /Modules/_io/fileio.c | |
parent | 19d1e43e43df97d14c5ab415520b6ccd941e1c88 (diff) | |
download | cpython-06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7.zip cpython-06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7.tar.gz cpython-06a1c3fb24c4be9ce3b432022ebaf3f913f86ba7.tar.bz2 |
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.
Diffstat (limited to 'Modules/_io/fileio.c')
-rw-r--r-- | Modules/_io/fileio.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index d5bf328..5d9d87d 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 */ |