                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Known Bugs

These are problems and bugs known to exist at the time of this release. Feel
free to join in and help us correct one or more of these. Also be sure to
check the changelog of the current development status, as one or more of these
problems may have been fixed or changed somewhat since this was written.

 1. HTTP

 2. TLS
 2.1 IMAPS connection fails with Rustls error
 2.2 Access violation sending client cert with Schannel
 2.5 Client cert handling with Issuer DN differs between backends
 2.7 Client cert (MTLS) issues with Schannel
 2.11 Schannel TLS 1.2 handshake bug in old Windows versions
 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel
 2.14 mbedTLS and CURLE_AGAIN handling

 3. Email protocols
 3.1 IMAP SEARCH ALL truncated response
 3.2 No disconnect command
 3.4 AUTH PLAIN for SMTP is not working on all servers
 3.5 APOP authentication fails on POP3
 3.6 POP3 issue when reading small chunks

 4. Command line
 4.1 -T /dev/stdin may upload with an incorrect content length
 4.2 -T - always uploads chunked

 5. Build and portability issues
 5.1 OS400 port requires deprecated IBM library
 5.2 curl-config --libs contains private details
 5.3 LDFLAGS passed too late making libs linked incorrectly
 5.6 Cygwin: make install installs curl-config.1 twice
 5.12 flaky CI builds
 5.13 long paths are not fully supported on Windows
 5.15 Unicode on Windows

 6. Authentication
 6.1 Digest auth-int for PUT/POST
 6.2 MIT Kerberos for Windows build
 6.3 NTLM in system context uses wrong name
 6.5 NTLM does not support password with Unicode 'SECTION SIGN' character
 6.6 libcurl can fail to try alternatives with --proxy-any
 6.7 Do not clear digest for single realm
 6.9 SHA-256 digest not supported in Windows SSPI builds
 6.10 curl never completes Negotiate over HTTP
 6.11 Negotiate on Windows fails
 6.13 Negotiate against Hadoop HDFS

 7. FTP
 7.4 FTP with ACCT
 7.12 FTPS directory listing hangs on Windows with Schannel

 9. SFTP and SCP
 9.1 SFTP does not do CURLOPT_POSTQUOTE correct
 9.3 Remote recursive folder creation with SFTP
 9.4 libssh blocking and infinite loop problem
 9.5 Cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!"

 10. Connection
 10.1 --interface with link-scoped IPv6 address
 10.2 Does not acknowledge getaddrinfo sorting policy
 10.3 SOCKS-SSPI discards the security context

 11. Internals
 11.1 gssapi library name + version is missing in curl_version_info()
 11.2 error buffer not set if connection to multiple addresses fails
 11.4 HTTP test server 'connection-monitor' problems
 11.5 Connection information when using TCP Fast Open
 11.6 test cases sometimes timeout
 11.7 CURLOPT_CONNECT_TO does not work for HTTPS proxy
 11.8 WinIDN test failures
 11.9 setting a disabled option should return CURLE_NOT_BUILT_IN

 12. LDAP
 12.1 OpenLDAP hangs after returning results
 12.2 LDAP on Windows does authentication wrong?
 12.3 LDAP on Windows does not work
 12.4 LDAPS requests to ActiveDirectory server hang

 13. TCP/IP
 13.1 telnet code does not handle partial writes properly
 13.2 Trying local ports fails on Windows

 15. CMake
 15.1 cmake outputs: no version information available
 15.6 uses -lpthread instead of Threads::Threads
 15.7 generated .pc file contains strange entries
 15.13 CMake build with MIT Kerberos does not work

 16. aws-sigv4
 16.2 aws-sigv4 does not handle multipart/form-data correctly

 17. HTTP/2
 17.1 HTTP/2 prior knowledge over proxy
 17.2 HTTP/2 frames while in the connection pool kill reuse
 17.3 ENHANCE_YOUR_CALM causes infinite retries
 17.4 HTTP/2 + TLS spends a lot of time in recv

 18. HTTP/3
 18.1 connection migration does not work
 18.2 quiche: QUIC connection is draining
 18.3 OpenSSL-QUIC problems on google.com

 19. RTSP
 19.1 Some methods do not support response bodies

==============================================================================

1. HTTP

2. TLS

2.1 IMAPS connection fails with Rustls error

 https://github.com/curl/curl/issues/10457

2.2 Access violation sending client cert with Schannel

 When using Schannel to do client certs, curl sets PKCS12_NO_PERSIST_KEY to
 avoid leaking the private key into the filesystem. Unfortunately that flag
 instead seems to trigger a crash.

 See https://github.com/curl/curl/issues/17626

2.5 Client cert handling with Issuer DN differs between backends

 When the specified client certificate does not match any of the
 server-specified DNs, the OpenSSL and GnuTLS backends behave differently.
 The github discussion may contain a solution.

 See https://github.com/curl/curl/issues/1411

2.7 Client cert (MTLS) issues with Schannel

 See https://github.com/curl/curl/issues/3145

2.11 Schannel TLS 1.2 handshake bug in old Windows versions

 In old versions of Windows such as 7 and 8.1 the Schannel TLS 1.2 handshake
 implementation likely has a bug that can rarely cause the key exchange to
 fail, resulting in error SEC_E_BUFFER_TOO_SMALL or SEC_E_MESSAGE_ALTERED.

 https://github.com/curl/curl/issues/5488

2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel

 https://github.com/curl/curl/issues/8741

2.14 mbedTLS and CURLE_AGAIN handling

 https://github.com/curl/curl/issues/15801

3. Email protocols

3.1 IMAP SEARCH ALL truncated response

 IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
 code reveals that pingpong.c contains some truncation code, at line 408, when
 it deems the server response to be too large truncating it to 40 characters"
 https://curl.se/bug/view.cgi?id=1366

3.2 No disconnect command

 The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
 SMTP if a failure occurs during the authentication phase of a connection.

3.4 AUTH PLAIN for SMTP is not working on all servers

 Specifying "--login-options AUTH=PLAIN" on the command line does not seem to
 work correctly.

 See https://github.com/curl/curl/issues/4080

3.5 APOP authentication fails on POP3

 See https://github.com/curl/curl/issues/10073

3.6 POP3 issue when reading small chunks

 CURL_DBG_SOCK_RMAX=4 ./runtests.pl -v 982

 See https://github.com/curl/curl/issues/12063

4. Command line

4.1 -T /dev/stdin may upload with an incorrect content length

 -T stats the path to figure out its size in bytes to use it as Content-Length
 if it is a regular file.

 The problem with that is that, on BSDs and some other UNIXes (not Linux),
 open(path) may not give you a file descriptor with a 0 offset from the start
 of the file.

 See https://github.com/curl/curl/issues/12177

4.2 -T - always uploads chunked

 When the `<` shell operator is used. curl should realise that stdin is a
 regular file in this case, and that it can do a non-chunked upload, like it
 would do if you used -T file.

 See https://github.com/curl/curl/issues/12171

5. Build and portability issues

5.1 OS400 port requires deprecated IBM library

 curl for OS400 requires QADRT to build, which provides ASCII wrappers for
 libc/POSIX functions in the ILE, but IBM no longer supports or even offers
 this library to download.

 See https://github.com/curl/curl/issues/5176

5.2 curl-config --libs contains private details

 "curl-config --libs" include details set in LDFLAGS when configure is run
 that might be needed only for building libcurl. Further, curl-config --cflags
 suffers from the same effects with CFLAGS/CPPFLAGS.

5.3 LDFLAGS passed too late making libs linked incorrectly

 Compiling latest curl on HP-UX and linking against a custom OpenSSL (which is
 on the default loader/linker path), fails because the generated Makefile has
 LDFLAGS passed on after LIBS.

 See https://github.com/curl/curl/issues/14893

5.6 Cygwin: make install installs curl-config.1 twice

 https://github.com/curl/curl/issues/8839

5.12 flaky CI builds

 We run many CI builds for each commit and PR on github, and especially a
 number of the Windows builds are flaky. This means that we rarely get all CI
 builds go green and complete without errors. This is unfortunate as it makes
 us sometimes miss actual build problems and it is surprising to newcomers to
 the project who (rightfully) do not expect this.

 See https://github.com/curl/curl/issues/6972

5.13 long paths are not fully supported on Windows

 curl on Windows cannot access long paths (paths longer than 260 characters).
 However, as a workaround, the Windows path prefix \\?\ which disables all
 path interpretation may work to allow curl to access the path. For example:
 \\?\c:\longpath.

 See https://github.com/curl/curl/issues/8361

5.15 Unicode on Windows

 Passing in a Unicode filename with -o:

 https://github.com/curl/curl/issues/11461

 Passing in Unicode character with -d:

 https://github.com/curl/curl/issues/12231

 Windows Unicode builds use homedir in current locale

 The Windows Unicode builds of curl use the current locale, but expect Unicode
 UTF-8 encoded paths for internal use such as open, access and stat. The
 user's home directory is retrieved via curl_getenv in the current locale and
 not as UTF-8 encoded Unicode.

 See https://github.com/curl/curl/pull/7252 and
     https://github.com/curl/curl/pull/7281

 Cannot handle Unicode arguments in non-Unicode builds on Windows

 If a URL or filename cannot be encoded using the user's current codepage then
 it can only be encoded properly in the Unicode character set. Windows uses
 UTF-16 encoding for Unicode and stores it in wide characters, however curl
 and libcurl are not equipped for that at the moment except when built with
 _UNICODE and UNICODE defined. Except for Cygwin, Windows cannot use UTF-8 as
 a locale.

  https://curl.se/bug/?i=345
  https://curl.se/bug/?i=731
  https://curl.se/bug/?i=3747

 NTLM authentication and Unicode

 NTLM authentication involving Unicode username or password only works
 properly if built with UNICODE defined together with the Schannel backend.
 The original problem was mentioned in:
 https://curl.se/mail/lib-2009-10/0024.html
 https://curl.se/bug/view.cgi?id=896

 The Schannel version verified to work as mentioned in
 https://curl.se/mail/lib-2012-07/0073.html

6. Authentication

6.1 Digest auth-int for PUT/POST

 We do not support auth-int for Digest using PUT or POST

6.2 MIT Kerberos for Windows build

 libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
 library header files exporting symbols/macros that should be kept private to
 the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/

6.3 NTLM in system context uses wrong name

 NTLM authentication using SSPI (on Windows) when (lib)curl is running in
 "system context" makes it use wrong(?) username - at least when compared to
 what winhttp does. See https://curl.se/bug/view.cgi?id=535

6.5 NTLM does not support password with Unicode 'SECTION SIGN' character

 https://en.wikipedia.org/wiki/Section_sign
 https://codepoints.net/U+00A7 SECTION SIGN
 https://github.com/curl/curl/issues/2120

6.6 libcurl can fail to try alternatives with --proxy-any

 When connecting via a proxy using --proxy-any, a failure to establish an
 authentication causes libcurl to abort trying other options if the failed
 method has a higher preference than the alternatives. As an example,
 --proxy-any against a proxy which advertise Negotiate and NTLM, but which
 fails to set up Kerberos authentication does not proceed to try
 authentication using NTLM.

 https://github.com/curl/curl/issues/876

6.7 Do not clear digest for single realm

 https://github.com/curl/curl/issues/3267

6.9 SHA-256 digest not supported in Windows SSPI builds

 Windows builds of curl that have SSPI enabled use the native Windows API calls
 to create authentication strings. The call to InitializeSecurityContext fails
 with SEC_E_QOP_NOT_SUPPORTED which causes curl to fail with CURLE_AUTH_ERROR.

 Microsoft does not document supported digest algorithms and that SEC_E error
 code is not a documented error for InitializeSecurityContext (digest).

 https://github.com/curl/curl/issues/6302

6.10 curl never completes Negotiate over HTTP

 Apparently it is not working correctly...?

 See https://github.com/curl/curl/issues/5235

6.11 Negotiate on Windows fails

 When using --negotiate (or NTLM) with curl on Windows, SSL/TLS handshake
 fails despite having a valid kerberos ticket cached. Works without any issue
 in Unix/Linux.

 https://github.com/curl/curl/issues/5881

6.13 Negotiate authentication against Hadoop HDFS

 https://github.com/curl/curl/issues/8264

7. FTP

7.4 FTP with ACCT

 When doing an operation over FTP that requires the ACCT command (but not when
 logging in), the operation fails since libcurl does not detect this and thus
 fails to issue the correct command: https://curl.se/bug/view.cgi?id=635

7.12 FTPS server compatibility on Windows with Schannel

 FTPS is not widely used with the Schannel TLS backend and so there may be
 more bugs compared to other TLS backends such as OpenSSL. In the past users
 have reported hanging and failed connections. It is likely some changes to
 curl since then fixed the issues. None of the reported issues can be
 reproduced any longer.

 If you encounter an issue connecting to your server via FTPS with the latest
 curl and Schannel then please search for open issues or file a new issue.

9. SFTP and SCP

9.1 SFTP does not do CURLOPT_POSTQUOTE correct

 When libcurl sends CURLOPT_POSTQUOTE commands when connected to an SFTP
 server using the multi interface, the commands are not being sent correctly
 and instead the connection is "cancelled" (the operation is considered done)
 prematurely. There is a half-baked (busy-looping) patch provided in the bug
 report but it cannot be accepted as-is. See
 https://curl.se/bug/view.cgi?id=748

9.3 Remote recursive folder creation with SFTP

 On this servers, the curl fails to create directories on the remote server
 even when the CURLOPT_FTP_CREATE_MISSING_DIRS option is set.

 See https://github.com/curl/curl/issues/5204

9.4 libssh blocking and infinite loop problem

 In the SSH_SFTP_INIT state for libssh, the ssh session working mode is set to
 blocking mode. If the network is suddenly disconnected during sftp
 transmission, curl is stuck, even if curl is configured with a timeout.

 https://github.com/curl/curl/issues/8632

9.5 Cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!"

 Running SCP and SFTP tests on Cygwin makes this warning message appear.

 https://github.com/curl/curl/issues/11244

10. Connection

10.1 --interface with link-scoped IPv6 address

 When you give the `--interface` option telling curl to use a specific
 interface for its outgoing traffic in combination with an IPv6 address in the
 URL that uses a link-local scope, curl might pick the wrong address from the
 named interface and the subsequent transfer fails.

 Example command line:

    curl --interface eth0 'http://[fe80:928d:xxff:fexx:xxxx]/'

 The fact that the given IP address is link-scoped should probably be used as
 input to somehow make curl make a better choice for this.

 https://github.com/curl/curl/issues/14782

10.2 Does not acknowledge getaddrinfo sorting policy

 Even if a user edits /etc/gai.conf to prefer IPv4, curl still prefers and
 tries IPv6 addresses first.

 https://github.com/curl/curl/issues/16718


10.3 SOCKS-SSPI discards the security context

 After a successful SSPI/GSS-API exchange, the function queries and logs the
 authenticated username and reports the supported data-protection level, but
 then immediately deletes the negotiated SSPI security context and frees the
 credentials before returning. The negotiated context is not stored on the
 connection and is therefore never used to protect later SOCKS5 traffic.

11. Internals

11.1 gssapi library name + version is missing in curl_version_info()

 The struct needs to be expanded and code added to store this info.

 See https://github.com/curl/curl/issues/13492

11.2 error buffer not set if connection to multiple addresses fails

 If you ask libcurl to resolve a hostname like example.com to IPv6 addresses
 when you only have IPv4 connectivity. libcurl fails with
 CURLE_COULDNT_CONNECT, but the error buffer set by CURLOPT_ERRORBUFFER
 remains empty. Issue: https://github.com/curl/curl/issues/544

11.4 HTTP test server 'connection-monitor' problems

 The 'connection-monitor' feature of the sws HTTP test server does not work
 properly if some tests are run in unexpected order. Like 1509 and then 1525.

 See https://github.com/curl/curl/issues/868

11.5 Connection information when using TCP Fast Open

 CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is
 enabled.

 See https://github.com/curl/curl/issues/1332 and
 https://github.com/curl/curl/issues/4296

11.6 test cases sometimes timeout

 Occasionally, one of the tests timeouts. Inexplicably.

 See https://github.com/curl/curl/issues/13350

11.7 CURLOPT_CONNECT_TO does not work for HTTPS proxy

 It is unclear if the same option should even cover the proxy connection or if
 if requires a separate option.

 See https://github.com/curl/curl/issues/14481

11.8 WinIDN test failures

 Test 165 disabled when built with WinIDN.

11.9 setting a disabled option should return CURLE_NOT_BUILT_IN

 When curl has been built with specific features or protocols disabled,
 setting such options with curl_easy_setopt() should rather return
 CURLE_NOT_BUILT_IN instead of CURLE_UNKNOWN_OPTION to signal the difference
 to the application

 See https://github.com/curl/curl/issues/15472

12. LDAP

12.1 OpenLDAP hangs after returning results

 By configuration defaults, OpenLDAP automatically chase referrals on
 secondary socket descriptors. The OpenLDAP backend is asynchronous and thus
 should monitor all socket descriptors involved. Currently, these secondary
 descriptors are not monitored, causing OpenLDAP library to never receive
 data from them.

 As a temporary workaround, disable referrals chasing by configuration.

 The fix is not easy: proper automatic referrals chasing requires a
 synchronous bind callback and monitoring an arbitrary number of socket
 descriptors for a single easy handle (currently limited to 5).

 Generic LDAP is synchronous: OK.

 See https://github.com/curl/curl/issues/622 and
     https://curl.se/mail/lib-2016-01/0101.html

12.2 LDAP on Windows does authentication wrong?

 https://github.com/curl/curl/issues/3116

12.3 LDAP on Windows does not work

 A simple curl command line getting "ldap://ldap.forumsys.com" returns an
 error that says "no memory" !

 https://github.com/curl/curl/issues/4261

12.4 LDAPS requests to ActiveDirectory server hang

 https://github.com/curl/curl/issues/9580

13. TCP/IP

13.1 telnet code does not handle partial writes properly

 It probably does not happen too easily because of how slow and infrequent
 sends are normally performed.

13.2 Trying local ports fails on Windows

 This makes '--local-port [range]' to not work since curl cannot properly
 detect if a port is already in use, so it tries the first port, uses that and
 then subsequently fails anyway if that was actually in use.

 https://github.com/curl/curl/issues/8112

15. CMake

15.1 cmake outputs: no version information available

 Something in the SONAME generation seems to be wrong in the cmake build.

 https://github.com/curl/curl/issues/11158

15.6 uses -lpthread instead of Threads::Threads

 See https://github.com/curl/curl/issues/6166

15.7 generated .pc file contains strange entries

 The Libs.private field of the generated .pc file contains -lgcc -lgcc_s -lc
 -lgcc -lgcc_s

 See https://github.com/curl/curl/issues/6167

15.13 CMake build with MIT Kerberos does not work

 Minimum CMake version was bumped in curl 7.71.0 (#5358) Since CMake 3.2
 try_compile started respecting the CMAKE_EXE_FLAGS. The code dealing with
 MIT Kerberos detection sets few variables to potentially weird mix of space,
 and ;-separated flags. It had to blow up at some point. All the CMake checks
 that involve compilation are doomed from that point, the configured tree
 cannot be built.

 https://github.com/curl/curl/issues/6904

16. aws-sigv4

16.2 aws-sigv4 does not handle multipart/form-data correctly

 https://github.com/curl/curl/issues/13351

17. HTTP/2

17.1 HTTP/2 prior knowledge over proxy

 https://github.com/curl/curl/issues/12641

17.2 HTTP/2 frames while in the connection pool kill reuse

 If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
 curl while the connection is held in curl's connection pool, the socket is
 found readable when considered for reuse and that makes curl think it is dead
 and then it is closed and a new connection gets created instead.

 This is *best* fixed by adding monitoring to connections while they are kept
 in the pool so that pings can be responded to appropriately.

17.3 ENHANCE_YOUR_CALM causes infinite retries

 Infinite retries with 2 parallel requests on one connection receiving GOAWAY
 with ENHANCE_YOUR_CALM error code.

 See https://github.com/curl/curl/issues/5119

17.4 HTTP/2 + TLS spends a lot of time in recv

 It has been observed that by making the speed limit less accurate we could
 improve this performance. (by reverting
 https://github.com/curl/curl/commit/db5c9f4f9e0779b49624752b135281a0717b277b)
 Can we find a golden middle ground?

 See https://curl.se/mail/lib-2024-05/0026.html and
 https://github.com/curl/curl/issues/13416

18. HTTP/3

18.1 connection migration does not work

 https://github.com/curl/curl/issues/7695

18.2 quiche: QUIC connection is draining

 The transfer ends with error "QUIC connection is draining".

 https://github.com/curl/curl/issues/12037

18.3 OpenSSL-QUIC problems on google.com

 With some specific Google servers, and seemingly timing dependent, the
 OpenSSL-QUIC backend seems to not actually send off the HTTP/3 request which
 makes the QUIC connection just sit idle until killed by the server. curl or
 OpenSSL bug?

 https://github.com/curl/curl/issues/18336

19. RTSP

19.1 Some methods do not support response bodies

 The RTSP implementation is written to assume that a number of RTSP methods
 always get responses without bodies, even though there seems to be no
 indication in the RFC that this is always the case.

 https://github.com/curl/curl/issues/12414
