diff -r 9e9aa450a5f8 Lib/test/test_subprocess.py --- a/Lib/test/test_subprocess.py Sat Mar 05 20:29:01 2011 +0100 +++ b/Lib/test/test_subprocess.py Sat Mar 05 16:47:07 2011 -0800 @@ -119,6 +119,24 @@ env=newenv) self.assertEqual(rc, 1) + def test_stdout_large(self): + # see: issue #11395 + p = subprocess.Popen([sys.executable, "-c", + "print(b'a' * 66000)"], + stderr=subprocess.PIPE) + self.addCleanup(p.stderr.close) + p.wait() + self.assertEqual(p.returncode, 0) + + def test_stdout_binlarge(self): + # see: issue #11395 + p = subprocess.Popen([sys.executable, "-u", "-c", + "print(b'a' * 66000)"], + stderr=subprocess.PIPE) + self.addCleanup(p.stderr.close) + p.wait() + self.assertEqual(p.returncode, 0) + def test_stdin_none(self): # .stdin is None when not redirected p = subprocess.Popen([sys.executable, "-c", 'print("banana")'], diff -r 9e9aa450a5f8 Modules/_io/fileio.c --- a/Modules/_io/fileio.c Sat Mar 05 20:29:01 2011 +0100 +++ b/Modules/_io/fileio.c Sat Mar 05 16:47:07 2011 -0800 @@ -650,7 +650,7 @@ fileio_write(fileio *self, PyObject *args) { Py_buffer pbuf; - Py_ssize_t n; + Py_ssize_t n, len; if (self->fd < 0) return err_closed(); @@ -663,7 +663,17 @@ if (_PyVerify_fd(self->fd)) { Py_BEGIN_ALLOW_THREADS errno = 0; - n = write(self->fd, pbuf.buf, pbuf.len); + len = pbuf.len; +#if defined(MS_WIN64) || defined(MS_WINDOWS) + /* See: issue #11395 */ + if (len > 32000 && isatty(self->fd)) + len = 32000; + if (len > INT_MAX) + len = INT_MAX; + n = write(self->fd, pbuf.buf, (int)len); +#else + n = write(self->fd, pbuf.buf, len); +#endif Py_END_ALLOW_THREADS } else n = -1;