Kaydet (Commit) 6f84659e authored tarafından Victor Stinner's avatar Victor Stinner

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

...@@ -12,6 +12,8 @@ What's New in Python 3.3.1? ...@@ -12,6 +12,8 @@ What's New in Python 3.3.1?
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
......
...@@ -607,7 +607,7 @@ fileio_readall(fileio *self) ...@@ -607,7 +607,7 @@ fileio_readall(fileio *self)
#endif #endif
PyObject *result; PyObject *result;
Py_ssize_t total = 0; Py_ssize_t total = 0;
int n; Py_ssize_t n;
size_t newsize; size_t newsize;
if (self->fd < 0) if (self->fd < 0)
...@@ -656,9 +656,18 @@ fileio_readall(fileio *self) ...@@ -656,9 +656,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