Merge: #17443: Fix buffering in IMAP4_stream.

In Python2 Popen uses *FILE objects, which wind up buffering even though
subprocess defaults to no buffering.  In Python3, subprocess streams really
are unbuffered by default, but the imaplib code assumes read is buffered.  This
patch uses the default buffer size from the io module to get buffered streams
from Popen.

Much debugging work and patch by Diane Trout.

The imap protocol is too complicated to write a test for this simple
change with our current level of test infrastructure.
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index f8c7ffd..724f9d1 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -24,6 +24,8 @@
 
 import binascii, errno, random, re, socket, subprocess, sys, time, calendar
 from datetime import datetime, timezone, timedelta
+from io import DEFAULT_BUFFER_SIZE
+
 try:
     import ssl
     HAVE_SSL = True
@@ -1244,6 +1246,7 @@
         self.sock = None
         self.file = None
         self.process = subprocess.Popen(self.command,
+            bufsize=DEFAULT_BUFFER_SIZE,
             stdin=subprocess.PIPE, stdout=subprocess.PIPE,
             shell=True, close_fds=True)
         self.writefile = self.process.stdin
diff --git a/Misc/ACKS b/Misc/ACKS
index e2455ae..2d29e99 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1216,6 +1216,7 @@
 Matthias Troffaes
 Tom Tromey
 John Tromp
+Diane Trout
 Jason Trowbridge
 Brent Tubbs
 Anthony Tuininga
diff --git a/Misc/NEWS b/Misc/NEWS
index 95994ff..7e126c4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -193,6 +193,10 @@
 Library
 -------
 
+- Issue #17443: impalib.IMAP4_stream was using the default unbuffered IO
+  in subprocess, but the imap code assumes buffered IO.  In Python2 this
+  worked by accident.  IMAP4_stream now explicitly uses buffered IO.
+
 - Issue #17476: Fixed regression relative to Python2 in undocumented pydoc
   'allmethods'; it was missing unbound methods on the class.