]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39259: nntplib.NNTP/NNTP_SSL now reject timeout = 0 (GH-17936)
authorDong-hee Na <donghee.na92@gmail.com>
Sat, 11 Jan 2020 17:39:15 +0000 (02:39 +0900)
committerVictor Stinner <vstinner@python.org>
Sat, 11 Jan 2020 17:39:15 +0000 (18:39 +0100)
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.

Doc/library/nntplib.rst
Doc/whatsnew/3.9.rst
Lib/nntplib.py
Lib/test/test_nntplib.py
Misc/NEWS.d/next/Library/2020-01-11-00-32-45.bpo-39259._S5VjC.rst [new file with mode: 0644]

index e8480b548073ab043980d2107ff1a82bd348eaf5..76973651526a8ed36d21ea011051950f41cfb7a4 100644 (file)
@@ -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
index 3320b7cff42db09103cf426b10d1177e306f7387..8cfb5725bb5e14afac87a5243e0e531117a4ce5d 100644 (file)
@@ -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
 --
 
index 0ab51853b52fdcb044f7c575cb7236366c30dac1..8951203f325c85fec5456ab7747e732db0461de8 100644 (file)
@@ -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)
 
index 88c54f4e6f37d8ef65f0cd3dadc4575d8e2cfa44..fdd76f9e9b3559c3a60a585c21005b54128d0b6d 100644 (file)
@@ -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 (file)
index 0000000..a454572
--- /dev/null
@@ -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.