[ python-Bugs-1168983 ] ftplib.py string index out of range

SourceForge.net noreply at sourceforge.net
Wed Aug 24 07:10:56 CEST 2005


Bugs item #1168983, was opened at 2005-03-23 05:05
Message generated for change (Settings changed) made by rhettinger
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1168983&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.4
Status: Open
Resolution: Accepted
Priority: 5
Submitted By: David Carroll (vmlinuxz)
>Assigned to: Nobody/Anonymous (nobody)
Summary: ftplib.py string index out of range

Initial Comment:
The following code works great on all of the 2.3.x
releases I have used.

def
ftpFetch(localPath,remoteFileDate,ftpSite,ftpPass,ftpDir,ftpUser):
    print "Fetching split_mgr report"
    fileList=[]
    processList=[]
    ftp = FTP(ftpSite)
    ftp.login(ftpUser,ftpPass)               
    ftp.dir('LIST '+ftpDir,fileList.append)
    for x in range(len(fileList)):
        if (string.find(fileList[x],remoteFileDate) != -1):
            print fileList[x]
            TMP=fileList[x]
            output=localPath+str(TMP[45:])
            print output
            processList.append(output)
            print processList
            outfile = open(output,'w')
            ftp.retrbinary('RETR '+ftpDir+TMP[45:],
open(output, 'wb').write)
    ftp.quit()
    print processList
    return processList

However I get the following error under 2.4

Traceback (most recent call last):
  File
"C:\Python24\lib\site-packages\PythonCard\widget.py",
line 417, in _dispatch
    handler(background, aWxEvent)
  File "C:\Documents and
Settings\PROTECTED\Desktop\ReadWaitReport\ReadWaitReport\readwaitreport.py",
line 61, in on_btnRun_command
    mainRwclassLoop(self, mm+dd+yy, yesterday)
  File "C:\Documents and
Settings\PROTECTED\Desktop\ReadWaitReport\ReadWaitReport\rwclass.py",
line 39, in mainRwclassLoop
    processList =
ftpFetch(localPath,"split_mgr."+date[0:4],ftpSite,ftpPass,ftpDir,ftpUser)
  File "C:\Documents and
Settings\PROTECTED\Desktop\ReadWaitReport\ReadWaitReport\rwclass.py",
line 173, in ftpFetch
    ftp.dir('LIST '+ftpDir,fileList.append)
  File "C:\Python24\lib\ftplib.py", line 464, in dir
    self.retrlines(cmd, func)
  File "C:\Python24\lib\ftplib.py", line 396, in retrlines
    conn = self.transfercmd(cmd)
  File "C:\Python24\lib\ftplib.py", line 345, in
transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "C:\Python24\lib\ftplib.py", line 328, in
ntransfercmd
    if resp[0] != '1':
IndexError: string index out of range

https://lists.dulug.duke.edu/pipermail/yum/2004-August/005067.html
discusses a similar problem under Linux in the YUM
script, I have reproduced this error under 2000, and XP.

I'm a fairly new programmer, and thus very new to
python so I hope this is enough information.  I will
try and keep track of this and help out with more
information in any capacity I can.

Thank you for all your hard work and dedication.
David Carroll

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-08-24 00:00

Message:
Logged In: YES 
user_id=80475

If you're issue has been addressed, go ahead and close it.

----------------------------------------------------------------------

Comment By: David Carroll (vmlinuxz)
Date: 2005-04-11 04:13

Message:
Logged In: YES 
user_id=684143

I'm not sure if this needs any more clarification, but for
accuracy I'm attaching a file with the working and non
working code segments, and the level 2 debug.  This code was
run on 2.3, using your new ftplib modifications, and the
distributed ftplib.  The FTP server is wu-2.6.2(1) running
on a SCO system (bleh).  The code was tested in PASV and
PORT mode.  I'm new to this so I don't know if I should
close this or the patch submitter.  If you need anything
else from me let me know.

David

----------------------------------------------------------------------

Comment By: David Carroll (vmlinuxz)
Date: 2005-04-08 05:13

Message:
Logged In: YES 
user_id=684143

I achieve the same results with the following code.

ftp = FTP('ftp.cdrom.com')
ftp.login('anonymous', 'anonymous@')
ftp.retrlines('LIST')

This code works just fine with your patched ftplib.py, or
the old ftplib.py against all public internet ftp servers I
have tried it on.  It works on the server at work only
sporadically,, and  raising the protocol exception the rest
of the time.  I'm inclined to think that there may be a
problem with the protocol implementation on the server side.
 The server software version is  wu-2.6.2(1), and the only
oddity I see with it is a pretty sizeable delay before
giving the login.  Up to 10 seconds.  

I'd love to get a pointer of where to take this debugging
process next.  Perhaps I need to use a sniffer on the
connection or something.  I would love to see what ftplib.py
is getting back that is breaking it.



----------------------------------------------------------------------

Comment By: David Carroll (vmlinuxz)
Date: 2005-04-07 04:51

Message:
Logged In: YES 
user_id=684143

Thank you for leaving this open.  I will try and get your
example today.  I'm too uneducated to realize what I'm doing
wrong, so maybe you can use my ignorance for the common good
=).  

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-04 23:31

Message:
Logged In: YES 
user_id=80475

I fixed the IndexError.  It should have been a protocol
error.  See Lib/ftplib.py  1.74.

Leaving the bug open so the OP can make a more detailed post
so we can see what the root issue is about.

----------------------------------------------------------------------

Comment By: Ilya Sandler (isandler)
Date: 2005-04-04 22:37

Message:
Logged In: YES 
user_id=971153

It turns out that the code in plain text bug report is more
or less readable, so I can see what you were trying to do...

Seems like you are doing 
  ftp.dir("LIST "+ftpDir)

But ftplib docs:
http://www.python.org/doc/current/lib/ftp-objects.html

say that you need to specify the directory
ftp.dir(ftpDir)

so it seems that you are using ftp.dir() incorrectly....

But, even then IndexError seems like a wrong kind of
exception for this kind of error...

So, I guess, my original request for a working code snippet
which would allow to reproduce the bug still stands..



----------------------------------------------------------------------

Comment By: Ilya Sandler (isandler)
Date: 2005-04-04 21:12

Message:
Logged In: YES 
user_id=971153


Could you submit a minimalistic piece of code which
illustrates the problem?
As well as any input data which are required to reproduce it?


(SourceForge garbled your original example)



----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1168983&group_id=5470


More information about the Python-bugs-list mailing list