Commit c44057df authored by Victor Stinner's avatar Victor Stinner

Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB

parent 549d465f
...@@ -10,6 +10,8 @@ What's New in Python 3.2.4 ...@@ -10,6 +10,8 @@ What's New in Python 3.2.4
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.
- Issue #16455: On FreeBSD and Solaris, if the locale is C, the - Issue #16455: On FreeBSD and Solaris, if the locale is C, the
ASCII/surrogateescape codec is now used, instead of the locale encoding, to ASCII/surrogateescape codec is now used, instead of the locale encoding, to
decode the command line arguments. This change fixes inconsistencies with decode the command line arguments. This change fixes inconsistencies with
......
...@@ -558,7 +558,7 @@ fileio_readall(fileio *self) ...@@ -558,7 +558,7 @@ fileio_readall(fileio *self)
{ {
PyObject *result; PyObject *result;
Py_ssize_t total = 0; Py_ssize_t total = 0;
int n; Py_ssize_t n;
if (self->fd < 0) if (self->fd < 0)
return err_closed(); return err_closed();
...@@ -591,9 +591,18 @@ fileio_readall(fileio *self) ...@@ -591,9 +591,18 @@ fileio_readall(fileio *self)
} }
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
errno = 0; errno = 0;
n = newsize - total;
#if defined(MS_WIN64) || defined(MS_WINDOWS)
if (n > INT_MAX)
n = INT_MAX;
n = read(self->fd,
PyBytes_AS_STRING(result) + total,
(int)n);
#else
n = read(self->fd, n = read(self->fd,
PyBytes_AS_STRING(result) + total, PyBytes_AS_STRING(result) + total,
newsize - total); n);
#endif
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
if (n == 0) if (n == 0)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment