two new CONNECT response problems that have appeared
[platform/upstream/curl.git] / docs / KNOWN_BUGS
1 These are problems known to exist at the time of this release. Feel free to
2 join in and help us correct one or more of these! Also be sure to check the
3 changelog of the current development status, as one or more of these problems
4 may have been fixed since this was written!
5
6 47. If a CONNECT response is larger than BUFSIZE when the connection is meant
7   to be kept alive, the function will return prematurely and will confuse the
8   rest of the HTTP protocol code.
9
10 46. If a CONNECT response is chunked-encoded, the function may return
11   prematurely and will confuse the rest of the HTTP protocol code.
12
13 45. libcurl built to support ipv6 uses getaddrinfo() to resolve host names.
14   getaddrinfo() sorts the response list which effectively kills how libcurl
15   deals with round-robin DNS entries. All details:
16     http://curl.haxx.se/mail/lib-2007-07/0168.html
17   initial suggested function to use for randomizing the response:
18     http://curl.haxx.se/mail/lib-2007-07/0178.html
19
20 44. --ftp-method nocwd does not handle URLs ending with a slash properly (it
21   should list the contents of that directory). See test case 351.
22
23 43. There seems to be a problem when connecting to the Microsoft telnet server.
24   http://curl.haxx.se/bug/view.cgi?id=1720605
25
26 41. When doing an operation over FTP that requires the ACCT command (but not
27   when logging in), the operation will fail since libcurl doesn't detect this
28   and thus fails to issue the correct command:
29   http://curl.haxx.se/bug/view.cgi?id=1693337
30
31 39. Steffen Rumler's Race Condition in Curl_proxyCONNECT:
32   http://curl.haxx.se/mail/lib-2007-01/0045.html
33
34 38. Kumar Swamy Bhatt's problem in ftp/ssl "LIST" operation:
35   http://curl.haxx.se/mail/lib-2007-01/0103.html
36
37 37. Having more than one connection to the same host when doing NTLM
38   authentication (with performs multiple "passes" and authenticates a
39   connection rather than a HTTP request), and particularly when using the
40   multi interface, there's a risk that libcurl will re-use a wrong connection
41   when doing the different passes in the NTLM negotiation and thus fail to
42   negotiate (in seemingly mysterious ways).
43
44 35. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very
45   bad when used with the multi interface.
46
47 34. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
48   Also see #12. According to bug #1556528, even the SOCKS5 connect code does
49   not do it right: http://curl.haxx.se/bug/view.cgi?id=1556528,
50
51 33. Doing multi-pass HTTP authentication on a non-default port does not work.
52   This happens because the multi-pass code abuses the redirect following code
53   for doing multiple requests, and when we following redirects to an absolute
54   URL we must use the newly specified port and not the one specified in the
55   original URL. A proper fix to this would need to separate the negotiation
56   "redirect" from an actual redirect.
57
58 32. (At least on Windows) If libcurl is built with c-ares and there's no DNS
59   server configured in the system, the ares_init() call fails and thus
60   curl_easy_init() fails as well. This causes weird effects for people who use
61   numerical IP addresses only.
62
63 31. "curl-config --libs" will include details set in LDFLAGS when configure is
64   run that might be needed only for building libcurl. Similarly, it might
65   include options that perhaps aren't suitable both for static and dynamic
66   linking. Further, curl-config --cflags suffers from the same effects with
67   CFLAGS/CPPFLAGS.
68
69 30. You need to use -g to the command line tool in order to use RFC2732-style
70   IPv6 numerical addresses in URLs.
71
72 29. IPv6 URLs with zone ID is not supported.
73   http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt (expired)
74   specifies the use of a plus sign instead of a percent when specifying zone
75   IDs in URLs to get around the problem of percent signs being
76   special. According to the reporter, Firefox deals with the URL _with_ a
77   percent letter (which seems like a blatant URL spec violation).
78
79    See http://curl.haxx.se/bug/view.cgi?id=1371118
80
81 26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
82   "system context" will make it use wrong(?) user name - at least when compared
83   to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
84
85 23. SOCKS-related problems:
86   A) libcurl doesn't support SOCKS for IPv6.
87   B) libcurl doesn't support FTPS over a SOCKS proxy.
88   E) libcurl doesn't support active FTP over a SOCKS proxy
89
90   We probably have even more bugs and lack of features when a SOCKS proxy is
91   used.
92
93 22. Sending files to a FTP server using curl on VMS, might lead to curl
94   complaining on "unaligned file size" on completion. The problem is related
95   to VMS file structures and the perceived file sizes stat() returns. A
96   possible fix would involve sending a "STRU VMS" command.
97   http://curl.haxx.se/bug/view.cgi?id=1156287
98   
99 21. FTP ASCII transfers do not follow RFC959. They don't convert the data
100    accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
101    clearly describes how this should be done:
102
103      The sender converts the data from an internal character representation to
104      the standard 8-bit NVT-ASCII representation (see the Telnet
105      specification).  The receiver will convert the data from the standard
106      form to his own internal form.
107
108    Since 7.15.4 at least line endings are converted.
109
110 16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
111   <password>, and <fpath> components, encoded as "%00".  The problem is that
112   curl_unescape does not detect this, but instead returns a shortened C
113   string.  From a strict FTP protocol standpoint, NUL is a valid character
114   within RFC 959 <string>, so the way to handle this correctly in curl would
115   be to use a data structure other than a plain C string, one that can handle
116   embedded NUL characters.  From a practical standpoint, most FTP servers
117   would not meaningfully support NUL characters within RFC 959 <string>,
118   anyway (e.g., UNIX pathnames may not contain NUL).
119
120 14. Test case 165 might fail on system which has libidn present, but with an
121   old iconv version (2.1.3 is a known bad version), since it doesn't recognize
122   the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the
123   test pass, but instead makes it fail on Solaris hosts that use its native
124   iconv.
125
126 13. curl version 7.12.2 fails on AIX if compiled with --enable-ares.
127   The workaround is to combine --enable-ares with --disable-shared
128
129 12. When connecting to a SOCKS proxy, the (connect) timeout is not properly
130   acknowledged after the actual TCP connect (during the SOCKS "negotiate"
131   phase).
132
133 10. To get HTTP Negotiate authentication to work fine, you need to provide a
134   (fake) user name (this concerns both curl and the lib) because the code
135   wrongly only considers authentication if there's a user name provided.
136   http://curl.haxx.se/bug/view.cgi?id=1004841. How?
137   http://curl.haxx.se/mail/lib-2004-08/0182.html
138
139 8. Doing resumed upload over HTTP does not work with '-C -', because curl
140   doesn't do a HEAD first to get the initial size. This needs to be done
141   manually for HTTP PUT resume to work, and then '-C [index]'.
142
143 7. CURLOPT_USERPWD and CURLOPT_PROXYUSERPWD have no way of providing user names
144   that contain a colon. This can't be fixed easily in a backwards compatible
145   way without adding new options (and then, they should most probably allow
146   setting user name and password separately).
147
148 6. libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that
149   such parts should be sent to the server as 'CWD ' (without an argument).
150   The only exception to this rule, is that we knowingly break this if the
151   empty part is first in the path, as then we use the double slashes to
152   indicate that the user wants to reach the root dir (this exception SHALL
153   remain even when this bug is fixed).
154
155 5. libcurl doesn't treat the content-length of compressed data properly, as
156   it seems HTTP servers send the *uncompressed* length in that header and
157   libcurl thinks of it as the *compressed* length. Some explanations are here:
158   http://curl.haxx.se/mail/lib-2003-06/0146.html
159
160 2. If a HTTP server responds to a HEAD request and includes a body (thus
161   violating the RFC2616), curl won't wait to read the response but just stop
162   reading and return back. If a second request (let's assume a GET) is then
163   immediately made to the same server again, the connection will be re-used
164   fine of course, and the second request will be sent off but when the
165   response is to get read, the previous response-body is what curl will read
166   and havoc is what happens.
167   More details on this is found in this libcurl mailing list thread:
168   http://curl.haxx.se/mail/lib-2002-08/0000.html