]> granicus.if.org Git - python/commitdiff
bpo-18540: Fix EAI_NONAME in imaplib.IMAP4*() (GH-8634)
authorBerker Peksag <berker.peksag@gmail.com>
Tue, 7 Aug 2018 02:12:18 +0000 (05:12 +0300)
committerGitHub <noreply@github.com>
Tue, 7 Aug 2018 02:12:18 +0000 (05:12 +0300)
Lib/imaplib.py
Lib/test/test_imaplib.py
Misc/NEWS.d/next/Library/2018-08-02-21-28-38.bpo-18540.AryoYY.rst [new file with mode: 0644]

index 0dfd8524a53a3542bd52b6019f7145650ec7353a..e451413acf5a21b0bc198f3e5cdae2298625c758 100644 (file)
@@ -282,7 +282,11 @@ class IMAP4:
 
 
     def _create_socket(self):
-        return socket.create_connection((self.host, self.port))
+        # Default value of IMAP4.host is '', but socket.getaddrinfo()
+        # (which is used by socket.create_connection()) expects None
+        # as a default value for host.
+        host = None if not self.host else self.host
+        return socket.create_connection((host, self.port))
 
     def open(self, host = '', port = IMAP4_PORT):
         """Setup connection to remote server on "host:port"
index f16bacd0006c8767cbf201495285f8f1400ebeda..a0b598d0c7840926a4aeba5458b411021ee1b5aa 100644 (file)
@@ -1,6 +1,7 @@
 from test import support
 
 from contextlib import contextmanager
+import errno
 import imaplib
 import os.path
 import socketserver
@@ -69,6 +70,19 @@ class TestImaplib(unittest.TestCase):
         for t in self.timevalues():
             imaplib.Time2Internaldate(t)
 
+    def test_imap4_host_default_value(self):
+        expected_errnos = [
+            # This is the exception that should be raised.
+            errno.ECONNREFUSED,
+        ]
+        if hasattr(errno, 'EADDRNOTAVAIL'):
+            # socket.create_connection() fails randomly with
+            # EADDRNOTAVAIL on Travis CI.
+            expected_errnos.append(errno.EADDRNOTAVAIL)
+        with self.assertRaises(OSError) as cm:
+            imaplib.IMAP4()
+        self.assertIn(cm.exception.errno, expected_errnos)
+
 
 if ssl:
     class SecureTCPServer(socketserver.TCPServer):
diff --git a/Misc/NEWS.d/next/Library/2018-08-02-21-28-38.bpo-18540.AryoYY.rst b/Misc/NEWS.d/next/Library/2018-08-02-21-28-38.bpo-18540.AryoYY.rst
new file mode 100644 (file)
index 0000000..3ffd9f6
--- /dev/null
@@ -0,0 +1,3 @@
+The :class:`imaplib.IMAP4` and :class:`imaplib.IMAP4_SSL` classes now
+resolve to the local host IP correctly when the default value of *host*
+parameter (``''``) is used.