mirror of
https://github.com/python/cpython
synced 2024-10-14 17:40:01 +00:00
gh-81403: Fix for CacheFTPHandler in urllib (#13951)
bpo-37222: Fix for CacheFTPHandler in urllib A call to FTP.ntransfercmd must be followed by FTP.voidresp to clear the "end transfer" message. Without this, the client and server get out of sync, which will result in an error if the FTP instance is reused to open a second URL. This scenario occurs for even the most basic usage of CacheFTPHandler. Reverts the patch merged as a resolution to bpo-16270 and adds a test case for the CacheFTPHandler in test_urllib2net.py. Co-authored-by: Senthil Kumaran <senthil@python.org>
This commit is contained in:
parent
0fd3891758
commit
e38bebb9ee
|
@ -134,7 +134,9 @@ def setUp(self):
|
|||
# They do sometimes catch some major disasters, though.
|
||||
|
||||
def test_ftp(self):
|
||||
# Testing the same URL twice exercises the caching in CacheFTPHandler
|
||||
urls = [
|
||||
'ftp://www.pythontest.net/README',
|
||||
'ftp://www.pythontest.net/README',
|
||||
('ftp://www.pythontest.net/non-existent-file',
|
||||
None, urllib.error.URLError),
|
||||
|
|
|
@ -2475,7 +2475,13 @@ def retrfile(self, file, type):
|
|||
return (ftpobj, retrlen)
|
||||
|
||||
def endtransfer(self):
|
||||
if not self.busy:
|
||||
return
|
||||
self.busy = 0
|
||||
try:
|
||||
self.ftp.voidresp()
|
||||
except ftperrors():
|
||||
pass
|
||||
|
||||
def close(self):
|
||||
self.keepalive = False
|
||||
|
|
Loading…
Reference in a new issue