W3C home > Mailing lists > Public > www-lib@w3.org > April to June 2003

HTLoadToFile crashing after load on FTP URLs, HTRequest_bytesRead inoperant

From: Timothee Besset <ttimo@idsoftware.com>
Date: Mon, 5 May 2003 17:10:02 +0200
To: www-lib@w3.org
Message-Id: <20030505171002.01321dca.ttimo@idsoftware.com>

I am using HTLoadToFile to retrieve files through http and ftp.
The http access seems to work fine, but the ftp has two annoying behaviours atm:

- The progress information remains empty:

I keep calling HTRequest_bytesRead on each HT_PROG_READ alert callback,
but it remains 0. I can see the file being downloaded and growing though.

- After the download has completed, it crashes. Here's what the end of the
trace says:

Host Event.. READ passed to `ftp://<.....>'
FTP Event... now in state FTP_NEED_DATA
FTP Get Data now in state NEED_BODY
Read Socket. FIN received on socket 20
HTDoClose... Close 20
Net Manager. Decreasing active sockets to 0, 0 persistent sockets
FTP Get Data now in state NEED_BODY
FTP Get Data now in state SUB_ERROR
Error....... Add  22	Severity: 1	Parameter: `Unspecified'	Where: `HTFTPGetData'
FTP Event... now in state FTP_NEED_SERVER
FTP Server.. now in state NEED_SYST
FTP Tx...... SYST

The remote server closes the ftp connection. The local file is complete.
But libwww fails to exit properly and does a SIGSEV right after SYST ..
any idea what would be wrong?

Actually, I know how the crash happens, but I haven't thought of a
solution. I thought for a while that it could be related to the ftp
daemon, but I tried a win32 daemon and proftp, and they both cause the
same crash.

in HTFTP.c at line 1300:

 1299                   else if (status == HT_LOADED || status == HT_CLOSED) {
 1300                       if (ctrl->repcode/100 == 2) {
 1301                           data->complete |= 2;
 1302                           if (data->complete >= 3)
 1303                               ctrl->substate = SUB_SUCCESS;
 1304                           else
 1305                               data_is_active = YES;
 1306                       } else
 1307                           ctrl->substate = SUB_ERROR;
 1308                   } else

this is after

Read Socket. FIN received on socket 20
HTDoClose... Close 20
Net Manager. Decreasing active sockets to 0, 0 persistent sockets
FTP Get Data now in state NEED_BODY

status is HT_CLOSED
ctrl->repcode is 150
data->complete is 1

But the data->complete |= 2 doesn't trigger. If it would, I *think* that
HTFTP.c would finish the job and exit cleanly.

TTimo
Received on Monday, 5 May 2003 11:10:16 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:43 GMT