summaryrefslogtreecommitdiffstats
path: root/Modules/_io
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-03-20 22:37:55 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-03-20 22:37:55 (GMT)
commitb938bcd211bfcab13be38200a2f59947691118bb (patch)
tree04afc2a782ce970af29f149651402c90015c23e4 /Modules/_io
parent0421810b3b2dbf41c0ddb86d9d7711ca9dec2a2b (diff)
parente0daff1c61e323d2a39dd8241de67082d1f10fd7 (diff)
downloadcpython-b938bcd211bfcab13be38200a2f59947691118bb.zip
cpython-b938bcd211bfcab13be38200a2f59947691118bb.tar.gz
cpython-b938bcd211bfcab13be38200a2f59947691118bb.tar.bz2
(merge) Issue #11395: io.FileIO().write() clamps the data length to 32,767
bytes on Windows if the file is a TTY to workaround a Windows bug. The Windows console returns an error (12: not enough space error) on writing into stdout if stdout mode is binary and the length is greater than 66,000 bytes (or less, depending on heap usage).
Diffstat (limited to 'Modules/_io')
-rw-r--r--Modules/_io/fileio.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index f96f2e2..1aa5ee9 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -712,7 +712,14 @@ fileio_write(fileio *self, PyObject *args)
errno = 0;
len = pbuf.len;
#if defined(MS_WIN64) || defined(MS_WINDOWS)
- if (len > INT_MAX)
+ if (len > 32767 && isatty(self->fd)) {
+ /* Issue #11395: the Windows console returns an error (12: not
+ enough space error) on writing into stdout if stdout mode is
+ binary and the length is greater than 66,000 bytes (or less,
+ depending on heap usage). */
+ len = 32767;
+ }
+ else if (len > INT_MAX)
len = INT_MAX;
n = write(self->fd, pbuf.buf, (int)len);
#else