Commit e4dcbbd7 authored by Berker Peksag's avatar Berker Peksag Committed by GitHub

bpo-18540: Fix EAI_NONAME in imaplib.IMAP4*() (GH-8634)

parent 3c1b5904
......@@ -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"
......
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):
......
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.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment