KNOWN_BUGS 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843
  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.5 Expect-100 meets 417
  13. 2. TLS
  14. 2.3 Unable to use PKCS12 certificate with Secure Transport
  15. 2.4 Secure Transport will not import PKCS#12 client certificates without a password
  16. 2.5 Client cert handling with Issuer DN differs between backends
  17. 2.7 Client cert (MTLS) issues with Schannel
  18. 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
  19. 2.9 TLS session cache does not work with TFO
  20. 2.11 Schannel TLS 1.2 handshake bug in old Windows versions
  21. 2.12 FTPS with Schannel times out file list operation
  22. 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel
  23. 2.15 Renegotiate from server may cause hang for OpenSSL backend
  24. 3. Email protocols
  25. 3.1 IMAP SEARCH ALL truncated response
  26. 3.2 No disconnect command
  27. 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses
  28. 3.4 AUTH PLAIN for SMTP is not working on all servers
  29. 4. Command line
  30. 4.1 -J and -O with %-encoded file names
  31. 4.2 -J with -C - fails
  32. 4.3 --retry and transfer timeouts
  33. 5. Build and portability issues
  34. 5.1 OS400 port requires deprecated IBM library
  35. 5.2 curl-config --libs contains private details
  36. 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
  37. 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows
  38. 5.6 make distclean loops forever
  39. 5.8 configure finding libs in wrong directory
  40. 5.9 Utilize Requires.private directives in libcurl.pc
  41. 5.10 curl hangs on SMB upload over stdin
  42. 5.11 configure --with-gssapi with Heimdal is ignored on macOS
  43. 5.12 flaky Windows CI builds
  44. 5.13 long paths are not fully supported on Windows
  45. 5.14 Windows Unicode builds use homedir in current locale
  46. 6. Authentication
  47. 6.1 NTLM authentication and unicode
  48. 6.2 MIT Kerberos for Windows build
  49. 6.3 NTLM in system context uses wrong name
  50. 6.4 Negotiate and Kerberos V5 need a fake user name
  51. 6.5 NTLM does not support password with § character
  52. 6.6 libcurl can fail to try alternatives with --proxy-any
  53. 6.7 Do not clear digest for single realm
  54. 6.9 SHA-256 digest not supported in Windows SSPI builds
  55. 6.10 curl never completes Negotiate over HTTP
  56. 6.11 Negotiate on Windows fails
  57. 6.12 cannot use Secure Transport with Crypto Token Kit
  58. 6.13 Negotiate against Hadoop HDFS
  59. 7. FTP
  60. 7.3 FTP with NOBODY and FAILONERROR
  61. 7.4 FTP with ACCT
  62. 7.5 ASCII FTP
  63. 7.9 Passive transfer tries only one IP address
  64. 7.10 FTPS needs session reuse
  65. 7.11 FTPS upload data loss with TLS 1.3
  66. 7.12 FTPS directory listing hangs on Windows with Schannel
  67. 9. SFTP and SCP
  68. 9.1 SFTP does not do CURLOPT_POSTQUOTE correct
  69. 9.2 wolfssh: publickey auth does not work
  70. 9.3 Remote recursive folder creation with SFTP
  71. 9.4 libssh blocking and infinite loop problem
  72. 10. SOCKS
  73. 10.3 FTPS over SOCKS
  74. 11. Internals
  75. 11.1 Curl leaks .onion hostnames in DNS
  76. 11.2 error buffer not set if connection to multiple addresses fails
  77. 11.4 HTTP test server 'connection-monitor' problems
  78. 11.5 Connection information when using TCP Fast Open
  79. 11.7 signal-based resolver timeouts
  80. 11.8 DoH leaks memory after followlocation
  81. 11.9 DoH does not inherit all transfer options
  82. 11.10 Blocking socket operations in non-blocking API
  83. 11.11 A shared connection cache is not thread-safe
  84. 11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing
  85. 11.16 libcurl uses renames instead of locking for atomic operations
  86. 12. LDAP
  87. 12.1 OpenLDAP hangs after returning results
  88. 12.2 LDAP on Windows does authentication wrong?
  89. 12.3 LDAP on Windows does not work
  90. 12.4 LDAPS with NSS is slow
  91. 13. TCP/IP
  92. 13.2 Trying local ports fails on Windows
  93. 15. CMake
  94. 15.2 support build with GnuTLS
  95. 15.3 unusable tool_hugehelp.c with MinGW
  96. 15.4 build docs/curl.1
  97. 15.5 build on Linux links libcurl to libdl
  98. 15.6 uses -lpthread instead of Threads::Threads
  99. 15.7 generated .pc file contains strange entries
  100. 15.8 libcurl.pc uses absolute library paths
  101. 15.9 cert paths autodetected when cross-compiling
  102. 15.10 libpsl is not supported
  103. 15.11 ExternalProject_Add does not set CURL_CA_PATH
  104. 15.12 cannot enable LDAPS on Windows
  105. 15.13 CMake build with MIT Kerberos does not work
  106. 16. Applications
  107. 17. HTTP/2
  108. 17.1 Excessive HTTP/2 packets with TCP_NODELAY
  109. 17.2 HTTP/2 frames while in the connection pool kill reuse
  110. 17.3 ENHANCE_YOUR_CALM causes infinite retries
  111. 17.4 Connection failures with parallel HTTP/2
  112. 17.5 HTTP/2 connections through HTTPS proxy frequently stall
  113. 18. HTTP/3
  114. 18.1 If the HTTP/3 server closes connection during upload curl hangs
  115. 18.2 Transfer closed with n bytes remaining to read
  116. 18.4 timeout when reusing an http3 connection
  117. 18.9 connection migration does not work
  118. ==============================================================================
  119. 1. HTTP
  120. 1.5 Expect-100 meets 417
  121. If an upload using Expect: 100-continue receives an HTTP 417 response, it
  122. ought to be automatically resent without the Expect:. A workaround is for
  123. the client application to redo the transfer after disabling Expect:.
  124. https://curl.se/mail/archive-2008-02/0043.html
  125. 2. TLS
  126. 2.3 Unable to use PKCS12 certificate with Secure Transport
  127. See https://github.com/curl/curl/issues/5403
  128. 2.4 Secure Transport will not import PKCS#12 client certificates without a password
  129. libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that
  130. function rejects certificates that do not have a password.
  131. https://github.com/curl/curl/issues/1308
  132. 2.5 Client cert handling with Issuer DN differs between backends
  133. When the specified client certificate does not match any of the
  134. server-specified DNs, the OpenSSL and GnuTLS backends behave differently.
  135. The github discussion may contain a solution.
  136. See https://github.com/curl/curl/issues/1411
  137. 2.7 Client cert (MTLS) issues with Schannel
  138. See https://github.com/curl/curl/issues/3145
  139. 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
  140. This seems to be a limitation in the underlying Schannel API.
  141. https://github.com/curl/curl/issues/3284
  142. 2.9 TLS session cache does not work with TFO
  143. See https://github.com/curl/curl/issues/4301
  144. 2.11 Schannel TLS 1.2 handshake bug in old Windows versions
  145. In old versions of Windows such as 7 and 8.1 the Schannel TLS 1.2 handshake
  146. implementation likely has a bug that can rarely cause the key exchange to
  147. fail, resulting in error SEC_E_BUFFER_TOO_SMALL or SEC_E_MESSAGE_ALTERED.
  148. https://github.com/curl/curl/issues/5488
  149. 2.12 FTPS with Schannel times out file list operation
  150. "Instead of the command completing, it just sits there until the timeout
  151. expires." - the same command line seems to work with other TLS backends and
  152. other operating systems. See https://github.com/curl/curl/issues/5284.
  153. 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel
  154. https://github.com/curl/curl/issues/8741
  155. 2.15 Renegotiate from server may cause hang for OpenSSL backend
  156. A race condition has been observed when, immediately after the initial
  157. handshake, curl has sent an HTTP request to the server and at the same time
  158. the server has sent a TLS hello request (renegotiate) to curl. Both are
  159. waiting for the other to respond. OpenSSL is supposed to send a handshake
  160. response but does not.
  161. https://github.com/curl/curl/issues/6785
  162. https://github.com/openssl/openssl/issues/14722
  163. 3. Email protocols
  164. 3.1 IMAP SEARCH ALL truncated response
  165. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
  166. code reveals that pingpong.c contains some truncation code, at line 408, when
  167. it deems the server response to be too large truncating it to 40 characters"
  168. https://curl.se/bug/view.cgi?id=1366
  169. 3.2 No disconnect command
  170. The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
  171. SMTP if a failure occurs during the authentication phase of a connection.
  172. 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses
  173. You have to tell libcurl not to expect a body, when dealing with one line
  174. response commands. Please see the POP3 examples and test cases which show
  175. this for the NOOP and DELE commands. https://curl.se/bug/?i=740
  176. 3.4 AUTH PLAIN for SMTP is not working on all servers
  177. Specifying "--login-options AUTH=PLAIN" on the command line does not seem to
  178. work correctly.
  179. See https://github.com/curl/curl/issues/4080
  180. 4. Command line
  181. 4.1 -J and -O with %-encoded file names
  182. -J/--remote-header-name does not decode %-encoded file names. RFC6266 details
  183. how it should be done. The can of worm is basically that we have no charset
  184. handling in curl and ascii >=128 is a challenge for us. Not to mention that
  185. decoding also means that we need to check for nastiness that is attempted,
  186. like "../" sequences and the like. Probably everything to the left of any
  187. embedded slashes should be cut off.
  188. https://curl.se/bug/view.cgi?id=1294
  189. -O also does not decode %-encoded names, and while it has even less
  190. information about the charset involved the process is similar to the -J case.
  191. Note that we will not add decoding to -O without the user asking for it with
  192. some other means as well, since -O has always been documented to use the name
  193. exactly as specified in the URL.
  194. 4.2 -J with -C - fails
  195. When using -J (with -O), automatically resumed downloading together with "-C
  196. -" fails. Without -J the same command line works. This happens because the
  197. resume logic is worked out before the target file name (and thus its
  198. pre-transfer size) has been figured out.
  199. https://curl.se/bug/view.cgi?id=1169
  200. 4.3 --retry and transfer timeouts
  201. If using --retry and the transfer timeouts (possibly due to using -m or
  202. -y/-Y) the next attempt does not resume the transfer properly from what was
  203. downloaded in the previous attempt but will truncate and restart at the
  204. original position where it was at before the previous failed attempt. See
  205. https://curl.se/mail/lib-2008-01/0080.html and Mandriva bug report
  206. https://qa.mandriva.com/show_bug.cgi?id=22565
  207. 5. Build and portability issues
  208. 5.1 OS400 port requires deprecated IBM library
  209. curl for OS400 requires QADRT to build, which provides ASCII wrappers for
  210. libc/POSIX functions in the ILE, but IBM no longer supports or even offers
  211. this library to download.
  212. See https://github.com/curl/curl/issues/5176
  213. 5.2 curl-config --libs contains private details
  214. "curl-config --libs" will include details set in LDFLAGS when configure is
  215. run that might be needed only for building libcurl. Further, curl-config
  216. --cflags suffers from the same effects with CFLAGS/CPPFLAGS.
  217. 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
  218. See https://github.com/curl/curl/issues/2905
  219. 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows
  220. If a URL or filename cannot be encoded using the user's current codepage then
  221. it can only be encoded properly in the Unicode character set. Windows uses
  222. UTF-16 encoding for Unicode and stores it in wide characters, however curl
  223. and libcurl are not equipped for that at the moment except when built with
  224. _UNICODE and UNICODE defined. And, except for Cygwin, Windows cannot use UTF-8
  225. as a locale.
  226. https://curl.se/bug/?i=345
  227. https://curl.se/bug/?i=731
  228. https://curl.se/bug/?i=3747
  229. 5.6 make distclean loops forever
  230. Due to an issue (probably) in automake, "make distclean" can end up in a
  231. never-ending loop.
  232. See https://github.com/curl/curl/issues/7716
  233. 5.8 configure finding libs in wrong directory
  234. When the configure script checks for third-party libraries, it adds those
  235. directories to the LDFLAGS variable and then tries linking to see if it
  236. works. When successful, the found directory is kept in the LDFLAGS variable
  237. when the script continues to execute and do more tests and possibly check for
  238. more libraries.
  239. This can make subsequent checks for libraries wrongly detect another
  240. installation in a directory that was previously added to LDFLAGS by another
  241. library check.
  242. A possibly better way to do these checks would be to keep the pristine LDFLAGS
  243. even after successful checks and instead add those verified paths to a
  244. separate variable that only after all library checks have been performed gets
  245. appended to LDFLAGS.
  246. 5.9 Utilize Requires.private directives in libcurl.pc
  247. https://github.com/curl/curl/issues/864
  248. 5.10 curl hangs on SMB upload over stdin
  249. See https://github.com/curl/curl/issues/7896
  250. 5.11 configure --with-gssapi with Heimdal is ignored on macOS
  251. ... unless you also pass --with-gssapi-libs
  252. https://github.com/curl/curl/issues/3841
  253. 5.12 flaky Windows CI builds
  254. We run many CI builds for each commit and PR on github, and especially a
  255. number of the Windows builds are flaky. This means that we rarely get all CI
  256. builds go green and complete without errors. This is unfortunate as it makes
  257. us sometimes miss actual build problems and it is surprising to newcomers to
  258. the project who (rightfully) do not expect this.
  259. See https://github.com/curl/curl/issues/6972
  260. 5.13 long paths are not fully supported on Windows
  261. curl on Windows cannot access long paths (paths longer than 260 characters).
  262. However, as a workaround, the Windows path prefix \\?\ which disables all path
  263. interpretation may work to allow curl to access the path. For example:
  264. \\?\c:\longpath.
  265. See https://github.com/curl/curl/issues/8361
  266. 5.14 Windows Unicode builds use homedir in current locale
  267. The Windows Unicode builds of curl use the current locale, but expect Unicode
  268. UTF-8 encoded paths for internal use such as open, access and stat. The user's
  269. home directory is retrieved via curl_getenv in the current locale and not as
  270. UTF-8 encoded Unicode.
  271. See https://github.com/curl/curl/pull/7252 and
  272. https://github.com/curl/curl/pull/7281
  273. 6. Authentication
  274. 6.1 NTLM authentication and unicode
  275. NTLM authentication involving unicode user name or password only works
  276. properly if built with UNICODE defined together with the Schannel
  277. backend. The original problem was mentioned in:
  278. https://curl.se/mail/lib-2009-10/0024.html
  279. https://curl.se/bug/view.cgi?id=896
  280. The Schannel version verified to work as mentioned in
  281. https://curl.se/mail/lib-2012-07/0073.html
  282. 6.2 MIT Kerberos for Windows build
  283. libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
  284. library header files exporting symbols/macros that should be kept private to
  285. the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/
  286. 6.3 NTLM in system context uses wrong name
  287. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
  288. "system context" will make it use wrong(?) user name - at least when compared
  289. to what winhttp does. See https://curl.se/bug/view.cgi?id=535
  290. 6.4 Negotiate and Kerberos V5 need a fake user name
  291. In order to get Negotiate (SPNEGO) authentication to work in HTTP or Kerberos
  292. V5 in the email protocols, you need to provide a (fake) user name (this
  293. concerns both curl and the lib) because the code wrongly only considers
  294. authentication if there's a user name provided by setting
  295. conn->bits.user_passwd in url.c https://curl.se/bug/view.cgi?id=440 How?
  296. https://curl.se/mail/lib-2004-08/0182.html A possible solution is to
  297. either modify this variable to be set or introduce a variable such as
  298. new conn->bits.want_authentication which is set when any of the authentication
  299. options are set.
  300. 6.5 NTLM does not support password with § character
  301. https://github.com/curl/curl/issues/2120
  302. 6.6 libcurl can fail to try alternatives with --proxy-any
  303. When connecting via a proxy using --proxy-any, a failure to establish an
  304. authentication will cause libcurl to abort trying other options if the
  305. failed method has a higher preference than the alternatives. As an example,
  306. --proxy-any against a proxy which advertise Negotiate and NTLM, but which
  307. fails to set up Kerberos authentication will not proceed to try authentication
  308. using NTLM.
  309. https://github.com/curl/curl/issues/876
  310. 6.7 Do not clear digest for single realm
  311. https://github.com/curl/curl/issues/3267
  312. 6.9 SHA-256 digest not supported in Windows SSPI builds
  313. Windows builds of curl that have SSPI enabled use the native Windows API calls
  314. to create authentication strings. The call to InitializeSecurityContext fails
  315. with SEC_E_QOP_NOT_SUPPORTED which causes curl to fail with CURLE_AUTH_ERROR.
  316. Microsoft does not document supported digest algorithms and that SEC_E error
  317. code is not a documented error for InitializeSecurityContext (digest).
  318. https://github.com/curl/curl/issues/6302
  319. 6.10 curl never completes Negotiate over HTTP
  320. Apparently it is not working correctly...?
  321. See https://github.com/curl/curl/issues/5235
  322. 6.11 Negotiate on Windows fails
  323. When using --negotiate (or NTLM) with curl on Windows, SSL/TLS handshake
  324. fails despite having a valid kerberos ticket cached. Works without any issue
  325. in Unix/Linux.
  326. https://github.com/curl/curl/issues/5881
  327. 6.12 cannot use Secure Transport with Crypto Token Kit
  328. https://github.com/curl/curl/issues/7048
  329. 6.13 Negotiate authentication against Hadoop HDFS
  330. https://github.com/curl/curl/issues/8264
  331. 7. FTP
  332. 7.3 FTP with NOBODY and FAILONERROR
  333. It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR
  334. with FTP to detect if a file exists or not, but it is not working:
  335. https://curl.se/mail/lib-2008-07/0295.html
  336. 7.4 FTP with ACCT
  337. When doing an operation over FTP that requires the ACCT command (but not when
  338. logging in), the operation will fail since libcurl does not detect this and
  339. thus fails to issue the correct command:
  340. https://curl.se/bug/view.cgi?id=635
  341. 7.5 ASCII FTP
  342. FTP ASCII transfers do not follow RFC959. They do not convert the data
  343. accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
  344. clearly describes how this should be done:
  345. The sender converts the data from an internal character representation to
  346. the standard 8-bit NVT-ASCII representation (see the Telnet
  347. specification). The receiver will convert the data from the standard
  348. form to his own internal form.
  349. Since 7.15.4 at least line endings are converted.
  350. 7.9 Passive transfer tries only one IP address
  351. When doing FTP operations through a proxy at localhost, the reported spotted
  352. that curl only tried to connect once to the proxy, while it had multiple
  353. addresses and a failed connect on one address should make it try the next.
  354. After switching to passive mode (EPSV), curl should try all IP addresses for
  355. "localhost". Currently it tries ::1, but it should also try 127.0.0.1.
  356. See https://github.com/curl/curl/issues/1508
  357. 7.10 FTPS needs session reuse
  358. When the control connection is reused for a subsequent transfer, some FTPS
  359. servers complain about "missing session reuse" for the data channel for the
  360. second transfer.
  361. https://github.com/curl/curl/issues/4654
  362. 7.11 FTPS upload data loss with TLS 1.3
  363. During FTPS upload curl does not attempt to read TLS handshake messages sent
  364. after the initial handshake. OpenSSL servers running TLS 1.3 may send such a
  365. message. When curl closes the upload connection if unread data has been
  366. received (such as a TLS handshake message) then the TCP protocol sends an
  367. RST to the server, which may cause the server to discard or truncate the
  368. upload if it has not read all sent data yet, and then return an error to curl
  369. on the control channel connection.
  370. Since 7.78.0 this is mostly fixed. curl will do a single read before closing
  371. TLS connections (which causes the TLS library to read handshake messages),
  372. however there is still possibility of an RST if more messages need to be read
  373. or a message arrives after the read but before close (network race condition).
  374. https://github.com/curl/curl/issues/6149
  375. 7.12 FTPS directory listing hangs on Windows with Schannel
  376. https://github.com/curl/curl/issues/9161
  377. 9. SFTP and SCP
  378. 9.1 SFTP does not do CURLOPT_POSTQUOTE correct
  379. When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP server
  380. using the multi interface, the commands are not being sent correctly and
  381. instead the connection is "cancelled" (the operation is considered done)
  382. prematurely. There is a half-baked (busy-looping) patch provided in the bug
  383. report but it cannot be accepted as-is. See
  384. https://curl.se/bug/view.cgi?id=748
  385. 9.2 wolfssh: publickey auth does not work
  386. When building curl to use the wolfSSH backend for SFTP, the publickey
  387. authentication does not work. This is simply functionality not written for curl
  388. yet, the necessary API for make this work is provided by wolfSSH.
  389. See https://github.com/curl/curl/issues/4820
  390. 9.3 Remote recursive folder creation with SFTP
  391. On this servers, the curl fails to create directories on the remote server
  392. even when the CURLOPT_FTP_CREATE_MISSING_DIRS option is set.
  393. See https://github.com/curl/curl/issues/5204
  394. 9.4 libssh blocking and infinite loop problem
  395. In the SSH_SFTP_INIT state for libssh, the ssh session working mode is set to
  396. blocking mode. If the network is suddenly disconnected during sftp
  397. transmission, curl will be stuck, even if curl is configured with a timeout.
  398. https://github.com/curl/curl/issues/8632
  399. 10. SOCKS
  400. 10.3 FTPS over SOCKS
  401. libcurl does not support FTPS over a SOCKS proxy.
  402. 11. Internals
  403. 11.1 Curl leaks .onion hostnames in DNS
  404. Curl sends DNS requests for hostnames with a .onion TLD. This leaks
  405. information about what the user is attempting to access, and violates this
  406. requirement of RFC7686: https://datatracker.ietf.org/doc/html/rfc7686
  407. Issue: https://github.com/curl/curl/issues/543
  408. 11.2 error buffer not set if connection to multiple addresses fails
  409. If you ask libcurl to resolve a hostname like example.com to IPv6 addresses
  410. only. But you only have IPv4 connectivity. libcurl will correctly fail with
  411. CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER
  412. remains empty. Issue: https://github.com/curl/curl/issues/544
  413. 11.4 HTTP test server 'connection-monitor' problems
  414. The 'connection-monitor' feature of the sws HTTP test server does not work
  415. properly if some tests are run in unexpected order. Like 1509 and then 1525.
  416. See https://github.com/curl/curl/issues/868
  417. 11.5 Connection information when using TCP Fast Open
  418. CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is
  419. enabled.
  420. See https://github.com/curl/curl/issues/1332 and
  421. https://github.com/curl/curl/issues/4296
  422. 11.7 signal-based resolver timeouts
  423. libcurl built without an asynchronous resolver library uses alarm() to time
  424. out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
  425. signal handler back into the library with a sigsetjmp, which effectively
  426. causes libcurl to continue running within the signal handler. This is
  427. non-portable and could cause problems on some platforms. A discussion on the
  428. problem is available at https://curl.se/mail/lib-2008-09/0197.html
  429. Also, alarm() provides timeout resolution only to the nearest second. alarm
  430. ought to be replaced by setitimer on systems that support it.
  431. 11.8 DoH leaks memory after followlocation
  432. https://github.com/curl/curl/issues/4592
  433. 11.9 DoH does not inherit all transfer options
  434. Some options are not inherited because they are not relevant for the DoH SSL
  435. connections, or inheriting the option may result in unexpected behavior. For
  436. example the user's debug function callback is not inherited because it would
  437. be unexpected for internal handles (ie DoH handles) to be passed to that
  438. callback.
  439. If an option is not inherited then it is not possible to set it separately for
  440. DoH without a DoH-specific option. For example: CURLOPT_DOH_SSL_VERIFYHOST,
  441. CURLOPT_DOH_SSL_VERIFYPEER and CURLOPT_DOH_SSL_VERIFYSTATUS.
  442. See https://github.com/curl/curl/issues/6605
  443. 11.10 Blocking socket operations in non-blocking API
  444. The list of blocking socket operations is in TODO section "More non-blocking".
  445. 11.11 A shared connection cache is not thread-safe
  446. The share interface offers CURL_LOCK_DATA_CONNECT to have multiple easy
  447. handle share a connection cache, but due to how connections are used they are
  448. still not thread-safe when used shared.
  449. See https://github.com/curl/curl/issues/4915 and lib1541.c
  450. 11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing
  451. When libcurl creates sockets with socketpair(), those are not "exposed" in
  452. CURLOPT_OPENSOCKETFUNCTION and therefore might surprise and be unknown to
  453. applications that expect and want all sockets known beforehand. One way to
  454. address this issue is to introduce a CURLOPT_OPENSOCKETPAIRFUNCTION callback.
  455. https://github.com/curl/curl/issues/5747
  456. 11.16 libcurl uses renames instead of locking for atomic operations
  457. For saving cookies, alt-svc and hsts files. This is bad when for example the
  458. file is stored in a directory where the application has no write permission
  459. but it has permission for the file.
  460. https://github.com/curl/curl/issues/6882
  461. https://github.com/curl/curl/pull/6884
  462. 12. LDAP
  463. 12.1 OpenLDAP hangs after returning results
  464. By configuration defaults, OpenLDAP automatically chase referrals on
  465. secondary socket descriptors. The OpenLDAP backend is asynchronous and thus
  466. should monitor all socket descriptors involved. Currently, these secondary
  467. descriptors are not monitored, causing OpenLDAP library to never receive
  468. data from them.
  469. As a temporary workaround, disable referrals chasing by configuration.
  470. The fix is not easy: proper automatic referrals chasing requires a
  471. synchronous bind callback and monitoring an arbitrary number of socket
  472. descriptors for a single easy handle (currently limited to 5).
  473. Generic LDAP is synchronous: OK.
  474. See https://github.com/curl/curl/issues/622 and
  475. https://curl.se/mail/lib-2016-01/0101.html
  476. 12.2 LDAP on Windows does authentication wrong?
  477. https://github.com/curl/curl/issues/3116
  478. 12.3 LDAP on Windows does not work
  479. A simple curl command line getting "ldap://ldap.forumsys.com" returns an
  480. error that says "no memory" !
  481. https://github.com/curl/curl/issues/4261
  482. 12.4 LDAPS with NSS is slow
  483. See https://github.com/curl/curl/issues/5874
  484. 13. TCP/IP
  485. 13.2 Trying local ports fails on Windows
  486. This makes '--local-port [range]' to not work since curl can't properly
  487. detect if a port is already in use, so it'll try the first port, use that and
  488. then subsequently fail anyway if that was actually in use.
  489. https://github.com/curl/curl/issues/8112
  490. 15. CMake
  491. 15.2 support build with GnuTLS
  492. 15.3 unusable tool_hugehelp.c with MinGW
  493. see https://github.com/curl/curl/issues/3125
  494. 15.4 build docs/curl.1
  495. The cmake build does not create the docs/curl.1 file and therefore must rely on
  496. it being there already. This makes the --manual option not work and test
  497. cases like 1139 cannot function.
  498. 15.5 build on Linux links libcurl to libdl
  499. ... which it should not need to!
  500. See https://github.com/curl/curl/issues/6165
  501. 15.6 uses -lpthread instead of Threads::Threads
  502. See https://github.com/curl/curl/issues/6166
  503. 15.7 generated .pc file contains strange entries
  504. The Libs.private field of the generated .pc file contains -lgcc -lgcc_s -lc
  505. -lgcc -lgcc_s
  506. See https://github.com/curl/curl/issues/6167
  507. 15.8 libcurl.pc uses absolute library paths
  508. The libcurl.pc file generated by cmake contains things like Libs.private:
  509. /usr/lib64/libssl.so /usr/lib64/libcrypto.so /usr/lib64/libz.so. The
  510. autotools equivalent would say Libs.private: -lssl -lcrypto -lz
  511. See https://github.com/curl/curl/issues/6169
  512. 15.9 cert paths autodetected when cross-compiling
  513. The autotools build disables the ca_path/ca_bundle detection when
  514. cross-compiling. The cmake build keeps doing the detection.
  515. See https://github.com/curl/curl/issues/6178
  516. 15.10 libpsl is not supported
  517. See https://github.com/curl/curl/issues/6214
  518. 15.11 ExternalProject_Add does not set CURL_CA_PATH
  519. CURL_CA_BUNDLE and CURL_CA_PATH are not set properly when cmake's
  520. ExternalProject_Add is used to build curl as a dependency.
  521. See https://github.com/curl/curl/issues/6313
  522. 15.12 cannot enable LDAPS on Windows
  523. See https://github.com/curl/curl/issues/6284
  524. 15.13 CMake build with MIT Kerberos does not work
  525. Minimum CMake version was bumped in curl 7.71.0 (#5358) Since CMake 3.2
  526. try_compile started respecting the CMAKE_EXE_FLAGS. The code dealing with
  527. MIT Kerberos detection sets few variables to potentially weird mix of space,
  528. and ;-separated flags. It had to blow up at some point. All the CMake checks
  529. that involve compilation are doomed from that point, the configured tree
  530. cannot be built.
  531. https://github.com/curl/curl/issues/6904
  532. 16. Applications
  533. 17. HTTP/2
  534. 17.1 Excessive HTTP/2 packets with TCP_NODELAY
  535. Because of how curl sets TCP_NODELAY by default, HTTP/2 requests are issued
  536. using more separate TCP packets than it would otherwise need to use. This
  537. means spending more bytes than it has to. Just disabling TCP_NODELAY for
  538. HTTP/2 is also not the correct fix because that then makes the outgoing
  539. packets to get delayed.
  540. See https://github.com/curl/curl/issues/6363
  541. 17.2 HTTP/2 frames while in the connection pool kill reuse
  542. If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
  543. curl while the connection is held in curl's connection pool, the socket will
  544. be found readable when considered for reuse and that makes curl think it is
  545. dead and then it will be closed and a new connection gets created instead.
  546. This is *best* fixed by adding monitoring to connections while they are kept
  547. in the pool so that pings can be responded to appropriately.
  548. 17.3 ENHANCE_YOUR_CALM causes infinite retries
  549. Infinite retries with 2 parallel requests on one connection receiving GOAWAY
  550. with ENHANCE_YOUR_CALM error code.
  551. See https://github.com/curl/curl/issues/5119
  552. 17.4 Connection failures with parallel HTTP/2
  553. See https://github.com/curl/curl/issues/5611
  554. 17.5 HTTP/2 connections through HTTPS proxy frequently stall
  555. See https://github.com/curl/curl/issues/6936
  556. 18. HTTP/3
  557. 18.1 If the HTTP/3 server closes connection during upload curl hangs
  558. See https://github.com/curl/curl/issues/6606
  559. 18.2 Transfer closed with n bytes remaining to read
  560. HTTP/3 transfers with the Jetty HTTP/3 server seem to not work.
  561. https://github.com/curl/curl/issues/8523
  562. 18.4 timeout when reusing an http3 connection
  563. HTTP/3 with quiche seems to not work and always timeout a subsequent transfer
  564. that reuses an already established connection
  565. https://github.com/curl/curl/issues/8764
  566. 18.9 connection migration does not work
  567. https://github.com/curl/curl/issues/7695