diff options
author | Raymond Hettinger <python@rcn.com> | 2005-04-05 04:31:09 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2005-04-05 04:31:09 (GMT) |
commit | c88a6c75df1e2dac818b63a36db6c8282f4541f7 (patch) | |
tree | a499ddd7ac1404c37c21206da7f5e7ca7d7dc4ec | |
parent | 714f87821f0f5a84ca43ce640407c15f689fa47c (diff) | |
download | cpython-c88a6c75df1e2dac818b63a36db6c8282f4541f7.zip cpython-c88a6c75df1e2dac818b63a36db6c8282f4541f7.tar.gz cpython-c88a6c75df1e2dac818b63a36db6c8282f4541f7.tar.bz2 |
SF bug #1168983: ftplib.py string index out of range
* resp[:1] in '123' # after Py2.2, this allowed blank responses to pass.
* replace <> with !=
* provide a usage message for empty command line calls
Backport candidate.
-rw-r--r-- | Lib/ftplib.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/Lib/ftplib.py b/Lib/ftplib.py index 9486918..937ee4e 100644 --- a/Lib/ftplib.py +++ b/Lib/ftplib.py @@ -208,13 +208,13 @@ class FTP: if self.debugging: print '*resp*', self.sanitize(resp) self.lastresp = resp[:3] c = resp[:1] + if c in ('1', '2', '3'): + return resp if c == '4': raise error_temp, resp if c == '5': raise error_perm, resp - if c not in '123': - raise error_proto, resp - return resp + raise error_proto, resp def voidresp(self): """Expect a response beginning with '2'.""" @@ -582,17 +582,17 @@ def parse229(resp, peer): Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.''' - if resp[:3] <> '229': + if resp[:3] != '229': raise error_reply, resp left = resp.find('(') if left < 0: raise error_proto, resp right = resp.find(')', left + 1) if right < 0: raise error_proto, resp # should contain '(|||port|)' - if resp[left + 1] <> resp[right - 1]: + if resp[left + 1] != resp[right - 1]: raise error_proto, resp parts = resp[left + 1:right].split(resp[left+1]) - if len(parts) <> 5: + if len(parts) != 5: raise error_proto, resp host = peer[0] port = int(parts[3]) @@ -755,7 +755,16 @@ class Netrc: def test(): '''Test program. - Usage: ftp [-d] [-r[file]] host [-l[dir]] [-d[dir]] [-p] [file] ...''' + Usage: ftp [-d] [-r[file]] host [-l[dir]] [-d[dir]] [-p] [file] ... + + -d dir + -l list + -p password + ''' + + if len(sys.argv) < 2: + print test.__doc__ + sys.exit(0) debugging = 0 rcfile = None |