summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na92@gmail.com>2020-01-12 02:39:15 +0900
committerVictor Stinner <vstinner@python.org>2020-01-11 18:39:15 +0100
commit1b335ae281631a12201fdec29b3c55d97166fc06 (patch)
treee067d97221416877e47fad06e6a14cded864b468
parent136735c1a2efb320e4cbb64b40f1191228745b39 (diff)
downloadcpython-git-1b335ae281631a12201fdec29b3c55d97166fc06.tar.gz
bpo-39259: nntplib.NNTP/NNTP_SSL now reject timeout = 0 (GH-17936)
nntplib.NNTP and nntplib.NNTP_SSL now raise a ValueError if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket.
-rw-r--r--Doc/library/nntplib.rst8
-rw-r--r--Doc/whatsnew/3.9.rst7
-rw-r--r--Lib/nntplib.py2
-rw-r--r--Lib/test/test_nntplib.py4
-rw-r--r--Misc/NEWS.d/next/Library/2020-01-11-00-32-45.bpo-39259._S5VjC.rst3
5 files changed, 24 insertions, 0 deletions
diff --git a/Doc/library/nntplib.rst b/Doc/library/nntplib.rst
index e8480b5480..7697365152 100644
--- a/Doc/library/nntplib.rst
+++ b/Doc/library/nntplib.rst
@@ -93,6 +93,10 @@ The module itself defines the following classes:
.. versionchanged:: 3.3
Support for the :keyword:`with` statement was added.
+ .. versionchanged:: 3.9
+ If the *timeout* parameter is set to be zero, it will raise a
+ :class:`ValueError` to prevent the creation of a non-blocking socket.
+
.. class:: NNTP_SSL(host, port=563, user=None, password=None, ssl_context=None, readermode=None, usenetrc=False, [timeout])
Return a new :class:`NNTP_SSL` object, representing an encrypted
@@ -122,6 +126,10 @@ The module itself defines the following classes:
:attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see
:data:`ssl.HAS_SNI`).
+ .. versionchanged:: 3.9
+ If the *timeout* parameter is set to be zero, it will raise a
+ :class:`ValueError` to prevent the creation of a non-blocking socket.
+
.. exception:: NNTPError
Derived from the standard exception :exc:`Exception`, this is the base
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 3320b7cff4..8cfb5725bb 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -177,6 +177,13 @@ with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and
:class:`~imaplib.IMAP4_stream` were applied to this change.
(Contributed by Dong-hee Na in :issue:`38615`.)
+nntplib
+-------
+
+:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a :class:`ValueError`
+if the given timeout for their constructor is zero to prevent the creation of
+a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
+
os
--
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 0ab51853b5..8951203f32 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -1056,6 +1056,8 @@ class NNTP(_NNTPBase):
raise
def _create_socket(self, timeout):
+ if timeout is not None and not timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
sys.audit("nntplib.connect", self, self.host, self.port)
return socket.create_connection((self.host, self.port), timeout)
diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py
index 88c54f4e6f..fdd76f9e9b 100644
--- a/Lib/test/test_nntplib.py
+++ b/Lib/test/test_nntplib.py
@@ -258,6 +258,10 @@ class NetworkedNNTPTestsMixin:
# value
setattr(cls, name, wrap_meth(meth))
+ def test_timeout(self):
+ with self.assertRaises(ValueError):
+ self.NNTP_CLASS(self.NNTP_HOST, timeout=0, usenetrc=False)
+
def test_with_statement(self):
def is_connected():
if not hasattr(server, 'file'):
diff --git a/Misc/NEWS.d/next/Library/2020-01-11-00-32-45.bpo-39259._S5VjC.rst b/Misc/NEWS.d/next/Library/2020-01-11-00-32-45.bpo-39259._S5VjC.rst
new file mode 100644
index 0000000000..a454572c80
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-11-00-32-45.bpo-39259._S5VjC.rst
@@ -0,0 +1,3 @@
+:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.