xf.li | 6c8fc1e | 2023-08-12 00:11:09 -0700 | [diff] [blame] | 1 | _ _ ____ _ |
| 2 | ___| | | | _ \| | |
| 3 | / __| | | | |_) | | |
| 4 | | (__| |_| | _ <| |___ |
| 5 | \___|\___/|_| \_\_____| |
| 6 | |
| 7 | Known Bugs |
| 8 | |
| 9 | These are problems and bugs known to exist at the time of this release. Feel |
| 10 | free to join in and help us correct one or more of these. Also be sure to |
| 11 | check the changelog of the current development status, as one or more of these |
| 12 | problems may have been fixed or changed somewhat since this was written. |
| 13 | |
| 14 | 1. HTTP |
| 15 | 1.2 Multiple methods in a single WWW-Authenticate: header |
| 16 | 1.3 STARTTRANSFER time is wrong for HTTP POSTs |
| 17 | 1.4 multipart formposts file name encoding |
| 18 | 1.5 Expect-100 meets 417 |
| 19 | 1.6 Unnecessary close when 401 received waiting for 100 |
| 20 | 1.7 Deflate error after all content was received |
| 21 | 1.8 DoH is not used for all name resolves when enabled |
| 22 | 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM |
| 23 | |
| 24 | 2. TLS |
| 25 | 2.1 CURLINFO_SSL_VERIFYRESULT has limited support |
| 26 | 2.2 DER in keychain |
| 27 | 2.3 Unable to use PKCS12 certificate with Secure Transport |
| 28 | 2.4 Secure Transport will not import PKCS#12 client certificates without a password |
| 29 | 2.5 Client cert handling with Issuer DN differs between backends |
| 30 | 2.6 CURL_GLOBAL_SSL |
| 31 | 2.7 Client cert (MTLS) issues with Schannel |
| 32 | 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname |
| 33 | 2.9 TLS session cache does not work with TFO |
| 34 | 2.10 Store TLS context per transfer instead of per connection |
| 35 | 2.11 Schannel TLS 1.2 handshake bug in old Windows versions |
| 36 | 2.12 FTPS with Schannel times out file list operation |
| 37 | 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel |
| 38 | 2.14 Secure Transport disabling hostname validation also disables SNI |
| 39 | 2.15 Renegotiate from server may cause hang for OpenSSL backend |
| 40 | |
| 41 | 3. Email protocols |
| 42 | 3.1 IMAP SEARCH ALL truncated response |
| 43 | 3.2 No disconnect command |
| 44 | 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses |
| 45 | 3.4 AUTH PLAIN for SMTP is not working on all servers |
| 46 | |
| 47 | 4. Command line |
| 48 | 4.1 -J and -O with %-encoded file names |
| 49 | 4.2 -J with -C - fails |
| 50 | 4.3 --retry and transfer timeouts |
| 51 | |
| 52 | 5. Build and portability issues |
| 53 | 5.1 OS400 port requires deprecated IBM library |
| 54 | 5.2 curl-config --libs contains private details |
| 55 | 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 |
| 56 | 5.4 Build with statically built dependency |
| 57 | 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows |
| 58 | 5.6 make distclean loops forever |
| 59 | 5.7 Visual Studio project gaps |
| 60 | 5.8 configure finding libs in wrong directory |
| 61 | 5.9 Utilize Requires.private directives in libcurl.pc |
| 62 | 5.10 curl hangs on SMB upload over stdin |
| 63 | 5.11 configure --with-gssapi with Heimdal is ignored on macOS |
| 64 | 5.12 flaky Windows CI builds |
| 65 | 5.13 long paths are not fully supported on Windows |
| 66 | 5.14 Windows Unicode builds use homedir in current locale |
| 67 | |
| 68 | 6. Authentication |
| 69 | 6.1 NTLM authentication and unicode |
| 70 | 6.2 MIT Kerberos for Windows build |
| 71 | 6.3 NTLM in system context uses wrong name |
| 72 | 6.4 Negotiate and Kerberos V5 need a fake user name |
| 73 | 6.5 NTLM does not support password with ยง character |
| 74 | 6.6 libcurl can fail to try alternatives with --proxy-any |
| 75 | 6.7 Do not clear digest for single realm |
| 76 | 6.8 RTSP authentication breaks without redirect support |
| 77 | 6.9 SHA-256 digest not supported in Windows SSPI builds |
| 78 | 6.10 curl never completes Negotiate over HTTP |
| 79 | 6.11 Negotiate on Windows fails |
| 80 | 6.12 cannot use Secure Transport with Crypto Token Kit |
| 81 | 6.13 Negotiate against Hadoop HDFS |
| 82 | |
| 83 | 7. FTP |
| 84 | 7.1 FTP without or slow 220 response |
| 85 | 7.2 FTP with CONNECT and slow server |
| 86 | 7.3 FTP with NOBODY and FAILONERROR |
| 87 | 7.4 FTP with ACCT |
| 88 | 7.5 ASCII FTP |
| 89 | 7.6 FTP with NULs in URL parts |
| 90 | 7.7 FTP and empty path parts in the URL |
| 91 | 7.8 Premature transfer end but healthy control channel |
| 92 | 7.9 Passive transfer tries only one IP address |
| 93 | 7.10 FTPS needs session reuse |
| 94 | 7.11 FTPS upload data loss with TLS 1.3 |
| 95 | 7.12 FTPS directory listing hangs on Windows with Schannel |
| 96 | |
| 97 | 8. TELNET |
| 98 | 8.1 TELNET and time limitations do not work |
| 99 | 8.2 Microsoft telnet server |
| 100 | |
| 101 | 9. SFTP and SCP |
| 102 | 9.1 SFTP does not do CURLOPT_POSTQUOTE correct |
| 103 | 9.2 wolfssh: publickey auth does not work |
| 104 | 9.3 Remote recursive folder creation with SFTP |
| 105 | 9.4 libssh blocking and infinite loop problem |
| 106 | |
| 107 | 10. SOCKS |
| 108 | 10.3 FTPS over SOCKS |
| 109 | 10.4 active FTP over a SOCKS |
| 110 | |
| 111 | 11. Internals |
| 112 | 11.1 Curl leaks .onion hostnames in DNS |
| 113 | 11.2 error buffer not set if connection to multiple addresses fails |
| 114 | 11.3 Disconnects do not do verbose |
| 115 | 11.4 HTTP test server 'connection-monitor' problems |
| 116 | 11.5 Connection information when using TCP Fast Open |
| 117 | 11.7 signal-based resolver timeouts |
| 118 | 11.8 DoH leaks memory after followlocation |
| 119 | 11.9 DoH does not inherit all transfer options |
| 120 | 11.10 Blocking socket operations in non-blocking API |
| 121 | 11.11 A shared connection cache is not thread-safe |
| 122 | 11.14 Multi perform hangs waiting for threaded resolver |
| 123 | 11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing |
| 124 | 11.16 libcurl uses renames instead of locking for atomic operations |
| 125 | |
| 126 | 12. LDAP |
| 127 | 12.1 OpenLDAP hangs after returning results |
| 128 | 12.2 LDAP on Windows does authentication wrong? |
| 129 | 12.3 LDAP on Windows does not work |
| 130 | 12.4 LDAPS with NSS is slow |
| 131 | |
| 132 | 13. TCP/IP |
| 133 | 13.1 --interface for ipv6 binds to unusable IP address |
| 134 | 13.2 Trying local ports fails on Windows |
| 135 | |
| 136 | 14. DICT |
| 137 | 14.1 DICT responses show the underlying protocol |
| 138 | |
| 139 | 15. CMake |
| 140 | 15.1 use correct SONAME |
| 141 | 15.2 support build with GnuTLS |
| 142 | 15.3 unusable tool_hugehelp.c with MinGW |
| 143 | 15.4 build docs/curl.1 |
| 144 | 15.5 build on Linux links libcurl to libdl |
| 145 | 15.6 uses -lpthread instead of Threads::Threads |
| 146 | 15.7 generated .pc file contains strange entries |
| 147 | 15.8 libcurl.pc uses absolute library paths |
| 148 | 15.9 cert paths autodetected when cross-compiling |
| 149 | 15.10 libpsl is not supported |
| 150 | 15.11 ExternalProject_Add does not set CURL_CA_PATH |
| 151 | 15.12 cannot enable LDAPS on Windows |
| 152 | 15.13 CMake build with MIT Kerberos does not work |
| 153 | 15.14 cmake build is not thread-safe |
| 154 | |
| 155 | 16. Applications |
| 156 | |
| 157 | 17. HTTP/2 |
| 158 | 17.1 Excessive HTTP/2 packets with TCP_NODELAY |
| 159 | 17.2 HTTP/2 frames while in the connection pool kill reuse |
| 160 | 17.3 ENHANCE_YOUR_CALM causes infinite retries |
| 161 | 17.4 Connection failures with parallel HTTP/2 |
| 162 | 17.5 HTTP/2 connections through HTTPS proxy frequently stall |
| 163 | |
| 164 | 18. HTTP/3 |
| 165 | 18.1 If the HTTP/3 server closes connection during upload curl hangs |
| 166 | 18.2 Transfer closed with n bytes remaining to read |
| 167 | 18.4 timeout when reusing a http3 connection |
| 168 | 18.9 connection migration does not work |
| 169 | |
| 170 | ============================================================================== |
| 171 | |
| 172 | 1. HTTP |
| 173 | |
| 174 | 1.2 Multiple methods in a single WWW-Authenticate: header |
| 175 | |
| 176 | The HTTP responses headers WWW-Authenticate: can provide information about |
| 177 | multiple authentication methods as multiple headers or as several methods |
| 178 | within a single header. The latter way, several methods in the same physical |
| 179 | line, is not supported by libcurl's parser. (For no good reason.) |
| 180 | |
| 181 | 1.3 STARTTRANSFER time is wrong for HTTP POSTs |
| 182 | |
| 183 | Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with |
| 184 | GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME |
| 185 | is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus |
| 186 | CURLINFO_PRETRANSFER_TIME is near to zero every time. |
| 187 | |
| 188 | https://github.com/curl/curl/issues/218 |
| 189 | https://curl.se/bug/view.cgi?id=1213 |
| 190 | |
| 191 | 1.4 multipart formposts file name encoding |
| 192 | |
| 193 | When creating multipart formposts. The file name part can be encoded with |
| 194 | something beyond ascii but currently libcurl will only pass in the verbatim |
| 195 | string the app provides. There are several browsers that already do this |
| 196 | encoding. The key seems to be the updated draft to RFC2231: |
| 197 | https://datatracker.ietf.org/doc/html/draft-reschke-rfc2231-in-http-02 |
| 198 | |
| 199 | 1.5 Expect-100 meets 417 |
| 200 | |
| 201 | If an upload using Expect: 100-continue receives an HTTP 417 response, it |
| 202 | ought to be automatically resent without the Expect:. A workaround is for |
| 203 | the client application to redo the transfer after disabling Expect:. |
| 204 | https://curl.se/mail/archive-2008-02/0043.html |
| 205 | |
| 206 | 1.6 Unnecessary close when 401 received waiting for 100 |
| 207 | |
| 208 | libcurl closes the connection if an HTTP 401 reply is received while it is |
| 209 | waiting for the 100-continue response. |
| 210 | https://curl.se/mail/lib-2008-08/0462.html |
| 211 | |
| 212 | 1.7 Deflate error after all content was received |
| 213 | |
| 214 | There's a situation where we can get an error in an HTTP response that is |
| 215 | compressed, when that error is detected after all the actual body contents |
| 216 | have been received and delivered to the application. This is tricky, but is |
| 217 | ultimately a broken server. |
| 218 | |
| 219 | See https://github.com/curl/curl/issues/2719 |
| 220 | |
| 221 | 1.8 DoH is not used for all name resolves when enabled |
| 222 | |
| 223 | Even if DoH is specified to be used, there are some name resolves that are |
| 224 | done without it. This should be fixed. When the internal function |
| 225 | `Curl_resolver_wait_resolv()` is called, it does not use DoH to complete the |
| 226 | resolve as it otherwise should. |
| 227 | |
| 228 | See https://github.com/curl/curl/pull/3857 and |
| 229 | https://github.com/curl/curl/pull/3850 |
| 230 | |
| 231 | 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM |
| 232 | |
| 233 | When using libcurl to POST form data using a FILE* with the CURLFORM_STREAM |
| 234 | option of curl_formadd(). I notice that if the connection drops at just the |
| 235 | right time, the POST is reattempted without the data from the file. It seems |
| 236 | like the file stream position is not getting reset to the beginning of the |
| 237 | file. I found the CURLOPT_SEEKFUNCTION option and set that with a function |
| 238 | that performs an fseek() on the FILE*. However, setting that did not seem to |
| 239 | fix the issue or even get called. See https://github.com/curl/curl/issues/768 |
| 240 | |
| 241 | |
| 242 | 2. TLS |
| 243 | |
| 244 | 2.1 CURLINFO_SSL_VERIFYRESULT has limited support |
| 245 | |
| 246 | CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL, NSS and |
| 247 | GnuTLS backends, so relying on this information in a generic app is flaky. |
| 248 | |
| 249 | 2.2 DER in keychain |
| 250 | |
| 251 | Curl does not recognize certificates in DER format in keychain, but it works |
| 252 | with PEM. https://curl.se/bug/view.cgi?id=1065 |
| 253 | |
| 254 | 2.3 Unable to use PKCS12 certificate with Secure Transport |
| 255 | |
| 256 | See https://github.com/curl/curl/issues/5403 |
| 257 | |
| 258 | 2.4 Secure Transport will not import PKCS#12 client certificates without a password |
| 259 | |
| 260 | libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that |
| 261 | function rejects certificates that do not have a password. |
| 262 | https://github.com/curl/curl/issues/1308 |
| 263 | |
| 264 | 2.5 Client cert handling with Issuer DN differs between backends |
| 265 | |
| 266 | When the specified client certificate does not match any of the |
| 267 | server-specified DNs, the OpenSSL and GnuTLS backends behave differently. |
| 268 | The github discussion may contain a solution. |
| 269 | |
| 270 | See https://github.com/curl/curl/issues/1411 |
| 271 | |
| 272 | 2.6 CURL_GLOBAL_SSL |
| 273 | |
| 274 | Since libcurl 7.57.0, the flag CURL_GLOBAL_SSL is a no-op. The change was |
| 275 | merged in https://github.com/curl/curl/commit/d661b0afb571a |
| 276 | |
| 277 | It was removed since it was |
| 278 | |
| 279 | A) never clear for applications on how to deal with init in the light of |
| 280 | different SSL backends (the option was added back in the days when life |
| 281 | was simpler) |
| 282 | |
| 283 | B) multissl introduced dynamic switching between SSL backends which |
| 284 | emphasized (A) even more |
| 285 | |
| 286 | C) libcurl uses some TLS backend functionality even for non-TLS functions (to |
| 287 | get "good" random) so applications trying to avoid the init for |
| 288 | performance reasons would do wrong anyway |
| 289 | |
| 290 | D) not documented carefully so all this mostly just happened to work |
| 291 | for some users |
| 292 | |
| 293 | However, in spite of the problems with the feature, there were some users who |
| 294 | apparently depended on this feature and who now claim libcurl is broken for |
| 295 | them. The fix for this situation is not obvious as a downright revert of the |
| 296 | patch is totally ruled out due to those reasons above. |
| 297 | |
| 298 | https://github.com/curl/curl/issues/2276 |
| 299 | |
| 300 | 2.7 Client cert (MTLS) issues with Schannel |
| 301 | |
| 302 | See https://github.com/curl/curl/issues/3145 |
| 303 | |
| 304 | 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname |
| 305 | |
| 306 | This seems to be a limitation in the underlying Schannel API. |
| 307 | |
| 308 | https://github.com/curl/curl/issues/3284 |
| 309 | |
| 310 | 2.9 TLS session cache does not work with TFO |
| 311 | |
| 312 | See https://github.com/curl/curl/issues/4301 |
| 313 | |
| 314 | 2.10 Store TLS context per transfer instead of per connection |
| 315 | |
| 316 | The GnuTLS `backend->cred` and the OpenSSL `backend->ctx` data and their |
| 317 | proxy versions (and possibly other TLS backends), could be better moved to be |
| 318 | stored in the Curl_easy handle instead of in per connection so that a single |
| 319 | transfer that makes multiple connections can reuse the context and reduce |
| 320 | memory consumption. |
| 321 | |
| 322 | https://github.com/curl/curl/issues/5102 |
| 323 | |
| 324 | 2.11 Schannel TLS 1.2 handshake bug in old Windows versions |
| 325 | |
| 326 | In old versions of Windows such as 7 and 8.1 the Schannel TLS 1.2 handshake |
| 327 | implementation likely has a bug that can rarely cause the key exchange to |
| 328 | fail, resulting in error SEC_E_BUFFER_TOO_SMALL or SEC_E_MESSAGE_ALTERED. |
| 329 | |
| 330 | https://github.com/curl/curl/issues/5488 |
| 331 | |
| 332 | 2.12 FTPS with Schannel times out file list operation |
| 333 | |
| 334 | "Instead of the command completing, it just sits there until the timeout |
| 335 | expires." - the same command line seems to work with other TLS backends and |
| 336 | other operating systems. See https://github.com/curl/curl/issues/5284. |
| 337 | |
| 338 | 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel |
| 339 | |
| 340 | https://github.com/curl/curl/issues/8741 |
| 341 | |
| 342 | 2.14 Secure Transport disabling hostname validation also disables SNI |
| 343 | |
| 344 | SNI is the hostname that is sent by the TLS library to the server as part of |
| 345 | the TLS handshake. Secure Transport does not send SNI when hostname validation |
| 346 | is disabled. Servers that host multiple websites may not know which |
| 347 | certificate to serve without SNI or which backend server to connect to. The |
| 348 | server may serve the certificate of a default server or abort. |
| 349 | |
| 350 | If a server aborts a handshake then curl shows error "SSL peer handshake |
| 351 | failed, the server most likely requires a client certificate to connect". |
| 352 | In this case the error may also have been caused by lack of SNI. |
| 353 | |
| 354 | https://github.com/curl/curl/issues/6347 |
| 355 | |
| 356 | 2.15 Renegotiate from server may cause hang for OpenSSL backend |
| 357 | |
| 358 | A race condition has been observed when, immediately after the initial |
| 359 | handshake, curl has sent an HTTP request to the server and at the same time |
| 360 | the server has sent a TLS hello request (renegotiate) to curl. Both are |
| 361 | waiting for the other to respond. OpenSSL is supposed to send a handshake |
| 362 | response but does not. |
| 363 | |
| 364 | https://github.com/curl/curl/issues/6785 |
| 365 | https://github.com/openssl/openssl/issues/14722 |
| 366 | |
| 367 | 3. Email protocols |
| 368 | |
| 369 | 3.1 IMAP SEARCH ALL truncated response |
| 370 | |
| 371 | IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the |
| 372 | code reveals that pingpong.c contains some truncation code, at line 408, when |
| 373 | it deems the server response to be too large truncating it to 40 characters" |
| 374 | https://curl.se/bug/view.cgi?id=1366 |
| 375 | |
| 376 | 3.2 No disconnect command |
| 377 | |
| 378 | The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and |
| 379 | SMTP if a failure occurs during the authentication phase of a connection. |
| 380 | |
| 381 | 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses |
| 382 | |
| 383 | You have to tell libcurl not to expect a body, when dealing with one line |
| 384 | response commands. Please see the POP3 examples and test cases which show |
| 385 | this for the NOOP and DELE commands. https://curl.se/bug/?i=740 |
| 386 | |
| 387 | 3.4 AUTH PLAIN for SMTP is not working on all servers |
| 388 | |
| 389 | Specifying "--login-options AUTH=PLAIN" on the command line does not seem to |
| 390 | work correctly. |
| 391 | |
| 392 | See https://github.com/curl/curl/issues/4080 |
| 393 | |
| 394 | 4. Command line |
| 395 | |
| 396 | 4.1 -J and -O with %-encoded file names |
| 397 | |
| 398 | -J/--remote-header-name does not decode %-encoded file names. RFC6266 details |
| 399 | how it should be done. The can of worm is basically that we have no charset |
| 400 | handling in curl and ascii >=128 is a challenge for us. Not to mention that |
| 401 | decoding also means that we need to check for nastiness that is attempted, |
| 402 | like "../" sequences and the like. Probably everything to the left of any |
| 403 | embedded slashes should be cut off. |
| 404 | https://curl.se/bug/view.cgi?id=1294 |
| 405 | |
| 406 | -O also does not decode %-encoded names, and while it has even less |
| 407 | information about the charset involved the process is similar to the -J case. |
| 408 | |
| 409 | Note that we will not add decoding to -O without the user asking for it with |
| 410 | some other means as well, since -O has always been documented to use the name |
| 411 | exactly as specified in the URL. |
| 412 | |
| 413 | 4.2 -J with -C - fails |
| 414 | |
| 415 | When using -J (with -O), automatically resumed downloading together with "-C |
| 416 | -" fails. Without -J the same command line works. This happens because the |
| 417 | resume logic is worked out before the target file name (and thus its |
| 418 | pre-transfer size) has been figured out. |
| 419 | https://curl.se/bug/view.cgi?id=1169 |
| 420 | |
| 421 | 4.3 --retry and transfer timeouts |
| 422 | |
| 423 | If using --retry and the transfer timeouts (possibly due to using -m or |
| 424 | -y/-Y) the next attempt does not resume the transfer properly from what was |
| 425 | downloaded in the previous attempt but will truncate and restart at the |
| 426 | original position where it was at before the previous failed attempt. See |
| 427 | https://curl.se/mail/lib-2008-01/0080.html and Mandriva bug report |
| 428 | https://qa.mandriva.com/show_bug.cgi?id=22565 |
| 429 | |
| 430 | 5. Build and portability issues |
| 431 | |
| 432 | 5.1 OS400 port requires deprecated IBM library |
| 433 | |
| 434 | curl for OS400 requires QADRT to build, which provides ASCII wrappers for |
| 435 | libc/POSIX functions in the ILE, but IBM no longer supports or even offers |
| 436 | this library to download. |
| 437 | |
| 438 | See https://github.com/curl/curl/issues/5176 |
| 439 | |
| 440 | 5.2 curl-config --libs contains private details |
| 441 | |
| 442 | "curl-config --libs" will include details set in LDFLAGS when configure is |
| 443 | run that might be needed only for building libcurl. Further, curl-config |
| 444 | --cflags suffers from the same effects with CFLAGS/CPPFLAGS. |
| 445 | |
| 446 | 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 |
| 447 | |
| 448 | See https://github.com/curl/curl/issues/2905 |
| 449 | |
| 450 | 5.4 Build with statically built dependency |
| 451 | |
| 452 | The build scripts in curl (autotools, cmake and others) are primarily done to |
| 453 | work with shared/dynamic third party dependencies. When linking with shared |
| 454 | libraries, the dependency "chain" is handled automatically by the library |
| 455 | loader - on all modern systems. |
| 456 | |
| 457 | If you instead link with a static library, we need to provide all the |
| 458 | dependency libraries already at the link command line. |
| 459 | |
| 460 | Figuring out all the dependency libraries for a given library is hard, as it |
| 461 | might also involve figuring out the dependencies of the dependencies and they |
| 462 | may vary between platforms and even change between versions. |
| 463 | |
| 464 | When using static dependencies, the build scripts will mostly assume that |
| 465 | you, the user, will provide all the necessary additional dependency libraries |
| 466 | as additional arguments in the build. With configure, by setting LIBS/LDFLAGS |
| 467 | on the command line. |
| 468 | |
| 469 | We welcome help to improve curl's ability to link with static libraries, but |
| 470 | it is likely a task that we can never fully support. |
| 471 | |
| 472 | 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows |
| 473 | |
| 474 | If a URL or filename cannot be encoded using the user's current codepage then |
| 475 | it can only be encoded properly in the Unicode character set. Windows uses |
| 476 | UTF-16 encoding for Unicode and stores it in wide characters, however curl |
| 477 | and libcurl are not equipped for that at the moment except when built with |
| 478 | _UNICODE and UNICODE defined. And, except for Cygwin, Windows cannot use UTF-8 |
| 479 | as a locale. |
| 480 | |
| 481 | https://curl.se/bug/?i=345 |
| 482 | https://curl.se/bug/?i=731 |
| 483 | https://curl.se/bug/?i=3747 |
| 484 | |
| 485 | 5.6 make distclean loops forever |
| 486 | |
| 487 | Due to an issue (probably) in automake, "make distclean" can end up in a |
| 488 | never-ending loop. |
| 489 | |
| 490 | See https://github.com/curl/curl/issues/7716 |
| 491 | |
| 492 | 5.7 Visual Studio project gaps |
| 493 | |
| 494 | The Visual Studio projects lack some features that the autoconf and nmake |
| 495 | builds offer, such as the following: |
| 496 | |
| 497 | - support for zlib and nghttp2 |
| 498 | - use of static runtime libraries |
| 499 | - add the test suite components |
| 500 | |
| 501 | In addition to this the following could be implemented: |
| 502 | |
| 503 | - support for other development IDEs |
| 504 | - add PATH environment variables for third-party DLLs |
| 505 | |
| 506 | 5.8 configure finding libs in wrong directory |
| 507 | |
| 508 | When the configure script checks for third-party libraries, it adds those |
| 509 | directories to the LDFLAGS variable and then tries linking to see if it |
| 510 | works. When successful, the found directory is kept in the LDFLAGS variable |
| 511 | when the script continues to execute and do more tests and possibly check for |
| 512 | more libraries. |
| 513 | |
| 514 | This can make subsequent checks for libraries wrongly detect another |
| 515 | installation in a directory that was previously added to LDFLAGS by another |
| 516 | library check. |
| 517 | |
| 518 | A possibly better way to do these checks would be to keep the pristine LDFLAGS |
| 519 | even after successful checks and instead add those verified paths to a |
| 520 | separate variable that only after all library checks have been performed gets |
| 521 | appended to LDFLAGS. |
| 522 | |
| 523 | 5.9 Utilize Requires.private directives in libcurl.pc |
| 524 | |
| 525 | https://github.com/curl/curl/issues/864 |
| 526 | |
| 527 | 5.10 curl hangs on SMB upload over stdin |
| 528 | |
| 529 | See https://github.com/curl/curl/issues/7896 |
| 530 | |
| 531 | 5.11 configure --with-gssapi with Heimdal is ignored on macOS |
| 532 | |
| 533 | ... unless you also pass --with-gssapi-libs |
| 534 | |
| 535 | https://github.com/curl/curl/issues/3841 |
| 536 | |
| 537 | 5.12 flaky Windows CI builds |
| 538 | |
| 539 | We run many CI builds for each commit and PR on github, and especially a |
| 540 | number of the Windows builds are flaky. This means that we rarely get all CI |
| 541 | builds go green and complete without errors. This is unfortunate as it makes |
| 542 | us sometimes miss actual build problems and it is surprising to newcomers to |
| 543 | the project who (rightfully) do not expect this. |
| 544 | |
| 545 | See https://github.com/curl/curl/issues/6972 |
| 546 | |
| 547 | 5.13 long paths are not fully supported on Windows |
| 548 | |
| 549 | curl on Windows cannot access long paths (paths longer than 260 characters). |
| 550 | However, as a workaround, the Windows path prefix \\?\ which disables all path |
| 551 | interpretation may work to allow curl to access the path. For example: |
| 552 | \\?\c:\longpath. |
| 553 | |
| 554 | See https://github.com/curl/curl/issues/8361 |
| 555 | |
| 556 | 5.14 Windows Unicode builds use homedir in current locale |
| 557 | |
| 558 | The Windows Unicode builds of curl use the current locale, but expect Unicode |
| 559 | UTF-8 encoded paths for internal use such as open, access and stat. The user's |
| 560 | home directory is retrieved via curl_getenv in the current locale and not as |
| 561 | UTF-8 encoded Unicode. |
| 562 | |
| 563 | See https://github.com/curl/curl/pull/7252 and |
| 564 | https://github.com/curl/curl/pull/7281 |
| 565 | |
| 566 | 6. Authentication |
| 567 | |
| 568 | 6.1 NTLM authentication and unicode |
| 569 | |
| 570 | NTLM authentication involving unicode user name or password only works |
| 571 | properly if built with UNICODE defined together with the Schannel |
| 572 | backend. The original problem was mentioned in: |
| 573 | https://curl.se/mail/lib-2009-10/0024.html |
| 574 | https://curl.se/bug/view.cgi?id=896 |
| 575 | |
| 576 | The Schannel version verified to work as mentioned in |
| 577 | https://curl.se/mail/lib-2012-07/0073.html |
| 578 | |
| 579 | 6.2 MIT Kerberos for Windows build |
| 580 | |
| 581 | libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's |
| 582 | library header files exporting symbols/macros that should be kept private to |
| 583 | the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/ |
| 584 | |
| 585 | 6.3 NTLM in system context uses wrong name |
| 586 | |
| 587 | NTLM authentication using SSPI (on Windows) when (lib)curl is running in |
| 588 | "system context" will make it use wrong(?) user name - at least when compared |
| 589 | to what winhttp does. See https://curl.se/bug/view.cgi?id=535 |
| 590 | |
| 591 | 6.4 Negotiate and Kerberos V5 need a fake user name |
| 592 | |
| 593 | In order to get Negotiate (SPNEGO) authentication to work in HTTP or Kerberos |
| 594 | V5 in the email protocols, you need to provide a (fake) user name (this |
| 595 | concerns both curl and the lib) because the code wrongly only considers |
| 596 | authentication if there's a user name provided by setting |
| 597 | conn->bits.user_passwd in url.c https://curl.se/bug/view.cgi?id=440 How? |
| 598 | https://curl.se/mail/lib-2004-08/0182.html A possible solution is to |
| 599 | either modify this variable to be set or introduce a variable such as |
| 600 | new conn->bits.want_authentication which is set when any of the authentication |
| 601 | options are set. |
| 602 | |
| 603 | 6.5 NTLM does not support password with ยง character |
| 604 | |
| 605 | https://github.com/curl/curl/issues/2120 |
| 606 | |
| 607 | 6.6 libcurl can fail to try alternatives with --proxy-any |
| 608 | |
| 609 | When connecting via a proxy using --proxy-any, a failure to establish an |
| 610 | authentication will cause libcurl to abort trying other options if the |
| 611 | failed method has a higher preference than the alternatives. As an example, |
| 612 | --proxy-any against a proxy which advertise Negotiate and NTLM, but which |
| 613 | fails to set up Kerberos authentication will not proceed to try authentication |
| 614 | using NTLM. |
| 615 | |
| 616 | https://github.com/curl/curl/issues/876 |
| 617 | |
| 618 | 6.7 Do not clear digest for single realm |
| 619 | |
| 620 | https://github.com/curl/curl/issues/3267 |
| 621 | |
| 622 | 6.8 RTSP authentication breaks without redirect support |
| 623 | |
| 624 | RTSP authentication broke in 7.66.0. A work-around is to enable RTSP in |
| 625 | CURLOPT_REDIR_PROTOCOLS. Authentication should however not be considered an |
| 626 | actual redirect so a "proper" fix needs to be different and not require users |
| 627 | to allow redirects to RTSP to work. |
| 628 | |
| 629 | See https://github.com/curl/curl/pull/4750 |
| 630 | |
| 631 | 6.9 SHA-256 digest not supported in Windows SSPI builds |
| 632 | |
| 633 | Windows builds of curl that have SSPI enabled use the native Windows API calls |
| 634 | to create authentication strings. The call to InitializeSecurityContext fails |
| 635 | with SEC_E_QOP_NOT_SUPPORTED which causes curl to fail with CURLE_AUTH_ERROR. |
| 636 | |
| 637 | Microsoft does not document supported digest algorithms and that SEC_E error |
| 638 | code is not a documented error for InitializeSecurityContext (digest). |
| 639 | |
| 640 | https://github.com/curl/curl/issues/6302 |
| 641 | |
| 642 | 6.10 curl never completes Negotiate over HTTP |
| 643 | |
| 644 | Apparently it is not working correctly...? |
| 645 | |
| 646 | See https://github.com/curl/curl/issues/5235 |
| 647 | |
| 648 | 6.11 Negotiate on Windows fails |
| 649 | |
| 650 | When using --negotiate (or NTLM) with curl on Windows, SSL/TLS handshake |
| 651 | fails despite having a valid kerberos ticket cached. Works without any issue |
| 652 | in Unix/Linux. |
| 653 | |
| 654 | https://github.com/curl/curl/issues/5881 |
| 655 | |
| 656 | 6.12 cannot use Secure Transport with Crypto Token Kit |
| 657 | |
| 658 | https://github.com/curl/curl/issues/7048 |
| 659 | |
| 660 | 6.13 Negotiate authentication against Hadoop HDFS |
| 661 | |
| 662 | https://github.com/curl/curl/issues/8264 |
| 663 | |
| 664 | 7. FTP |
| 665 | |
| 666 | 7.1 FTP without or slow 220 response |
| 667 | |
| 668 | If a connection is made to an FTP server but the server then just never sends |
| 669 | the 220 response or otherwise is dead slow, libcurl will not acknowledge the |
| 670 | connection timeout during that phase but only the "real" timeout - which may |
| 671 | surprise users as it is probably considered to be the connect phase to most |
| 672 | people. Brought up (and is being misunderstood) in: |
| 673 | https://curl.se/bug/view.cgi?id=856 |
| 674 | |
| 675 | 7.2 FTP with CONNECT and slow server |
| 676 | |
| 677 | When doing FTP over a socks proxy or CONNECT through HTTP proxy and the multi |
| 678 | interface is used, libcurl will fail if the (passive) TCP connection for the |
| 679 | data transfer is not more or less instant as the code does not properly wait |
| 680 | for the connect to be confirmed. See test case 564 for a first shot at a test |
| 681 | case. |
| 682 | |
| 683 | 7.3 FTP with NOBODY and FAILONERROR |
| 684 | |
| 685 | It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR |
| 686 | with FTP to detect if a file exists or not, but it is not working: |
| 687 | https://curl.se/mail/lib-2008-07/0295.html |
| 688 | |
| 689 | 7.4 FTP with ACCT |
| 690 | |
| 691 | When doing an operation over FTP that requires the ACCT command (but not when |
| 692 | logging in), the operation will fail since libcurl does not detect this and |
| 693 | thus fails to issue the correct command: |
| 694 | https://curl.se/bug/view.cgi?id=635 |
| 695 | |
| 696 | 7.5 ASCII FTP |
| 697 | |
| 698 | FTP ASCII transfers do not follow RFC959. They do not convert the data |
| 699 | accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1 |
| 700 | clearly describes how this should be done: |
| 701 | |
| 702 | The sender converts the data from an internal character representation to |
| 703 | the standard 8-bit NVT-ASCII representation (see the Telnet |
| 704 | specification). The receiver will convert the data from the standard |
| 705 | form to his own internal form. |
| 706 | |
| 707 | Since 7.15.4 at least line endings are converted. |
| 708 | |
| 709 | 7.6 FTP with NULs in URL parts |
| 710 | |
| 711 | FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>, |
| 712 | <password>, and <fpath> components, encoded as "%00". The problem is that |
| 713 | curl_unescape does not detect this, but instead returns a shortened C string. |
| 714 | From a strict FTP protocol standpoint, NUL is a valid character within RFC |
| 715 | 959 <string>, so the way to handle this correctly in curl would be to use a |
| 716 | data structure other than a plain C string, one that can handle embedded NUL |
| 717 | characters. From a practical standpoint, most FTP servers would not |
| 718 | meaningfully support NUL characters within RFC 959 <string>, anyway (e.g., |
| 719 | Unix pathnames may not contain NUL). |
| 720 | |
| 721 | 7.7 FTP and empty path parts in the URL |
| 722 | |
| 723 | libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that |
| 724 | such parts should be sent to the server as 'CWD ' (without an argument). The |
| 725 | only exception to this rule, is that we knowingly break this if the empty |
| 726 | part is first in the path, as then we use the double slashes to indicate that |
| 727 | the user wants to reach the root dir (this exception SHALL remain even when |
| 728 | this bug is fixed). |
| 729 | |
| 730 | 7.8 Premature transfer end but healthy control channel |
| 731 | |
| 732 | When 'multi_done' is called before the transfer has been completed the normal |
| 733 | way, it is considered a "premature" transfer end. In this situation, libcurl |
| 734 | closes the connection assuming it does not know the state of the connection so |
| 735 | it cannot be reused for subsequent requests. |
| 736 | |
| 737 | With FTP however, this is not necessarily true but there are a bunch of |
| 738 | situations (listed in the ftp_done code) where it *could* keep the connection |
| 739 | alive even in this situation - but the current code does not. Fixing this would |
| 740 | allow libcurl to reuse FTP connections better. |
| 741 | |
| 742 | 7.9 Passive transfer tries only one IP address |
| 743 | |
| 744 | When doing FTP operations through a proxy at localhost, the reported spotted |
| 745 | that curl only tried to connect once to the proxy, while it had multiple |
| 746 | addresses and a failed connect on one address should make it try the next. |
| 747 | |
| 748 | After switching to passive mode (EPSV), curl should try all IP addresses for |
| 749 | "localhost". Currently it tries ::1, but it should also try 127.0.0.1. |
| 750 | |
| 751 | See https://github.com/curl/curl/issues/1508 |
| 752 | |
| 753 | 7.10 FTPS needs session reuse |
| 754 | |
| 755 | When the control connection is reused for a subsequent transfer, some FTPS |
| 756 | servers complain about "missing session reuse" for the data channel for the |
| 757 | second transfer. |
| 758 | |
| 759 | https://github.com/curl/curl/issues/4654 |
| 760 | |
| 761 | 7.11 FTPS upload data loss with TLS 1.3 |
| 762 | |
| 763 | During FTPS upload curl does not attempt to read TLS handshake messages sent |
| 764 | after the initial handshake. OpenSSL servers running TLS 1.3 may send such a |
| 765 | message. When curl closes the upload connection if unread data has been |
| 766 | received (such as a TLS handshake message) then the TCP protocol sends an |
| 767 | RST to the server, which may cause the server to discard or truncate the |
| 768 | upload if it has not read all sent data yet, and then return an error to curl |
| 769 | on the control channel connection. |
| 770 | |
| 771 | Since 7.78.0 this is mostly fixed. curl will do a single read before closing |
| 772 | TLS connections (which causes the TLS library to read handshake messages), |
| 773 | however there is still possibility of an RST if more messages need to be read |
| 774 | or a message arrives after the read but before close (network race condition). |
| 775 | |
| 776 | https://github.com/curl/curl/issues/6149 |
| 777 | |
| 778 | 7.12 FTPS directory listing hangs on Windows with Schannel |
| 779 | |
| 780 | https://github.com/curl/curl/issues/9161 |
| 781 | |
| 782 | 8. TELNET |
| 783 | |
| 784 | 8.1 TELNET and time limitations do not work |
| 785 | |
| 786 | When using telnet, the time limitation options do not work. |
| 787 | https://curl.se/bug/view.cgi?id=846 |
| 788 | |
| 789 | 8.2 Microsoft telnet server |
| 790 | |
| 791 | There seems to be a problem when connecting to the Microsoft telnet server. |
| 792 | https://curl.se/bug/view.cgi?id=649 |
| 793 | |
| 794 | |
| 795 | 9. SFTP and SCP |
| 796 | |
| 797 | 9.1 SFTP does not do CURLOPT_POSTQUOTE correct |
| 798 | |
| 799 | When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP server |
| 800 | using the multi interface, the commands are not being sent correctly and |
| 801 | instead the connection is "cancelled" (the operation is considered done) |
| 802 | prematurely. There is a half-baked (busy-looping) patch provided in the bug |
| 803 | report but it cannot be accepted as-is. See |
| 804 | https://curl.se/bug/view.cgi?id=748 |
| 805 | |
| 806 | 9.2 wolfssh: publickey auth does not work |
| 807 | |
| 808 | When building curl to use the wolfSSH backend for SFTP, the publickey |
| 809 | authentication does not work. This is simply functionality not written for curl |
| 810 | yet, the necessary API for make this work is provided by wolfSSH. |
| 811 | |
| 812 | See https://github.com/curl/curl/issues/4820 |
| 813 | |
| 814 | 9.3 Remote recursive folder creation with SFTP |
| 815 | |
| 816 | On this servers, the curl fails to create directories on the remote server |
| 817 | even when the CURLOPT_FTP_CREATE_MISSING_DIRS option is set. |
| 818 | |
| 819 | See https://github.com/curl/curl/issues/5204 |
| 820 | |
| 821 | 9.4 libssh blocking and infinite loop problem |
| 822 | |
| 823 | In the SSH_SFTP_INIT state for libssh, the ssh session working mode is set to |
| 824 | blocking mode. If the network is suddenly disconnected during sftp |
| 825 | transmission, curl will be stuck, even if curl is configured with a timeout. |
| 826 | |
| 827 | https://github.com/curl/curl/issues/8632 |
| 828 | |
| 829 | |
| 830 | 10. SOCKS |
| 831 | |
| 832 | 10.3 FTPS over SOCKS |
| 833 | |
| 834 | libcurl does not support FTPS over a SOCKS proxy. |
| 835 | |
| 836 | 10.4 active FTP over a SOCKS |
| 837 | |
| 838 | libcurl does not support active FTP over a SOCKS proxy |
| 839 | |
| 840 | |
| 841 | 11. Internals |
| 842 | |
| 843 | 11.1 Curl leaks .onion hostnames in DNS |
| 844 | |
| 845 | Curl sends DNS requests for hostnames with a .onion TLD. This leaks |
| 846 | information about what the user is attempting to access, and violates this |
| 847 | requirement of RFC7686: https://datatracker.ietf.org/doc/html/rfc7686 |
| 848 | |
| 849 | Issue: https://github.com/curl/curl/issues/543 |
| 850 | |
| 851 | 11.2 error buffer not set if connection to multiple addresses fails |
| 852 | |
| 853 | If you ask libcurl to resolve a hostname like example.com to IPv6 addresses |
| 854 | only. But you only have IPv4 connectivity. libcurl will correctly fail with |
| 855 | CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER |
| 856 | remains empty. Issue: https://github.com/curl/curl/issues/544 |
| 857 | |
| 858 | 11.3 Disconnects do not do verbose |
| 859 | |
| 860 | Due to how libcurl keeps connections alive in the "connection pool" after use |
| 861 | to potentially transcend the life-time of the initial easy handle that was |
| 862 | used to drive the transfer over that connection, it uses a *separate* and |
| 863 | internal easy handle when it shuts down the connection. That separate |
| 864 | connection might not have the same settings as the original easy handle, and |
| 865 | in particular it is often note-worthy that it does not have the same VERBOSE |
| 866 | and debug callbacks setup so that an application will not get the protocol |
| 867 | data for the disconnect phase of a transfer the same way it got all the other |
| 868 | data. |
| 869 | |
| 870 | This is because the original easy handle might have already been freed at that |
| 871 | point and the application might not at all be prepared that the callback |
| 872 | would get called again long after the handle was freed. |
| 873 | |
| 874 | See for example https://github.com/curl/curl/issues/6995 |
| 875 | |
| 876 | 11.4 HTTP test server 'connection-monitor' problems |
| 877 | |
| 878 | The 'connection-monitor' feature of the sws HTTP test server does not work |
| 879 | properly if some tests are run in unexpected order. Like 1509 and then 1525. |
| 880 | |
| 881 | See https://github.com/curl/curl/issues/868 |
| 882 | |
| 883 | 11.5 Connection information when using TCP Fast Open |
| 884 | |
| 885 | CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is |
| 886 | enabled. |
| 887 | |
| 888 | See https://github.com/curl/curl/issues/1332 and |
| 889 | https://github.com/curl/curl/issues/4296 |
| 890 | |
| 891 | 11.7 signal-based resolver timeouts |
| 892 | |
| 893 | libcurl built without an asynchronous resolver library uses alarm() to time |
| 894 | out DNS lookups. When a timeout occurs, this causes libcurl to jump from the |
| 895 | signal handler back into the library with a sigsetjmp, which effectively |
| 896 | causes libcurl to continue running within the signal handler. This is |
| 897 | non-portable and could cause problems on some platforms. A discussion on the |
| 898 | problem is available at https://curl.se/mail/lib-2008-09/0197.html |
| 899 | |
| 900 | Also, alarm() provides timeout resolution only to the nearest second. alarm |
| 901 | ought to be replaced by setitimer on systems that support it. |
| 902 | |
| 903 | 11.8 DoH leaks memory after followlocation |
| 904 | |
| 905 | https://github.com/curl/curl/issues/4592 |
| 906 | |
| 907 | 11.9 DoH does not inherit all transfer options |
| 908 | |
| 909 | Some options are not inherited because they are not relevant for the DoH SSL |
| 910 | connections, or inheriting the option may result in unexpected behavior. For |
| 911 | example the user's debug function callback is not inherited because it would |
| 912 | be unexpected for internal handles (ie DoH handles) to be passed to that |
| 913 | callback. |
| 914 | |
| 915 | If an option is not inherited then it is not possible to set it separately for |
| 916 | DoH without a DoH-specific option. For example: CURLOPT_DOH_SSL_VERIFYHOST, |
| 917 | CURLOPT_DOH_SSL_VERIFYPEER and CURLOPT_DOH_SSL_VERIFYSTATUS. |
| 918 | |
| 919 | See https://github.com/curl/curl/issues/6605 |
| 920 | |
| 921 | 11.10 Blocking socket operations in non-blocking API |
| 922 | |
| 923 | The list of blocking socket operations is in TODO section "More non-blocking". |
| 924 | |
| 925 | 11.11 A shared connection cache is not thread-safe |
| 926 | |
| 927 | The share interface offers CURL_LOCK_DATA_CONNECT to have multiple easy |
| 928 | handle share a connection cache, but due to how connections are used they are |
| 929 | still not thread-safe when used shared. |
| 930 | |
| 931 | See https://github.com/curl/curl/issues/4915 and lib1541.c |
| 932 | |
| 933 | 11.14 Multi perform hangs waiting for threaded resolver |
| 934 | |
| 935 | If a threaded resolver takes a long time to complete, libcurl can be blocked |
| 936 | waiting for it for a longer time than expected - and longer than the set |
| 937 | timeouts. |
| 938 | |
| 939 | See https://github.com/curl/curl/issues/2975 and |
| 940 | https://github.com/curl/curl/issues/4852 |
| 941 | |
| 942 | 11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing |
| 943 | |
| 944 | When libcurl creates sockets with socketpair(), those are not "exposed" in |
| 945 | CURLOPT_OPENSOCKETFUNCTION and therefore might surprise and be unknown to |
| 946 | applications that expect and want all sockets known beforehand. One way to |
| 947 | address this issue is to introduce a CURLOPT_OPENSOCKETPAIRFUNCTION callback. |
| 948 | |
| 949 | https://github.com/curl/curl/issues/5747 |
| 950 | |
| 951 | 11.16 libcurl uses renames instead of locking for atomic operations |
| 952 | |
| 953 | For saving cookies, alt-svc and hsts files. This is bad when for example the |
| 954 | file is stored in a directory where the application has no write permission |
| 955 | but it has permission for the file. |
| 956 | |
| 957 | https://github.com/curl/curl/issues/6882 |
| 958 | https://github.com/curl/curl/pull/6884 |
| 959 | |
| 960 | 12. LDAP |
| 961 | |
| 962 | 12.1 OpenLDAP hangs after returning results |
| 963 | |
| 964 | By configuration defaults, OpenLDAP automatically chase referrals on |
| 965 | secondary socket descriptors. The OpenLDAP backend is asynchronous and thus |
| 966 | should monitor all socket descriptors involved. Currently, these secondary |
| 967 | descriptors are not monitored, causing OpenLDAP library to never receive |
| 968 | data from them. |
| 969 | |
| 970 | As a temporary workaround, disable referrals chasing by configuration. |
| 971 | |
| 972 | The fix is not easy: proper automatic referrals chasing requires a |
| 973 | synchronous bind callback and monitoring an arbitrary number of socket |
| 974 | descriptors for a single easy handle (currently limited to 5). |
| 975 | |
| 976 | Generic LDAP is synchronous: OK. |
| 977 | |
| 978 | See https://github.com/curl/curl/issues/622 and |
| 979 | https://curl.se/mail/lib-2016-01/0101.html |
| 980 | |
| 981 | 12.2 LDAP on Windows does authentication wrong? |
| 982 | |
| 983 | https://github.com/curl/curl/issues/3116 |
| 984 | |
| 985 | 12.3 LDAP on Windows does not work |
| 986 | |
| 987 | A simple curl command line getting "ldap://ldap.forumsys.com" returns an |
| 988 | error that says "no memory" ! |
| 989 | |
| 990 | https://github.com/curl/curl/issues/4261 |
| 991 | |
| 992 | 12.4 LDAPS with NSS is slow |
| 993 | |
| 994 | See https://github.com/curl/curl/issues/5874 |
| 995 | |
| 996 | 13. TCP/IP |
| 997 | |
| 998 | 13.1 --interface for ipv6 binds to unusable IP address |
| 999 | |
| 1000 | Since IPv6 provides a lot of addresses with different scope, binding to an |
| 1001 | IPv6 address needs to take the proper care so that it does not bind to a |
| 1002 | locally scoped address as that is bound to fail. |
| 1003 | |
| 1004 | https://github.com/curl/curl/issues/686 |
| 1005 | |
| 1006 | 13.2 Trying local ports fails on Windows |
| 1007 | |
| 1008 | This makes '--local-port [range]' to not work since curl can't properly |
| 1009 | detect if a port is already in use, so it'll try the first port, use that and |
| 1010 | then subsequently fail anyway if that was actually in use. |
| 1011 | |
| 1012 | https://github.com/curl/curl/issues/8112 |
| 1013 | |
| 1014 | 14. DICT |
| 1015 | |
| 1016 | 14.1 DICT responses show the underlying protocol |
| 1017 | |
| 1018 | When getting a DICT response, the protocol parts of DICT are not stripped off |
| 1019 | from the output. |
| 1020 | |
| 1021 | https://github.com/curl/curl/issues/1809 |
| 1022 | |
| 1023 | 15. CMake |
| 1024 | |
| 1025 | 15.1 use correct SONAME |
| 1026 | |
| 1027 | The autotools build sets the SONAME properly according to VERSIONINFO in |
| 1028 | lib/Makefile.am and so should cmake to make comparable build. |
| 1029 | |
| 1030 | See https://github.com/curl/curl/pull/5935 |
| 1031 | |
| 1032 | 15.2 support build with GnuTLS |
| 1033 | |
| 1034 | 15.3 unusable tool_hugehelp.c with MinGW |
| 1035 | |
| 1036 | see https://github.com/curl/curl/issues/3125 |
| 1037 | |
| 1038 | 15.4 build docs/curl.1 |
| 1039 | |
| 1040 | The cmake build does not create the docs/curl.1 file and therefore must rely on |
| 1041 | it being there already. This makes the --manual option not work and test |
| 1042 | cases like 1139 cannot function. |
| 1043 | |
| 1044 | 15.5 build on Linux links libcurl to libdl |
| 1045 | |
| 1046 | ... which it should not need to! |
| 1047 | |
| 1048 | See https://github.com/curl/curl/issues/6165 |
| 1049 | |
| 1050 | 15.6 uses -lpthread instead of Threads::Threads |
| 1051 | |
| 1052 | See https://github.com/curl/curl/issues/6166 |
| 1053 | |
| 1054 | 15.7 generated .pc file contains strange entries |
| 1055 | |
| 1056 | The Libs.private field of the generated .pc file contains -lgcc -lgcc_s -lc |
| 1057 | -lgcc -lgcc_s |
| 1058 | |
| 1059 | See https://github.com/curl/curl/issues/6167 |
| 1060 | |
| 1061 | 15.8 libcurl.pc uses absolute library paths |
| 1062 | |
| 1063 | The libcurl.pc file generated by cmake contains things like Libs.private: |
| 1064 | /usr/lib64/libssl.so /usr/lib64/libcrypto.so /usr/lib64/libz.so. The |
| 1065 | autotools equivalent would say Libs.private: -lssl -lcrypto -lz |
| 1066 | |
| 1067 | See https://github.com/curl/curl/issues/6169 |
| 1068 | |
| 1069 | 15.9 cert paths autodetected when cross-compiling |
| 1070 | |
| 1071 | The autotools build disables the ca_path/ca_bundle detection when |
| 1072 | cross-compiling. The cmake build keeps doing the detection. |
| 1073 | |
| 1074 | See https://github.com/curl/curl/issues/6178 |
| 1075 | |
| 1076 | 15.10 libpsl is not supported |
| 1077 | |
| 1078 | See https://github.com/curl/curl/issues/6214 |
| 1079 | |
| 1080 | 15.11 ExternalProject_Add does not set CURL_CA_PATH |
| 1081 | |
| 1082 | CURL_CA_BUNDLE and CURL_CA_PATH are not set properly when cmake's |
| 1083 | ExternalProject_Add is used to build curl as a dependency. |
| 1084 | |
| 1085 | See https://github.com/curl/curl/issues/6313 |
| 1086 | |
| 1087 | 15.12 cannot enable LDAPS on Windows |
| 1088 | |
| 1089 | See https://github.com/curl/curl/issues/6284 |
| 1090 | |
| 1091 | 15.13 CMake build with MIT Kerberos does not work |
| 1092 | |
| 1093 | Minimum CMake version was bumped in curl 7.71.0 (#5358) Since CMake 3.2 |
| 1094 | try_compile started respecting the CMAKE_EXE_FLAGS. The code dealing with |
| 1095 | MIT Kerberos detection sets few variables to potentially weird mix of space, |
| 1096 | and ;-separated flags. It had to blow up at some point. All the CMake checks |
| 1097 | that involve compilation are doomed from that point, the configured tree |
| 1098 | cannot be built. |
| 1099 | |
| 1100 | https://github.com/curl/curl/issues/6904 |
| 1101 | |
| 1102 | 15.14 cmake build is not thread-safe |
| 1103 | |
| 1104 | The cmake build does not check for and verify presence of a working Atomic |
| 1105 | type, which then makes curl_global_init() to not build thread-safe on |
| 1106 | non-Windows platforms. |
| 1107 | |
| 1108 | Bug: https://github.com/curl/curl/issues/8973 |
| 1109 | Partial fix: https://github.com/curl/curl/pull/8982 |
| 1110 | |
| 1111 | 16. Applications |
| 1112 | |
| 1113 | 17. HTTP/2 |
| 1114 | |
| 1115 | 17.1 Excessive HTTP/2 packets with TCP_NODELAY |
| 1116 | |
| 1117 | Because of how curl sets TCP_NODELAY by default, HTTP/2 requests are issued |
| 1118 | using more separate TCP packets than it would otherwise need to use. This |
| 1119 | means spending more bytes than it has to. Just disabling TCP_NODELAY for |
| 1120 | HTTP/2 is also not the correct fix because that then makes the outgoing |
| 1121 | packets to get delayed. |
| 1122 | |
| 1123 | See https://github.com/curl/curl/issues/6363 |
| 1124 | |
| 1125 | 17.2 HTTP/2 frames while in the connection pool kill reuse |
| 1126 | |
| 1127 | If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to |
| 1128 | curl while the connection is held in curl's connection pool, the socket will |
| 1129 | be found readable when considered for reuse and that makes curl think it is |
| 1130 | dead and then it will be closed and a new connection gets created instead. |
| 1131 | |
| 1132 | This is *best* fixed by adding monitoring to connections while they are kept |
| 1133 | in the pool so that pings can be responded to appropriately. |
| 1134 | |
| 1135 | 17.3 ENHANCE_YOUR_CALM causes infinite retries |
| 1136 | |
| 1137 | Infinite retries with 2 parallel requests on one connection receiving GOAWAY |
| 1138 | with ENHANCE_YOUR_CALM error code. |
| 1139 | |
| 1140 | See https://github.com/curl/curl/issues/5119 |
| 1141 | |
| 1142 | 17.4 Connection failures with parallel HTTP/2 |
| 1143 | |
| 1144 | See https://github.com/curl/curl/issues/5611 |
| 1145 | |
| 1146 | 17.5 HTTP/2 connections through HTTPS proxy frequently stall |
| 1147 | |
| 1148 | See https://github.com/curl/curl/issues/6936 |
| 1149 | |
| 1150 | 18. HTTP/3 |
| 1151 | |
| 1152 | 18.1 If the HTTP/3 server closes connection during upload curl hangs |
| 1153 | |
| 1154 | See https://github.com/curl/curl/issues/6606 |
| 1155 | |
| 1156 | 18.2 Transfer closed with n bytes remaining to read |
| 1157 | |
| 1158 | HTTP/3 transfers with the Jetty HTTP/3 server seem to not work. |
| 1159 | |
| 1160 | https://github.com/curl/curl/issues/8523 |
| 1161 | |
| 1162 | 18.4 timeout when reusing a http3 connection |
| 1163 | |
| 1164 | HTTP/3 with quiche seems to not work and always timeout a subsequent transfer |
| 1165 | that reuses an already established connection |
| 1166 | |
| 1167 | https://github.com/curl/curl/issues/8764 |
| 1168 | |
| 1169 | 18.9 connection migration does not work |
| 1170 | |
| 1171 | https://github.com/curl/curl/issues/7695 |