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: ...@@ -282,7 +282,11 @@ class IMAP4:
def _create_socket(self): 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): def open(self, host = '', port = IMAP4_PORT):
"""Setup connection to remote server on "host:port" """Setup connection to remote server on "host:port"
......
from test import support from test import support
from contextlib import contextmanager from contextlib import contextmanager
import errno
import imaplib import imaplib
import os.path import os.path
import socketserver import socketserver
...@@ -69,6 +70,19 @@ class TestImaplib(unittest.TestCase): ...@@ -69,6 +70,19 @@ class TestImaplib(unittest.TestCase):
for t in self.timevalues(): for t in self.timevalues():
imaplib.Time2Internaldate(t) 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: if ssl:
class SecureTCPServer(socketserver.TCPServer): 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