Annotation of embedaddon/curl/docs/KNOWN_BUGS, revision 1.1.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>