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