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:
parent
714f87821f
commit
c88a6c75df
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue