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.
This commit is contained in:
Raymond Hettinger 2005-04-05 04:31:09 +00:00
parent 714f87821f
commit c88a6c75df
1 changed files with 16 additions and 7 deletions

View File

@ -208,13 +208,13 @@ class FTP:
if self.debugging: print '*resp*', self.sanitize(resp) if self.debugging: print '*resp*', self.sanitize(resp)
self.lastresp = resp[:3] self.lastresp = resp[:3]
c = resp[:1] c = resp[:1]
if c in ('1', '2', '3'):
return resp
if c == '4': if c == '4':
raise error_temp, resp raise error_temp, resp
if c == '5': if c == '5':
raise error_perm, resp raise error_perm, resp
if c not in '123':
raise error_proto, resp raise error_proto, resp
return resp
def voidresp(self): def voidresp(self):
"""Expect a response beginning with '2'.""" """Expect a response beginning with '2'."""
@ -582,17 +582,17 @@ def parse229(resp, peer):
Raises error_proto if it does not contain '(|||port|)' Raises error_proto if it does not contain '(|||port|)'
Return ('host.addr.as.numbers', port#) tuple.''' Return ('host.addr.as.numbers', port#) tuple.'''
if resp[:3] <> '229': if resp[:3] != '229':
raise error_reply, resp raise error_reply, resp
left = resp.find('(') left = resp.find('(')
if left < 0: raise error_proto, resp if left < 0: raise error_proto, resp
right = resp.find(')', left + 1) right = resp.find(')', left + 1)
if right < 0: if right < 0:
raise error_proto, resp # should contain '(|||port|)' 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 raise error_proto, resp
parts = resp[left + 1:right].split(resp[left+1]) parts = resp[left + 1:right].split(resp[left+1])
if len(parts) <> 5: if len(parts) != 5:
raise error_proto, resp raise error_proto, resp
host = peer[0] host = peer[0]
port = int(parts[3]) port = int(parts[3])
@ -755,7 +755,16 @@ class Netrc:
def test(): def test():
'''Test program. '''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 debugging = 0
rcfile = None rcfile = None