summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-10-17 23:58:40 -0700
committerGitHub <noreply@github.com>2018-10-17 23:58:40 -0700
commit178d1c07778553bf66e09fe0bb13796be3fb9abf (patch)
tree30bb65bdf044cefc0dc90c46ebbf5ddc50876650 /Python
parent35ae99d7b394af0ce01460f7bccd7449a82289ad (diff)
downloadcpython-git-178d1c07778553bf66e09fe0bb13796be3fb9abf.tar.gz
bpo-24658: Fix read/write greater than 2 GiB on macOS (GH-1705)
On macOS, fix reading from and writing into a file with a size larger than 2 GiB. (cherry picked from commit 74a8b6ea7e0a8508b13a1c75ec9b91febd8b5557) Co-authored-by: Stéphane Wirtel <stephane@wirtel.be>
Diffstat (limited to 'Python')
-rw-r--r--Python/fileutils.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/Python/fileutils.c b/Python/fileutils.c
index b413f4e1e6..e72ce543cb 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1363,18 +1363,9 @@ _Py_read(int fd, void *buf, size_t count)
* handler raised an exception. */
assert(!PyErr_Occurred());
-#ifdef MS_WINDOWS
- if (count > INT_MAX) {
- /* On Windows, the count parameter of read() is an int */
- count = INT_MAX;
- }
-#else
- if (count > PY_SSIZE_T_MAX) {
- /* if count is greater than PY_SSIZE_T_MAX,
- * read() result is undefined */
- count = PY_SSIZE_T_MAX;
+ if (count > _PY_READ_MAX) {
+ count = _PY_READ_MAX;
}
-#endif
_Py_BEGIN_SUPPRESS_IPH
do {
@@ -1425,15 +1416,10 @@ _Py_write_impl(int fd, const void *buf, size_t count, int gil_held)
depending on heap usage). */
count = 32767;
}
- else if (count > INT_MAX)
- count = INT_MAX;
-#else
- if (count > PY_SSIZE_T_MAX) {
- /* write() should truncate count to PY_SSIZE_T_MAX, but it's safer
- * to do it ourself to have a portable behaviour. */
- count = PY_SSIZE_T_MAX;
- }
#endif
+ if (count > _PY_WRITE_MAX) {
+ count = _PY_WRITE_MAX;
+ }
if (gil_held) {
do {