diff options
-rw-r--r-- | Lib/urllib.py | 16 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 16 insertions, 3 deletions
diff --git a/Lib/urllib.py b/Lib/urllib.py index 2e720aca72..6608abc771 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -872,9 +872,19 @@ class ftpwrapper: if not conn: # Set transfer mode to ASCII! self.ftp.voidcmd('TYPE A') - # Try a directory listing - if file: cmd = 'LIST ' + file - else: cmd = 'LIST' + # Try a directory listing. Verify that directory exists. + if file: + pwd = self.ftp.pwd() + try: + try: + self.ftp.cwd(file) + except ftplib.error_perm, reason: + raise IOError, ('ftp error', reason), sys.exc_info()[2] + finally: + self.ftp.cwd(pwd) + cmd = 'LIST ' + file + else: + cmd = 'LIST' conn = self.ftp.ntransfercmd(cmd) self.busy = 1 # Pass back both a suitably decorated object and a retrieval length @@ -369,6 +369,9 @@ Core and builtins Library ------- +- #1664522: in urllib, don't read non-existing directories in ftp mode, + returning a 0-byte file -- raise an IOError instead. + - #856047: respect the ``no_proxy`` environment variable when using the ``http_proxy`` etc. environment variables in urllib. |