KNOWN_BUGS 44 KB

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