Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame^] | 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 | 76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on |
| 7 | that platform), and long is only 32 bits. It makes it impossible for |
| 8 | curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET |
| 9 | option as for all other operating systems. |
| 10 | |
| 11 | 75. NTLM authentication involving unicode user name or password. |
| 12 | http://curl.haxx.se/mail/lib-2009-10/0024.html |
| 13 | http://curl.haxx.se/bug/view.cgi?id=2944325 |
| 14 | |
| 15 | 74. The HTTP spec allows headers to be merged and become comma-separated |
| 16 | instead of being repeated several times. This also include Authenticate: and |
| 17 | Proxy-Authenticate: headers and while this hardly every happens in real life |
| 18 | it will confuse libcurl which does not properly support it for all headers - |
| 19 | like those Authenticate headers. |
| 20 | |
| 21 | 73. if a connection is made to a FTP server but the server then just never |
| 22 | sends the 220 response or otherwise is dead slow, libcurl will not |
| 23 | acknowledge the connection timeout during that phase but only the "real" |
| 24 | timeout - which may surprise users as it is probably considered to be the |
| 25 | connect phase to most people. Brought up (and is being misunderstood) in: |
| 26 | http://curl.haxx.se/bug/view.cgi?id=2844077 |
| 27 | |
| 28 | 72. "Pausing pipeline problems." |
| 29 | http://curl.haxx.se/mail/lib-2009-07/0214.html |
| 30 | |
| 31 | 70. Problem re-using easy handle after call to curl_multi_remove_handle |
| 32 | http://curl.haxx.se/mail/lib-2009-07/0249.html |
| 33 | |
| 34 | 68. "More questions about ares behavior". |
| 35 | http://curl.haxx.se/mail/lib-2009-08/0012.html |
| 36 | |
| 37 | 67. When creating multipart formposts. The file name part can be encoded with |
| 38 | something beyond ascii but currently libcurl will only pass in the verbatim |
| 39 | string the app provides. There are several browsers that already do this |
| 40 | encoding. The key seems to be the updated draft to RFC2231: |
| 41 | http://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02 |
| 42 | |
| 43 | 66. When using telnet, the time limitation options don't work. |
| 44 | http://curl.haxx.se/bug/view.cgi?id=2818950 |
| 45 | |
| 46 | 65. When doing FTP over a socks proxy or CONNECT through HTTP proxy and the |
| 47 | multi interface is used, libcurl will fail if the (passive) TCP connection |
| 48 | for the data transfer isn't more or less instant as the code does not |
| 49 | properly wait for the connect to be confirmed. See test case 564 for a first |
| 50 | shot at a test case. |
| 51 | |
| 52 | 63. When CURLOPT_CONNECT_ONLY is used, the handle cannot reliably be re-used |
| 53 | for any further requests or transfers. The work-around is then to close that |
| 54 | handle with curl_easy_cleanup() and create a new. Some more details: |
| 55 | http://curl.haxx.se/mail/lib-2009-04/0300.html |
| 56 | |
| 57 | 61. If an upload using Expect: 100-continue receives an HTTP 417 response, |
| 58 | it ought to be automatically resent without the Expect:. A workaround is |
| 59 | for the client application to redo the transfer after disabling Expect:. |
| 60 | http://curl.haxx.se/mail/archive-2008-02/0043.html |
| 61 | |
| 62 | 60. libcurl closes the connection if an HTTP 401 reply is received while it |
| 63 | is waiting for the the 100-continue response. |
| 64 | http://curl.haxx.se/mail/lib-2008-08/0462.html |
| 65 | |
| 66 | 58. It seems sensible to be able to use CURLOPT_NOBODY and |
| 67 | CURLOPT_FAILONERROR with FTP to detect if a file exists or not, but it is |
| 68 | not working: http://curl.haxx.se/mail/lib-2008-07/0295.html |
| 69 | |
| 70 | 57. On VMS-Alpha: When using an http-file-upload the file is not sent to the |
| 71 | Server with the correct content-length. Sending a file with 511 or less |
| 72 | bytes, content-length 512 is used. Sending a file with 513 - 1023 bytes, |
| 73 | content-length 1024 is used. Files with a length of a multiple of 512 Bytes |
| 74 | show the correct content-length. Only these files work for upload. |
| 75 | http://curl.haxx.se/bug/view.cgi?id=2057858 |
| 76 | |
| 77 | 56. When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP |
| 78 | server using the multi interface, the commands are not being sent correctly |
| 79 | and instead the connection is "cancelled" (the operation is considered done) |
| 80 | prematurely. There is a half-baked (busy-looping) patch provided in the bug |
| 81 | report but it cannot be accepted as-is. See |
| 82 | http://curl.haxx.se/bug/view.cgi?id=2006544 |
| 83 | |
| 84 | 55. libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's |
| 85 | library header files exporting symbols/macros that should be kept private |
| 86 | to the KfW library. See ticket #5601 at http://krbdev.mit.edu/rt/ |
| 87 | |
| 88 | 52. Gautam Kachroo's issue that identifies a problem with the multi interface |
| 89 | where a connection can be re-used without actually being properly |
| 90 | SSL-negotiated: |
| 91 | http://curl.haxx.se/mail/lib-2008-01/0277.html |
| 92 | |
| 93 | 49. If using --retry and the transfer timeouts (possibly due to using -m or |
| 94 | -y/-Y) the next attempt doesn't resume the transfer properly from what was |
| 95 | downloaded in the previous attempt but will truncate and restart at the |
| 96 | original position where it was at before the previous failed attempt. See |
| 97 | http://curl.haxx.se/mail/lib-2008-01/0080.html and Mandriva bug report |
| 98 | https://qa.mandriva.com/show_bug.cgi?id=22565 |
| 99 | |
| 100 | 48. If a CONNECT response-headers are larger than BUFSIZE (16KB) when the |
| 101 | connection is meant to be kept alive (like for NTLM proxy auth), the |
| 102 | function will return prematurely and will confuse the rest of the HTTP |
| 103 | protocol code. This should be very rare. |
| 104 | |
| 105 | 43. There seems to be a problem when connecting to the Microsoft telnet server. |
| 106 | http://curl.haxx.se/bug/view.cgi?id=1720605 |
| 107 | |
| 108 | 41. When doing an operation over FTP that requires the ACCT command (but not |
| 109 | when logging in), the operation will fail since libcurl doesn't detect this |
| 110 | and thus fails to issue the correct command: |
| 111 | http://curl.haxx.se/bug/view.cgi?id=1693337 |
| 112 | |
| 113 | 39. Steffen Rumler's Race Condition in Curl_proxyCONNECT: |
| 114 | http://curl.haxx.se/mail/lib-2007-01/0045.html |
| 115 | |
| 116 | 38. Kumar Swamy Bhatt's problem in ftp/ssl "LIST" operation: |
| 117 | http://curl.haxx.se/mail/lib-2007-01/0103.html |
| 118 | |
| 119 | 37. Having more than one connection to the same host when doing NTLM |
| 120 | authentication (with performs multiple "passes" and authenticates a |
| 121 | connection rather than a HTTP request), and particularly when using the |
| 122 | multi interface, there's a risk that libcurl will re-use a wrong connection |
| 123 | when doing the different passes in the NTLM negotiation and thus fail to |
| 124 | negotiate (in seemingly mysterious ways). |
| 125 | |
| 126 | 35. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very |
| 127 | bad when used with the multi interface. |
| 128 | |
| 129 | 34. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts. |
| 130 | Also see #12. According to bug #1556528, even the SOCKS5 connect code does |
| 131 | not do it right: http://curl.haxx.se/bug/view.cgi?id=1556528, |
| 132 | |
| 133 | 31. "curl-config --libs" will include details set in LDFLAGS when configure is |
| 134 | run that might be needed only for building libcurl. Further, curl-config |
| 135 | --cflags suffers from the same effects with CFLAGS/CPPFLAGS. |
| 136 | |
| 137 | 30. You need to use -g to the command line tool in order to use RFC2732-style |
| 138 | IPv6 numerical addresses in URLs. |
| 139 | |
| 140 | 29. IPv6 URLs with zone ID is not nicely supported. |
| 141 | http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt (expired) |
| 142 | specifies the use of a plus sign instead of a percent when specifying zone |
| 143 | IDs in URLs to get around the problem of percent signs being |
| 144 | special. According to the reporter, Firefox deals with the URL _with_ a |
| 145 | percent letter (which seems like a blatant URL spec violation). |
| 146 | libcurl supports zone IDs where the percent sign is URL-escaped (i.e. %25). |
| 147 | |
| 148 | See http://curl.haxx.se/bug/view.cgi?id=1371118 |
| 149 | |
| 150 | 26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in |
| 151 | "system context" will make it use wrong(?) user name - at least when compared |
| 152 | to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867 |
| 153 | |
| 154 | 23. SOCKS-related problems: |
| 155 | A) libcurl doesn't support SOCKS for IPv6. |
| 156 | B) libcurl doesn't support FTPS over a SOCKS proxy. |
| 157 | E) libcurl doesn't support active FTP over a SOCKS proxy |
| 158 | |
| 159 | We probably have even more bugs and lack of features when a SOCKS proxy is |
| 160 | used. |
| 161 | |
| 162 | 22. Sending files to a FTP server using curl on VMS, might lead to curl |
| 163 | complaining on "unaligned file size" on completion. The problem is related |
| 164 | to VMS file structures and the perceived file sizes stat() returns. A |
| 165 | possible fix would involve sending a "STRU VMS" command. |
| 166 | http://curl.haxx.se/bug/view.cgi?id=1156287 |
| 167 | |
| 168 | 21. FTP ASCII transfers do not follow RFC959. They don't convert the data |
| 169 | accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1 |
| 170 | clearly describes how this should be done: |
| 171 | |
| 172 | The sender converts the data from an internal character representation to |
| 173 | the standard 8-bit NVT-ASCII representation (see the Telnet |
| 174 | specification). The receiver will convert the data from the standard |
| 175 | form to his own internal form. |
| 176 | |
| 177 | Since 7.15.4 at least line endings are converted. |
| 178 | |
| 179 | 16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>, |
| 180 | <password>, and <fpath> components, encoded as "%00". The problem is that |
| 181 | curl_unescape does not detect this, but instead returns a shortened C |
| 182 | string. From a strict FTP protocol standpoint, NUL is a valid character |
| 183 | within RFC 959 <string>, so the way to handle this correctly in curl would |
| 184 | be to use a data structure other than a plain C string, one that can handle |
| 185 | embedded NUL characters. From a practical standpoint, most FTP servers |
| 186 | would not meaningfully support NUL characters within RFC 959 <string>, |
| 187 | anyway (e.g., UNIX pathnames may not contain NUL). |
| 188 | |
| 189 | 14. Test case 165 might fail on a system which has libidn present, but with an |
| 190 | old iconv version (2.1.3 is a known bad version), since it doesn't recognize |
| 191 | the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the |
| 192 | test pass, but instead makes it fail on Solaris hosts that use its native |
| 193 | iconv. |
| 194 | |
| 195 | 13. curl version 7.12.2 fails on AIX if compiled with --enable-ares. |
| 196 | The workaround is to combine --enable-ares with --disable-shared |
| 197 | |
| 198 | 12. When connecting to a SOCKS proxy, the (connect) timeout is not properly |
| 199 | acknowledged after the actual TCP connect (during the SOCKS "negotiate" |
| 200 | phase). |
| 201 | |
| 202 | 10. To get HTTP Negotiate authentication to work fine, you need to provide a |
| 203 | (fake) user name (this concerns both curl and the lib) because the code |
| 204 | wrongly only considers authentication if there's a user name provided. |
| 205 | http://curl.haxx.se/bug/view.cgi?id=1004841. How? |
| 206 | http://curl.haxx.se/mail/lib-2004-08/0182.html |
| 207 | |
| 208 | 8. Doing resumed upload over HTTP does not work with '-C -', because curl |
| 209 | doesn't do a HEAD first to get the initial size. This needs to be done |
| 210 | manually for HTTP PUT resume to work, and then '-C [index]'. |
| 211 | |
| 212 | 6. libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that |
| 213 | such parts should be sent to the server as 'CWD ' (without an argument). |
| 214 | The only exception to this rule, is that we knowingly break this if the |
| 215 | empty part is first in the path, as then we use the double slashes to |
| 216 | indicate that the user wants to reach the root dir (this exception SHALL |
| 217 | remain even when this bug is fixed). |
| 218 | |
| 219 | 5. libcurl doesn't treat the content-length of compressed data properly, as |
| 220 | it seems HTTP servers send the *uncompressed* length in that header and |
| 221 | libcurl thinks of it as the *compressed* length. Some explanations are here: |
| 222 | http://curl.haxx.se/mail/lib-2003-06/0146.html |
| 223 | |
| 224 | 2. If a HTTP server responds to a HEAD request and includes a body (thus |
| 225 | violating the RFC2616), curl won't wait to read the response but just stop |
| 226 | reading and return back. If a second request (let's assume a GET) is then |
| 227 | immediately made to the same server again, the connection will be re-used |
| 228 | fine of course, and the second request will be sent off but when the |
| 229 | response is to get read, the previous response-body is what curl will read |
| 230 | and havoc is what happens. |
| 231 | More details on this is found in this libcurl mailing list thread: |
| 232 | http://curl.haxx.se/mail/lib-2002-08/0000.html |