On Wed, Aug 17, 2011 at 7:06 AM, Fabian Keil
<[email protected]>wrote:

> I'm currently experimenting with the tests again, and one of the
> issues I ran into (using 4ed7abb5370a9416) is that test 564 seems
> to fail most of the time, but not always.
>
> When it fails, I get:
>
> fk@r500 ~/git/curl/tests $./runtests.pl -n 564
> Use of uninitialized value $p in string eq at
> /usr/local/lib/perl5/5.14.1/BSDPAN/BSDPAN.pm line 36.
> ********* System characteristics ********
> * curl 7.22.0-DEV (amd64-unknown-freebsd9.0)
> * libcurl/7.22.0-DEV OpenSSL/0.9.8q zlib/1.2.5
> * Features: Debug TrackMemory IPv6 Largefile NTLM NTLM_SSO SSL libz
> * Host: r500.local
> * System: FreeBSD r500.local 9.0-BETA1 FreeBSD 9.0-BETA1 #344 r+ea7f16f:
> Tue Aug 16 19:09:41 CEST 2011     [email protected]:/usr/obj/usr/src/sys/ZOEY
>  amd64
> * Server SSL:        OFF  libcurl SSL:  ON
> * debug build:       ON   track memory: ON
> * valgrind:          OFF  HTTP IPv6     ON
> * FTP IPv6           ON   Libtool lib:  OFF
> * Shared build:      no
> * SSL library:       OpenSSL
> * Ports:
> *   HTTP/8990 FTP/8992 FTP2/8995 RTSP/9007
> *   TFTP/8997 HTTP-IPv6/8994 RTSP-IPv6/9008 FTP-IPv6/8996
> *   GOPHER/9009 GOPHER-IPv6/9009
> *   SSH/8999 SOCKS/9000 POP3/9001 IMAP/9003 SMTP/9005
> *   POP3-IPv6/9002 IMAP-IPv6/9004 SMTP-IPv6/9006
> *****************************************
> Use of uninitialized value $p in string eq at
> /usr/local/lib/perl5/5.14.1/BSDPAN/BSDPAN.pm line 36.
> test 564...[FTP RETR a file over a SOCKS proxy using the multi interface]
>
>  stdout FAILED:
> --- log/check-expected  2011-08-17 00:05:29.722035830 +0200
> +++ log/check-generated 2011-08-17 00:05:29.721032141 +0200
> @@ -1,6 +0,0 @@
> -data
> -    to
> -      see
> -that FTP
> -works
> -  so does it?
>
>  - abort tests
> TESTDONE: 0 tests out of 1 reported OK: 0%
> TESTFAIL: These test cases failed: 564
> TESTDONE: 1 tests were considered during 34 seconds.
>
> ---------
>
> === Start of file stderr564
>  URL: ftp://127.0.0.1:8992/path/564
>  Start at URL 0
>  * About to connect() to proxy 127.0.0.1 port 9000 (#0)
>  *   Trying 127.0.0.1... * 0x80183e008 is at send pipe head
>  * STATE: CONNECT => WAITCONNECT handle 0x8018c4088; (connection #0)
>  * SOCKS4 request granted.
>  * Connected to 127.0.0.1 (127.0.0.1) port 9000 (#0)
>  * FTP 0x8019578f8 state change from STOP to WAIT220
>  * STATE: WAITCONNECT => PROTOCONNECT handle 0x8018c4088; (connection #0)
>  < 220-        _   _ ____  _
>  < 220-    ___| | | |  _ \| |
>  < 220-   / __| | | | |_) | |
>  < 220-  | (__| |_| |  _ <| |___
>  < 220    \___|\___/|_| \_\_____|
>  > USER anonymous
>  * FTP 0x8019578f8 state change from WAIT220 to USER
>  < 331 We are happy you popped in
>  > PASS [email protected]
>  * FTP 0x8019578f8 state change from USER to PASS
>  < 230 Welcome you silly person
>  > PWD
>  * FTP 0x8019578f8 state change from PASS to PWD
>  < 257 "/" is current directory
>  * Entry path is '/'
>  * FTP 0x8019578f8 state change from PWD to STOP
>  * protocol connect phase DONE
>  * STATE: PROTOCONNECT => DO handle 0x8018c4088; (connection #0)
>  * DO phase starts
>  > CWD path
>  * FTP 0x8019578f8 state change from STOP to CWD
>  * STATE: DO => DOING handle 0x8018c4088; (connection #0)
>  < 250 CWD command successful.
>  > EPSV
>  * FTP 0x8019578f8 state change from CWD to PASV
>  * Connect data stream passively
>  < 229 Entering Passive Mode (|||53212|)
>  *   Trying 127.0.0.1... * Connecting to 127.0.0.1 (127.0.0.1) port 9000
>  * SOCKS4 request granted.
>  * FTP 0x8019578f8 state change from PASV to STOP
>  * DO phase is complete
>  * STATE: DOING => DO_MORE handle 0x8018c4088; (connection #0)
>  * SOCKS4 reply has wrong version, version should be 4.: 500 '#
>  * STATE: DO_MORE => COMPLETED handle 0x8018c4088; (connection #-5000)
>  * STATE: COMPLETED => MSGSENT handle 0x8018c4088; (connection #-5000)
>  * Closing connection #0
> === End of file stderr564
>
> I locally modified socks.c like this, to dump the offending response:
>
> diff --git a/lib/socks.c b/lib/socks.c
> index ac13ed8..a351ddf 100644
> --- a/lib/socks.c
> +++ b/lib/socks.c
> @@ -277,7 +277,10 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
>     /* wrong version ? */
>     if(socksreq[0] != 0) {
>       failf(data,
> -            "SOCKS4 reply has wrong version, version should be 4.");
> +            "SOCKS4 reply has wrong version, version should be 4.:"
> +            " %c%c%c%c%c%c%c%c",
> +            socksreq[0], socksreq[1], socksreq[2], socksreq[3],
> +            socksreq[4], socksreq[5], socksreq[6], socksreq[7]);
>       return CURLE_COULDNT_CONNECT;
>     }
>
> It always seems to complain about the same byte sequence.
> For one reason or another, curl seems to be interpreting an
> ftp message as socks reply:
>
> fk@r500 ~/git/curl/tests $grep -n "500 '" ./ftpserver.pl
> 1522:            sendcontrol "500 '$_': command not understood.\r\n";
>
> I confirmed this by modifying the error code.
>
> Whether it fails or not, the test run seems to take about
> 34 seconds.
>
> After reverting the lib/connect.c and lib/multi.c modifications
> from 4a42e5cdaa344755c, while keeping the other modifications,
> the test worked five times in a row.
>
> Otherwise the success rate seems to be about 20% so even getting
> two successes in a row is unlikely.
>
> The patch is attached to make it more clear what I'm talking
> about, I'm not suggesting that this is the solution.
>
> Fabian
>
> -------------------------------------------------------------------
> List admin: http://cool.haxx.se/list/listinfo/curl-library
> Etiquette:  http://curl.haxx.se/mail/etiquette.html
>
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to