Annotation of embedaddon/curl/docs/KNOWN_BUGS, revision 1.1
1.1 ! misho 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 isn't used for all name resolves when enabled
! 22: 1.9 HTTP/2 frames while in the connection pool kill reuse
! 23: 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
! 24:
! 25: 2. TLS
! 26: 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
! 27: 2.2 DER in keychain
! 28: 2.4 DarwinSSL won't 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 doesn't work with TFO
! 34: 2.10 Store TLS context per transfer instead of per connection
! 35:
! 36: 3. Email protocols
! 37: 3.1 IMAP SEARCH ALL truncated response
! 38: 3.2 No disconnect command
! 39: 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses
! 40: 3.4 AUTH PLAIN for SMTP is not working on all servers
! 41:
! 42: 4. Command line
! 43: 4.1 -J and -O with %-encoded file names
! 44: 4.2 -J with -C - fails
! 45: 4.3 --retry and transfer timeouts
! 46: 4.4 --upload-file . hang if delay in STDIN
! 47: 4.5 Improve --data-urlencode space encoding
! 48:
! 49: 5. Build and portability issues
! 50: 5.2 curl-config --libs contains private details
! 51: 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
! 52: 5.4 Cannot compile against a static build of OpenLDAP
! 53: 5.5 can't handle Unicode arguments in Windows
! 54: 5.6 cmake support gaps
! 55: 5.7 Visual Studio project gaps
! 56: 5.8 configure finding libs in wrong directory
! 57: 5.9 Utilize Requires.private directives in libcurl.pc
! 58: 5.10 IDN tests failing on Windows / MSYS2
! 59: 5.11 configure --with-gssapi with Heimdal is ignored on macOS
! 60:
! 61: 6. Authentication
! 62: 6.1 NTLM authentication and unicode
! 63: 6.2 MIT Kerberos for Windows build
! 64: 6.3 NTLM in system context uses wrong name
! 65: 6.4 Negotiate and Kerberos V5 need a fake user name
! 66: 6.5 NTLM doesn't support password with § character
! 67: 6.6 libcurl can fail to try alternatives with --proxy-any
! 68: 6.7 Don't clear digest for single realm
! 69:
! 70: 7. FTP
! 71: 7.1 FTP without or slow 220 response
! 72: 7.2 FTP with CONNECT and slow server
! 73: 7.3 FTP with NOBODY and FAILONERROR
! 74: 7.4 FTP with ACCT
! 75: 7.5 ASCII FTP
! 76: 7.6 FTP with NULs in URL parts
! 77: 7.7 FTP and empty path parts in the URL
! 78: 7.8 Premature transfer end but healthy control channel
! 79: 7.9 Passive transfer tries only one IP address
! 80: 7.10 FTPS needs session reuse
! 81:
! 82: 8. TELNET
! 83: 8.1 TELNET and time limitations don't work
! 84: 8.2 Microsoft telnet server
! 85:
! 86: 9. SFTP and SCP
! 87: 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct
! 88:
! 89: 10. SOCKS
! 90: 10.3 FTPS over SOCKS
! 91: 10.4 active FTP over a SOCKS
! 92:
! 93: 11. Internals
! 94: 11.1 Curl leaks .onion hostnames in DNS
! 95: 11.2 error buffer not set if connection to multiple addresses fails
! 96: 11.3 c-ares deviates from stock resolver on http://1346569778
! 97: 11.4 HTTP test server 'connection-monitor' problems
! 98: 11.5 Connection information when using TCP Fast Open
! 99: 11.6 slow connect to localhost on Windows
! 100: 11.7 signal-based resolver timeouts
! 101: 11.8 DoH leaks memory after followlocation
! 102: 11.9 DoH doesn't inherit all transfer options
! 103: 11.10 Blocking socket operations in non-blocking API
! 104:
! 105: 12. LDAP and OpenLDAP
! 106: 12.1 OpenLDAP hangs after returning results
! 107: 12.2 LDAP on Windows does authentication wrong?
! 108: 12.3 LDAP on Windows doesn't work
! 109:
! 110: 13. TCP/IP
! 111: 13.1 --interface for ipv6 binds to unusable IP address
! 112:
! 113: 14 DICT
! 114: 14.1 DICT responses show the underlying protocol
! 115:
! 116: ==============================================================================
! 117:
! 118: 1. HTTP
! 119:
! 120: 1.2 Multiple methods in a single WWW-Authenticate: header
! 121:
! 122: The HTTP responses headers WWW-Authenticate: can provide information about
! 123: multiple authentication methods as multiple headers or as several methods
! 124: within a single header. The latter way, several methods in the same physical
! 125: line, is not supported by libcurl's parser. (For no good reason.)
! 126:
! 127: 1.3 STARTTRANSFER time is wrong for HTTP POSTs
! 128:
! 129: Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with
! 130: GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME
! 131: is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus
! 132: CURLINFO_PRETRANSFER_TIME is near to zero every time.
! 133:
! 134: https://github.com/curl/curl/issues/218
! 135: https://curl.haxx.se/bug/view.cgi?id=1213
! 136:
! 137: 1.4 multipart formposts file name encoding
! 138:
! 139: When creating multipart formposts. The file name part can be encoded with
! 140: something beyond ascii but currently libcurl will only pass in the verbatim
! 141: string the app provides. There are several browsers that already do this
! 142: encoding. The key seems to be the updated draft to RFC2231:
! 143: https://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02
! 144:
! 145: 1.5 Expect-100 meets 417
! 146:
! 147: If an upload using Expect: 100-continue receives an HTTP 417 response, it
! 148: ought to be automatically resent without the Expect:. A workaround is for
! 149: the client application to redo the transfer after disabling Expect:.
! 150: https://curl.haxx.se/mail/archive-2008-02/0043.html
! 151:
! 152: 1.6 Unnecessary close when 401 received waiting for 100
! 153:
! 154: libcurl closes the connection if an HTTP 401 reply is received while it is
! 155: waiting for the 100-continue response.
! 156: https://curl.haxx.se/mail/lib-2008-08/0462.html
! 157:
! 158: 1.7 Deflate error after all content was received
! 159:
! 160: There's a situation where we can get an error in a HTTP response that is
! 161: compressed, when that error is detected after all the actual body contents
! 162: have been received and delivered to the application. This is tricky, but is
! 163: ultimately a broken server.
! 164:
! 165: See https://github.com/curl/curl/issues/2719
! 166:
! 167: 1.8 DoH isn't used for all name resolves when enabled
! 168:
! 169: Even if DoH is specified to be used, there are some name resolves that are
! 170: done without it. This should be fixed. When the internal function
! 171: `Curl_resolver_wait_resolv()` is called, it doesn't use DoH to complete the
! 172: resolve as it otherwise should.
! 173:
! 174: See https://github.com/curl/curl/pull/3857 and
! 175: https://github.com/curl/curl/pull/3850
! 176:
! 177: 1.9 HTTP/2 frames while in the connection pool kill reuse
! 178:
! 179: If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
! 180: curl while the connection is held in curl's connection pool, the socket will
! 181: be found readable when considered for reuse and that makes curl think it is
! 182: dead and then it will be closed and a new connection gets created instead.
! 183:
! 184: This is *best* fixed by adding monitoring to connections while they are kept
! 185: in the pool so that pings can be responded to appropriately.
! 186:
! 187: 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
! 188:
! 189: I'm using libcurl to POST form data using a FILE* with the CURLFORM_STREAM
! 190: option of curl_formadd(). I've noticed that if the connection drops at just
! 191: the right time, the POST is reattempted without the data from the file. It
! 192: seems like the file stream position isn't getting reset to the beginning of
! 193: the file. I found the CURLOPT_SEEKFUNCTION option and set that with a
! 194: function that performs an fseek() on the FILE*. However, setting that didn't
! 195: seem to fix the issue or even get called. See
! 196: https://github.com/curl/curl/issues/768
! 197:
! 198:
! 199: 2. TLS
! 200:
! 201: 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
! 202:
! 203: CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
! 204: backends, so relying on this information in a generic app is flaky.
! 205:
! 206: 2.2 DER in keychain
! 207:
! 208: Curl doesn't recognize certificates in DER format in keychain, but it works
! 209: with PEM. https://curl.haxx.se/bug/view.cgi?id=1065
! 210:
! 211: 2.4 DarwinSSL won't import PKCS#12 client certificates without a password
! 212:
! 213: libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that
! 214: function rejects certificates that do not have a password.
! 215: https://github.com/curl/curl/issues/1308
! 216:
! 217: 2.5 Client cert handling with Issuer DN differs between backends
! 218:
! 219: When the specified client certificate doesn't match any of the
! 220: server-specified DNs, the OpenSSL and GnuTLS backends behave differently.
! 221: The github discussion may contain a solution.
! 222:
! 223: See https://github.com/curl/curl/issues/1411
! 224:
! 225: 2.6 CURL_GLOBAL_SSL
! 226:
! 227: Since libcurl 7.57.0, the flag CURL_GLOBAL_SSL is a no-op. The change was
! 228: merged in https://github.com/curl/curl/commit/d661b0afb571a
! 229:
! 230: It was removed since it was
! 231:
! 232: A) never clear for applications on how to deal with init in the light of
! 233: different SSL backends (the option was added back in the days when life
! 234: was simpler)
! 235:
! 236: B) multissl introduced dynamic switching between SSL backends which
! 237: emphasized (A) even more
! 238:
! 239: C) libcurl uses some TLS backend functionality even for non-TLS functions (to
! 240: get "good" random) so applications trying to avoid the init for
! 241: performance reasons would do wrong anyway
! 242:
! 243: D) never very carefully documented so all this mostly just happened to work
! 244: for some users
! 245:
! 246: However, in spite of the problems with the feature, there were some users who
! 247: apparently depended on this feature and who now claim libcurl is broken for
! 248: them. The fix for this situation is not obvious as a downright revert of the
! 249: patch is totally ruled out due to those reasons above.
! 250:
! 251: https://github.com/curl/curl/issues/2276
! 252:
! 253: 2.7 Client cert (MTLS) issues with Schannel
! 254:
! 255: See https://github.com/curl/curl/issues/3145
! 256:
! 257: 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
! 258:
! 259: This seems to be a limitation in the underlying Schannel API.
! 260:
! 261: https://github.com/curl/curl/issues/3284
! 262:
! 263: 2.9 TLS session cache doesn't work with TFO
! 264:
! 265: See https://github.com/curl/curl/issues/4301
! 266:
! 267: 2.10 Store TLS context per transfer instead of per connection
! 268:
! 269: The GnuTLS `backend->cred` and the OpenSSL `backend->ctx` data and their
! 270: proxy versions (and possibly other TLS backends), could be better moved to be
! 271: stored in the Curl_easy handle instead of in per connection so that a single
! 272: transfer that makes multiple connections can reuse the context and reduce
! 273: memory consumption.
! 274:
! 275: https://github.com/curl/curl/issues/5102
! 276:
! 277: 3. Email protocols
! 278:
! 279: 3.1 IMAP SEARCH ALL truncated response
! 280:
! 281: IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
! 282: code reveals that pingpong.c contains some truncation code, at line 408, when
! 283: it deems the server response to be too large truncating it to 40 characters"
! 284: https://curl.haxx.se/bug/view.cgi?id=1366
! 285:
! 286: 3.2 No disconnect command
! 287:
! 288: The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
! 289: SMTP if a failure occurs during the authentication phase of a connection.
! 290:
! 291: 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses
! 292:
! 293: You have to tell libcurl not to expect a body, when dealing with one line
! 294: response commands. Please see the POP3 examples and test cases which show
! 295: this for the NOOP and DELE commands. https://curl.haxx.se/bug/?i=740
! 296:
! 297: 3.4 AUTH PLAIN for SMTP is not working on all servers
! 298:
! 299: Specifying "--login-options AUTH=PLAIN" on the command line doesn't seem to
! 300: work correctly.
! 301:
! 302: See https://github.com/curl/curl/issues/4080
! 303:
! 304: 4. Command line
! 305:
! 306: 4.1 -J and -O with %-encoded file names
! 307:
! 308: -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 details
! 309: how it should be done. The can of worm is basically that we have no charset
! 310: handling in curl and ascii >=128 is a challenge for us. Not to mention that
! 311: decoding also means that we need to check for nastiness that is attempted,
! 312: like "../" sequences and the like. Probably everything to the left of any
! 313: embedded slashes should be cut off.
! 314: https://curl.haxx.se/bug/view.cgi?id=1294
! 315:
! 316: -O also doesn't decode %-encoded names, and while it has even less
! 317: information about the charset involved the process is similar to the -J case.
! 318:
! 319: Note that we won't add decoding to -O without the user asking for it with
! 320: some other means as well, since -O has always been documented to use the name
! 321: exactly as specified in the URL.
! 322:
! 323: 4.2 -J with -C - fails
! 324:
! 325: When using -J (with -O), automatically resumed downloading together with "-C
! 326: -" fails. Without -J the same command line works! This happens because the
! 327: resume logic is worked out before the target file name (and thus its
! 328: pre-transfer size) has been figured out!
! 329: https://curl.haxx.se/bug/view.cgi?id=1169
! 330:
! 331: 4.3 --retry and transfer timeouts
! 332:
! 333: If using --retry and the transfer timeouts (possibly due to using -m or
! 334: -y/-Y) the next attempt doesn't resume the transfer properly from what was
! 335: downloaded in the previous attempt but will truncate and restart at the
! 336: original position where it was at before the previous failed attempt. See
! 337: https://curl.haxx.se/mail/lib-2008-01/0080.html and Mandriva bug report
! 338: https://qa.mandriva.com/show_bug.cgi?id=22565
! 339:
! 340: 4.4 --upload-file . hangs if delay in STDIN
! 341:
! 342: "(echo start; sleep 1; echo end) | curl --upload-file . http://mywebsite -vv"
! 343:
! 344: ... causes a hang when it shouldn't.
! 345:
! 346: See https://github.com/curl/curl/issues/2051
! 347:
! 348: 4.5 Improve --data-urlencode space encoding
! 349:
! 350: ASCII space characters in --data-urlencode are currently encoded as %20
! 351: rather than +, which RFC 1866 says should be used.
! 352:
! 353: See https://github.com/curl/curl/issues/3229
! 354:
! 355: 5. Build and portability issues
! 356:
! 357: 5.2 curl-config --libs contains private details
! 358:
! 359: "curl-config --libs" will include details set in LDFLAGS when configure is
! 360: run that might be needed only for building libcurl. Further, curl-config
! 361: --cflags suffers from the same effects with CFLAGS/CPPFLAGS.
! 362:
! 363: 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
! 364:
! 365: See https://github.com/curl/curl/issues/2905
! 366:
! 367: 5.4 Cannot compile against a static build of OpenLDAP
! 368:
! 369: See https://github.com/curl/curl/issues/2367
! 370:
! 371: 5.5 can't handle Unicode arguments in Windows
! 372:
! 373: If a URL or filename can't be encoded using the user's current codepage then
! 374: it can only be encoded properly in the Unicode character set. Windows uses
! 375: UTF-16 encoding for Unicode and stores it in wide characters, however curl
! 376: and libcurl are not equipped for that at the moment. And, except for Cygwin,
! 377: Windows can't use UTF-8 as a locale.
! 378:
! 379: https://curl.haxx.se/bug/?i=345
! 380: https://curl.haxx.se/bug/?i=731
! 381:
! 382: 5.6 cmake support gaps
! 383:
! 384: The cmake build setup lacks several features that the autoconf build
! 385: offers. This includes:
! 386:
! 387: - use of correct soname for the shared library build
! 388:
! 389: - support for several TLS backends are missing
! 390:
! 391: - the unit tests cause link failures in regular non-static builds
! 392:
! 393: - no nghttp2 check
! 394:
! 395: - unusable tool_hugehelp.c with MinGW, see
! 396: https://github.com/curl/curl/issues/3125
! 397:
! 398: 5.7 Visual Studio project gaps
! 399:
! 400: The Visual Studio projects lack some features that the autoconf and nmake
! 401: builds offer, such as the following:
! 402:
! 403: - support for zlib and nghttp2
! 404: - use of static runtime libraries
! 405: - add the test suite components
! 406:
! 407: In addition to this the following could be implemented:
! 408:
! 409: - support for other development IDEs
! 410: - add PATH environment variables for third-party DLLs
! 411:
! 412: 5.8 configure finding libs in wrong directory
! 413:
! 414: When the configure script checks for third-party libraries, it adds those
! 415: directories to the LDFLAGS variable and then tries linking to see if it
! 416: works. When successful, the found directory is kept in the LDFLAGS variable
! 417: when the script continues to execute and do more tests and possibly check for
! 418: more libraries.
! 419:
! 420: This can make subsequent checks for libraries wrongly detect another
! 421: installation in a directory that was previously added to LDFLAGS by another
! 422: library check!
! 423:
! 424: A possibly better way to do these checks would be to keep the pristine LDFLAGS
! 425: even after successful checks and instead add those verified paths to a
! 426: separate variable that only after all library checks have been performed gets
! 427: appended to LDFLAGS.
! 428:
! 429: 5.9 Utilize Requires.private directives in libcurl.pc
! 430:
! 431: https://github.com/curl/curl/issues/864
! 432:
! 433: 5.10 IDN tests failing on Windows / MSYS2
! 434:
! 435: It seems like MSYS2 does some UTF-8-to-something-else conversion for Windows
! 436: compatibility.
! 437:
! 438: https://github.com/curl/curl/issues/3747
! 439:
! 440: 5.11 configure --with-gssapi with Heimdal is ignored on macOS
! 441:
! 442: ... unless you also pass --with-gssapi-libs
! 443:
! 444: https://github.com/curl/curl/issues/3841
! 445:
! 446: 6. Authentication
! 447:
! 448: 6.1 NTLM authentication and unicode
! 449:
! 450: NTLM authentication involving unicode user name or password only works
! 451: properly if built with UNICODE defined together with the WinSSL/Schannel
! 452: backend. The original problem was mentioned in:
! 453: https://curl.haxx.se/mail/lib-2009-10/0024.html
! 454: https://curl.haxx.se/bug/view.cgi?id=896
! 455:
! 456: The WinSSL/Schannel version verified to work as mentioned in
! 457: https://curl.haxx.se/mail/lib-2012-07/0073.html
! 458:
! 459: 6.2 MIT Kerberos for Windows build
! 460:
! 461: libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
! 462: library header files exporting symbols/macros that should be kept private to
! 463: the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/
! 464:
! 465: 6.3 NTLM in system context uses wrong name
! 466:
! 467: NTLM authentication using SSPI (on Windows) when (lib)curl is running in
! 468: "system context" will make it use wrong(?) user name - at least when compared
! 469: to what winhttp does. See https://curl.haxx.se/bug/view.cgi?id=535
! 470:
! 471: 6.4 Negotiate and Kerberos V5 need a fake user name
! 472:
! 473: In order to get Negotiate (SPNEGO) authentication to work in HTTP or Kerberos
! 474: V5 in the e-mail protocols, you need to provide a (fake) user name (this
! 475: concerns both curl and the lib) because the code wrongly only considers
! 476: authentication if there's a user name provided by setting
! 477: conn->bits.user_passwd in url.c https://curl.haxx.se/bug/view.cgi?id=440 How?
! 478: https://curl.haxx.se/mail/lib-2004-08/0182.html A possible solution is to
! 479: either modify this variable to be set or introduce a variable such as
! 480: new conn->bits.want_authentication which is set when any of the authentication
! 481: options are set.
! 482:
! 483: 6.5 NTLM doesn't support password with § character
! 484:
! 485: https://github.com/curl/curl/issues/2120
! 486:
! 487: 6.6 libcurl can fail to try alternatives with --proxy-any
! 488:
! 489: When connecting via a proxy using --proxy-any, a failure to establish an
! 490: authentication will cause libcurl to abort trying other options if the
! 491: failed method has a higher preference than the alternatives. As an example,
! 492: --proxy-any against a proxy which advertise Negotiate and NTLM, but which
! 493: fails to set up Kerberos authentication won't proceed to try authentication
! 494: using NTLM.
! 495:
! 496: https://github.com/curl/curl/issues/876
! 497:
! 498: 6.7 Don't clear digest for single realm
! 499:
! 500: https://github.com/curl/curl/issues/3267
! 501:
! 502: 7. FTP
! 503:
! 504: 7.1 FTP without or slow 220 response
! 505:
! 506: If a connection is made to a FTP server but the server then just never sends
! 507: the 220 response or otherwise is dead slow, libcurl will not acknowledge the
! 508: connection timeout during that phase but only the "real" timeout - which may
! 509: surprise users as it is probably considered to be the connect phase to most
! 510: people. Brought up (and is being misunderstood) in:
! 511: https://curl.haxx.se/bug/view.cgi?id=856
! 512:
! 513: 7.2 FTP with CONNECT and slow server
! 514:
! 515: When doing FTP over a socks proxy or CONNECT through HTTP proxy and the multi
! 516: interface is used, libcurl will fail if the (passive) TCP connection for the
! 517: data transfer isn't more or less instant as the code does not properly wait
! 518: for the connect to be confirmed. See test case 564 for a first shot at a test
! 519: case.
! 520:
! 521: 7.3 FTP with NOBODY and FAILONERROR
! 522:
! 523: It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR
! 524: with FTP to detect if a file exists or not, but it is not working:
! 525: https://curl.haxx.se/mail/lib-2008-07/0295.html
! 526:
! 527: 7.4 FTP with ACCT
! 528:
! 529: When doing an operation over FTP that requires the ACCT command (but not when
! 530: logging in), the operation will fail since libcurl doesn't detect this and
! 531: thus fails to issue the correct command:
! 532: https://curl.haxx.se/bug/view.cgi?id=635
! 533:
! 534: 7.5 ASCII FTP
! 535:
! 536: FTP ASCII transfers do not follow RFC959. They don't convert the data
! 537: accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
! 538: clearly describes how this should be done:
! 539:
! 540: The sender converts the data from an internal character representation to
! 541: the standard 8-bit NVT-ASCII representation (see the Telnet
! 542: specification). The receiver will convert the data from the standard
! 543: form to his own internal form.
! 544:
! 545: Since 7.15.4 at least line endings are converted.
! 546:
! 547: 7.6 FTP with NULs in URL parts
! 548:
! 549: FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
! 550: <password>, and <fpath> components, encoded as "%00". The problem is that
! 551: curl_unescape does not detect this, but instead returns a shortened C string.
! 552: From a strict FTP protocol standpoint, NUL is a valid character within RFC
! 553: 959 <string>, so the way to handle this correctly in curl would be to use a
! 554: data structure other than a plain C string, one that can handle embedded NUL
! 555: characters. From a practical standpoint, most FTP servers would not
! 556: meaningfully support NUL characters within RFC 959 <string>, anyway (e.g.,
! 557: Unix pathnames may not contain NUL).
! 558:
! 559: 7.7 FTP and empty path parts in the URL
! 560:
! 561: libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that
! 562: such parts should be sent to the server as 'CWD ' (without an argument). The
! 563: only exception to this rule, is that we knowingly break this if the empty
! 564: part is first in the path, as then we use the double slashes to indicate that
! 565: the user wants to reach the root dir (this exception SHALL remain even when
! 566: this bug is fixed).
! 567:
! 568: 7.8 Premature transfer end but healthy control channel
! 569:
! 570: When 'multi_done' is called before the transfer has been completed the normal
! 571: way, it is considered a "premature" transfer end. In this situation, libcurl
! 572: closes the connection assuming it doesn't know the state of the connection so
! 573: it can't be reused for subsequent requests.
! 574:
! 575: With FTP however, this isn't necessarily true but there are a bunch of
! 576: situations (listed in the ftp_done code) where it *could* keep the connection
! 577: alive even in this situation - but the current code doesn't. Fixing this would
! 578: allow libcurl to reuse FTP connections better.
! 579:
! 580: 7.9 Passive transfer tries only one IP address
! 581:
! 582: When doing FTP operations through a proxy at localhost, the reported spotted
! 583: that curl only tried to connect once to the proxy, while it had multiple
! 584: addresses and a failed connect on one address should make it try the next.
! 585:
! 586: After switching to passive mode (EPSV), curl should try all IP addresses for
! 587: "localhost". Currently it tries ::1, but it should also try 127.0.0.1.
! 588:
! 589: See https://github.com/curl/curl/issues/1508
! 590:
! 591: 7.10 FTPS needs session reuse
! 592:
! 593: When the control connection is reused for a subsequent transfer, some FTPS
! 594: servers complain about "missing session reuse" for the data channel for the
! 595: second transfer.
! 596:
! 597: https://github.com/curl/curl/issues/4654
! 598:
! 599: 8. TELNET
! 600:
! 601: 8.1 TELNET and time limitations don't work
! 602:
! 603: When using telnet, the time limitation options don't work.
! 604: https://curl.haxx.se/bug/view.cgi?id=846
! 605:
! 606: 8.2 Microsoft telnet server
! 607:
! 608: There seems to be a problem when connecting to the Microsoft telnet server.
! 609: https://curl.haxx.se/bug/view.cgi?id=649
! 610:
! 611:
! 612: 9. SFTP and SCP
! 613:
! 614: 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct
! 615:
! 616: When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP server
! 617: using the multi interface, the commands are not being sent correctly and
! 618: instead the connection is "cancelled" (the operation is considered done)
! 619: prematurely. There is a half-baked (busy-looping) patch provided in the bug
! 620: report but it cannot be accepted as-is. See
! 621: https://curl.haxx.se/bug/view.cgi?id=748
! 622:
! 623:
! 624: 10. SOCKS
! 625:
! 626: 10.3 FTPS over SOCKS
! 627:
! 628: libcurl doesn't support FTPS over a SOCKS proxy.
! 629:
! 630: 10.4 active FTP over a SOCKS
! 631:
! 632: libcurl doesn't support active FTP over a SOCKS proxy
! 633:
! 634:
! 635: 11. Internals
! 636:
! 637: 11.1 Curl leaks .onion hostnames in DNS
! 638:
! 639: Curl sends DNS requests for hostnames with a .onion TLD. This leaks
! 640: information about what the user is attempting to access, and violates this
! 641: requirement of RFC7686: https://tools.ietf.org/html/rfc7686
! 642:
! 643: Issue: https://github.com/curl/curl/issues/543
! 644:
! 645: 11.2 error buffer not set if connection to multiple addresses fails
! 646:
! 647: If you ask libcurl to resolve a hostname like example.com to IPv6 addresses
! 648: only. But you only have IPv4 connectivity. libcurl will correctly fail with
! 649: CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER
! 650: remains empty. Issue: https://github.com/curl/curl/issues/544
! 651:
! 652: 11.3 c-ares deviates from stock resolver on http://1346569778
! 653:
! 654: When using the socket resolvers, that URL becomes:
! 655:
! 656: * Rebuilt URL to: http://1346569778/
! 657: * Trying 80.67.6.50...
! 658:
! 659: but with c-ares it instead says "Could not resolve: 1346569778 (Domain name
! 660: not found)"
! 661:
! 662: See https://github.com/curl/curl/issues/893
! 663:
! 664: 11.4 HTTP test server 'connection-monitor' problems
! 665:
! 666: The 'connection-monitor' feature of the sws HTTP test server doesn't work
! 667: properly if some tests are run in unexpected order. Like 1509 and then 1525.
! 668:
! 669: See https://github.com/curl/curl/issues/868
! 670:
! 671: 11.5 Connection information when using TCP Fast Open
! 672:
! 673: CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is
! 674: enabled.
! 675:
! 676: See https://github.com/curl/curl/issues/1332 and
! 677: https://github.com/curl/curl/issues/4296
! 678:
! 679: 11.6 slow connect to localhost on Windows
! 680:
! 681: When connecting to "localhost" on Windows, curl will resolve the name for
! 682: both ipv4 and ipv6 and try to connect to both happy eyeballs-style. Something
! 683: in there does however make it take 200 milliseconds to succeed - which is the
! 684: HAPPY_EYEBALLS_TIMEOUT define exactly. Lowering that define speeds up the
! 685: connection, suggesting a problem in the HE handling.
! 686:
! 687: If we can *know* that we're talking to a local host, we should lower the
! 688: happy eyeballs delay timeout for IPv6 (related: hardcode the "localhost"
! 689: addresses, mentioned in TODO). Possibly we should reduce that delay for all.
! 690:
! 691: https://github.com/curl/curl/issues/2281
! 692:
! 693: 11.7 signal-based resolver timeouts
! 694:
! 695: libcurl built without an asynchronous resolver library uses alarm() to time
! 696: out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
! 697: signal handler back into the library with a sigsetjmp, which effectively
! 698: causes libcurl to continue running within the signal handler. This is
! 699: non-portable and could cause problems on some platforms. A discussion on the
! 700: problem is available at https://curl.haxx.se/mail/lib-2008-09/0197.html
! 701:
! 702: Also, alarm() provides timeout resolution only to the nearest second. alarm
! 703: ought to be replaced by setitimer on systems that support it.
! 704:
! 705: 11.8 DoH leaks memory after followlocation
! 706:
! 707: https://github.com/curl/curl/issues/4592
! 708:
! 709: 11.9 DoH doesn't inherit all transfer options
! 710:
! 711: https://github.com/curl/curl/issues/4578
! 712:
! 713: 11.10 Blocking socket operations in non-blocking API
! 714:
! 715: The list of blocking socket operations is in TODO section "More non-blocking".
! 716:
! 717: 12. LDAP and OpenLDAP
! 718:
! 719: 12.1 OpenLDAP hangs after returning results
! 720:
! 721: By configuration defaults, openldap automatically chase referrals on
! 722: secondary socket descriptors. The OpenLDAP backend is asynchronous and thus
! 723: should monitor all socket descriptors involved. Currently, these secondary
! 724: descriptors are not monitored, causing openldap library to never receive
! 725: data from them.
! 726:
! 727: As a temporary workaround, disable referrals chasing by configuration.
! 728:
! 729: The fix is not easy: proper automatic referrals chasing requires a
! 730: synchronous bind callback and monitoring an arbitrary number of socket
! 731: descriptors for a single easy handle (currently limited to 5).
! 732:
! 733: Generic LDAP is synchronous: OK.
! 734:
! 735: See https://github.com/curl/curl/issues/622 and
! 736: https://curl.haxx.se/mail/lib-2016-01/0101.html
! 737:
! 738: 12.2 LDAP on Windows does authentication wrong?
! 739:
! 740: https://github.com/curl/curl/issues/3116
! 741:
! 742: 12.3 LDAP on Windows doesn't work
! 743:
! 744: A simple curl command line getting "ldap://ldap.forumsys.com" returns an
! 745: error that says "no memory" !
! 746:
! 747: https://github.com/curl/curl/issues/4261
! 748:
! 749: 13. TCP/IP
! 750:
! 751: 13.1 --interface for ipv6 binds to unusable IP address
! 752:
! 753: Since IPv6 provides a lot of addresses with different scope, binding to an
! 754: IPv6 address needs to take the proper care so that it doesn't bind to a
! 755: locally scoped address as that is bound to fail.
! 756:
! 757: https://github.com/curl/curl/issues/686
! 758:
! 759: 14. DICT
! 760:
! 761: 14.1 DICT responses show the underlying protocol
! 762:
! 763: When getting a DICT response, the protocol parts of DICT aren't stripped off
! 764: from the output.
! 765:
! 766: https://github.com/curl/curl/issues/1809
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>