KNOWN_BUGS 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  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.1 CURLFORM_CONTENTLEN in an array
  13. 1.2 Disabling HTTP Pipelining
  14. 1.3 STARTTRANSFER time is wrong for HTTP POSTs
  15. 1.4 multipart formposts file name encoding
  16. 1.5 Expect-100 meets 417
  17. 1.6 Unnecessary close when 401 received waiting for 100
  18. 1.9 HTTP/2 frames while in the connection pool kill reuse
  19. 1.10 Strips trailing dot from host name
  20. 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
  21. 2. TLS
  22. 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
  23. 2.2 DER in keychain
  24. 2.3 GnuTLS backend skips really long certificate fields
  25. 2.4 DarwinSSL won't import PKCS#12 client certificates without a password
  26. 2.5 Client cert handling with Issuer DN differs between backends
  27. 2.6 CURL_GLOBAL_SSL
  28. 3. Email protocols
  29. 3.1 IMAP SEARCH ALL truncated response
  30. 3.2 No disconnect command
  31. 3.3 SMTP to multiple recipients
  32. 3.4 POP3 expects "CRLF.CRLF" eob for some single-line responses
  33. 4. Command line
  34. 4.1 -J and -O with %-encoded file names
  35. 4.2 -J with -C - fails
  36. 4.3 --retry and transfer timeouts
  37. 4.4 --upload-file . hang if delay in STDIN
  38. 5. Build and portability issues
  39. 5.2 curl-config --libs contains private details
  40. 5.5 can't handle Unicode arguments in Windows
  41. 5.6 cmake support gaps
  42. 5.7 Visual Studio project gaps
  43. 5.8 configure finding libs in wrong directory
  44. 5.9 Utilize Requires.private directives in libcurl.pc
  45. 6. Authentication
  46. 6.1 NTLM authentication and unicode
  47. 6.2 MIT Kerberos for Windows build
  48. 6.3 NTLM in system context uses wrong name
  49. 6.4 Negotiate and Kerberos V5 need a fake user name
  50. 6.5 NTLM doen't support password with § character
  51. 7. FTP
  52. 7.1 FTP without or slow 220 response
  53. 7.2 FTP with CONNECT and slow server
  54. 7.3 FTP with NOBODY and FAILONERROR
  55. 7.4 FTP with ACCT
  56. 7.5 ASCII FTP
  57. 7.6 FTP with NULs in URL parts
  58. 7.7 FTP and empty path parts in the URL
  59. 7.8 Premature transfer end but healthy control channel
  60. 7.9 Passive transfer tries only one IP address
  61. 7.10 Stick to same family over SOCKS proxy
  62. 8. TELNET
  63. 8.1 TELNET and time limtiations don't work
  64. 8.2 Microsoft telnet server
  65. 9. SFTP and SCP
  66. 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct
  67. 10. SOCKS
  68. 10.1 SOCKS proxy connections are done blocking
  69. 10.2 SOCKS don't support timeouts
  70. 10.3 FTPS over SOCKS
  71. 10.4 active FTP over a SOCKS
  72. 11. Internals
  73. 11.1 Curl leaks .onion hostnames in DNS
  74. 11.2 error buffer not set if connection to multiple addresses fails
  75. 11.3 c-ares deviates from stock resolver on http://1346569778
  76. 11.4 HTTP test server 'connection-monitor' problems
  77. 11.5 Connection information when using TCP Fast Open
  78. 11.6 slow connect to localhost on Windows
  79. 12. LDAP and OpenLDAP
  80. 12.1 OpenLDAP hangs after returning results
  81. 13. TCP/IP
  82. 13.1 --interface for ipv6 binds to unusable IP address
  83. 14 DICT
  84. 14.1 DICT responses show the underlying protocol
  85. ==============================================================================
  86. 1. HTTP
  87. 1.1 CURLFORM_CONTENTLEN in an array
  88. It is not possible to pass a 64-bit value using CURLFORM_CONTENTLEN with
  89. CURLFORM_ARRAY, when compiled on 32-bit platforms that support 64-bit
  90. integers. This is because the underlying structure 'curl_forms' uses a dual
  91. purpose char* for storing these values in via casting. For more information
  92. see the now closed related issue:
  93. https://github.com/curl/curl/issues/608
  94. 1.2 Disabling HTTP Pipelining
  95. Disabling HTTP Pipelining when there are ongoing transfers can lead to
  96. heap corruption and crash. https://curl.haxx.se/bug/view.cgi?id=1411
  97. Similarly, removing a handle when pipelining corrupts data:
  98. https://github.com/curl/curl/issues/2101
  99. 1.3 STARTTRANSFER time is wrong for HTTP POSTs
  100. Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with
  101. GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME
  102. is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus
  103. CURLINFO_PRETRANSFER_TIME is near to zero every time.
  104. https://github.com/curl/curl/issues/218
  105. https://curl.haxx.se/bug/view.cgi?id=1213
  106. 1.4 multipart formposts file name encoding
  107. When creating multipart formposts. The file name part can be encoded with
  108. something beyond ascii but currently libcurl will only pass in the verbatim
  109. string the app provides. There are several browsers that already do this
  110. encoding. The key seems to be the updated draft to RFC2231:
  111. https://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02
  112. 1.5 Expect-100 meets 417
  113. If an upload using Expect: 100-continue receives an HTTP 417 response, it
  114. ought to be automatically resent without the Expect:. A workaround is for
  115. the client application to redo the transfer after disabling Expect:.
  116. https://curl.haxx.se/mail/archive-2008-02/0043.html
  117. 1.6 Unnecessary close when 401 received waiting for 100
  118. libcurl closes the connection if an HTTP 401 reply is received while it is
  119. waiting for the the 100-continue response.
  120. https://curl.haxx.se/mail/lib-2008-08/0462.html
  121. 1.9 HTTP/2 frames while in the connection pool kill reuse
  122. If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
  123. curl while the connection is held in curl's connection pool, the socket will
  124. be found readable when considered for reuse and that makes curl think it is
  125. dead and then it will be closed and a new connection gets created instead.
  126. This is *best* fixed by adding monitoring to connections while they are kept
  127. in the pool so that pings can be responded to appropriately.
  128. 1.10 Strips trailing dot from host name
  129. When given a URL with a trailing dot for the host name part:
  130. "https://example.com./", libcurl will strip off the dot and use the name
  131. without a dot internally and send it dot-less in HTTP Host: headers and in
  132. the TLS SNI field.
  133. The HTTP part violates RFC 7230 section 5.4 but the SNI part is accordance
  134. with RFC 6066 section 3.
  135. URLs using these trailing dots are very rare in the wild and we have not seen
  136. or gotten any real-world problems with such URLs reported. The popular
  137. browsers seem to have stayed with not stripping the dot for both uses (thus
  138. they violate RFC 6066 instead of RFC 7230).
  139. Daniel took the discussion to the HTTPbis mailing list in March 2016:
  140. https://lists.w3.org/Archives/Public/ietf-http-wg/2016JanMar/0430.html but
  141. there was not major rush or interest to fix this. The impression I get is
  142. that most HTTP people rather not rock the boat now and instead prioritize web
  143. compatibility rather than to strictly adhere to these RFCs.
  144. Our current approach allows a knowing client to send a custom HTTP header
  145. with the dot added.
  146. It can also be noted that while adding a trailing dot to the host name in
  147. most (all?) cases will make the name resolve to the same set of IP addresses,
  148. many HTTP servers will not happily accept the trailing dot there unless that
  149. has been specifically configured to be a fine virtual host.
  150. If URLs with trailing dots for host names become more popular or even just
  151. used more than for just plain fun experiments, I'm sure we will have reason
  152. to go back and reconsider.
  153. See https://github.com/curl/curl/issues/716 for the discussion.
  154. 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
  155. I'm using libcurl to POST form data using a FILE* with the CURLFORM_STREAM
  156. option of curl_formadd(). I've noticed that if the connection drops at just
  157. the right time, the POST is reattempted without the data from the file. It
  158. seems like the file stream position isn't getting reset to the beginning of
  159. the file. I found the CURLOPT_SEEKFUNCTION option and set that with a
  160. function that performs an fseek() on the FILE*. However, setting that didn't
  161. seem to fix the issue or even get called. See
  162. https://github.com/curl/curl/issues/768
  163. 2. TLS
  164. 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
  165. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
  166. backends, so relying on this information in a generic app is flaky.
  167. 2.2 DER in keychain
  168. Curl doesn't recognize certificates in DER format in keychain, but it works
  169. with PEM. https://curl.haxx.se/bug/view.cgi?id=1065
  170. 2.3 GnuTLS backend skips really long certificate fields
  171. libcurl calls gnutls_x509_crt_get_dn() with a fixed buffer size and if the
  172. field is too long in the cert, it'll just return an error and the field will
  173. be displayed blank.
  174. 2.4 DarwinSSL won't import PKCS#12 client certificates without a password
  175. libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that
  176. function rejects certificates that do not have a password.
  177. https://github.com/curl/curl/issues/1308
  178. 2.5 Client cert handling with Issuer DN differs between backends
  179. When the specified client certificate doesn't match any of the
  180. server-specified DNs, the OpenSSL and GnuTLS backends behave differently.
  181. The github discussion may contain a solution.
  182. See https://github.com/curl/curl/issues/1411
  183. 2.6 CURL_GLOBAL_SSL
  184. Since libcurl 7.57.0, the flag CURL_GLOBAL_SSL is a no-op. The change was
  185. merged in https://github.com/curl/curl/commit/d661b0afb571a
  186. It was removed since it was
  187. A) never clear for applications on how to deal with init in the light of
  188. different SSL backends (the option was added back in the days when life
  189. was simpler)
  190. B) multissl introduced dynamic switching between SSL backends which
  191. emphasized (A) even more
  192. C) libcurl uses some TLS backend functionality even for non-TLS functions (to
  193. get "good" random) so applications trying to avoid the init for
  194. performance reasons would do wrong anyway
  195. D) never very carefully documented so all this mostly just happened to work
  196. for some users
  197. However, in spite of the problems with the feature, there were some users who
  198. apparently depended on this feature and who now claim libcurl is broken for
  199. them. The fix for this situation is not obvious as a downright revert of the
  200. patch is totally ruled out due to those reasons above.
  201. https://github.com/curl/curl/issues/2276
  202. 3. Email protocols
  203. 3.1 IMAP SEARCH ALL truncated response
  204. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
  205. code reveals that pingpong.c contains some truncation code, at line 408, when
  206. it deems the server response to be too large truncating it to 40 characters"
  207. https://curl.haxx.se/bug/view.cgi?id=1366
  208. 3.2 No disconnect command
  209. The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
  210. SMTP if a failure occurs during the authentication phase of a connection.
  211. 3.3 SMTP to multiple recipients
  212. When sending data to multiple recipients, curl will abort and return failure
  213. if one of the recipients indicate failure (on the "RCPT TO"
  214. command). Ordinary mail programs would proceed and still send to the ones
  215. that can receive data. This is subject for change in the future.
  216. https://curl.haxx.se/bug/view.cgi?id=1116
  217. 3.4 POP3 expects "CRLF.CRLF" eob for some single-line responses
  218. You have to tell libcurl not to expect a body, when dealing with one line
  219. response commands. Please see the POP3 examples and test cases which show
  220. this for the NOOP and DELE commands. https://curl.haxx.se/bug/?i=740
  221. 4. Command line
  222. 4.1 -J and -O with %-encoded file names
  223. -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 details
  224. how it should be done. The can of worm is basically that we have no charset
  225. handling in curl and ascii >=128 is a challenge for us. Not to mention that
  226. decoding also means that we need to check for nastiness that is attempted,
  227. like "../" sequences and the like. Probably everything to the left of any
  228. embedded slashes should be cut off.
  229. https://curl.haxx.se/bug/view.cgi?id=1294
  230. -O also doesn't decode %-encoded names, and while it has even less
  231. information about the charset involved the process is similar to the -J case.
  232. Note that we won't add decoding to -O without the user asking for it with
  233. some other means as well, since -O has always been documented to use the name
  234. exactly as specified in the URL.
  235. 4.2 -J with -C - fails
  236. When using -J (with -O), automatically resumed downloading together with "-C
  237. -" fails. Without -J the same command line works! This happens because the
  238. resume logic is worked out before the target file name (and thus its
  239. pre-transfer size) has been figured out!
  240. https://curl.haxx.se/bug/view.cgi?id=1169
  241. 4.3 --retry and transfer timeouts
  242. If using --retry and the transfer timeouts (possibly due to using -m or
  243. -y/-Y) the next attempt doesn't resume the transfer properly from what was
  244. downloaded in the previous attempt but will truncate and restart at the
  245. original position where it was at before the previous failed attempt. See
  246. https://curl.haxx.se/mail/lib-2008-01/0080.html and Mandriva bug report
  247. https://qa.mandriva.com/show_bug.cgi?id=22565
  248. 4.4 --upload-file . hangs if delay in STDIN
  249. "(echo start; sleep 1; echo end) | curl --upload-file . http://mywebsite -vv"
  250. ... causes a hang when it shouldn't.
  251. See https://github.com/curl/curl/issues/2051
  252. 5. Build and portability issues
  253. 5.2 curl-config --libs contains private details
  254. "curl-config --libs" will include details set in LDFLAGS when configure is
  255. run that might be needed only for building libcurl. Further, curl-config
  256. --cflags suffers from the same effects with CFLAGS/CPPFLAGS.
  257. 5.5 can't handle Unicode arguments in Windows
  258. If a URL or filename can't be encoded using the user's current codepage then
  259. it can only be encoded properly in the Unicode character set. Windows uses
  260. UTF-16 encoding for Unicode and stores it in wide characters, however curl
  261. and libcurl are not equipped for that at the moment. And, except for Cygwin,
  262. Windows can't use UTF-8 as a locale.
  263. https://curl.haxx.se/bug/?i=345
  264. https://curl.haxx.se/bug/?i=731
  265. 5.6 cmake support gaps
  266. The cmake build setup lacks several features that the autoconf build
  267. offers. This includes:
  268. - use of correct soname for the shared library build
  269. - support for several TLS backends are missing
  270. - the unit tests cause link failures in regular non-static builds
  271. - no nghttp2 check
  272. 5.7 Visual Studio project gaps
  273. The Visual Studio projects lack some features that the autoconf and nmake
  274. builds offer, such as the following:
  275. - support for zlib and nghttp2
  276. - use of static runtime libraries
  277. - add the test suite components
  278. In addition to this the following could be implemented:
  279. - support for other development IDEs
  280. - add PATH environment variables for third-party DLLs
  281. 5.8 configure finding libs in wrong directory
  282. When the configure script checks for third-party libraries, it adds those
  283. directories to the LDFLAGS variable and then tries linking to see if it
  284. works. When successful, the found directory is kept in the LDFLAGS variable
  285. when the script continues to execute and do more tests and possibly check for
  286. more libraries.
  287. This can make subsequent checks for libraries wrongly detect another
  288. installation in a directory that was previously added to LDFLAGS by another
  289. library check!
  290. A possibly better way to do these checks would be to keep the pristine LDFLAGS
  291. even after successful checks and instead add those verified paths to a
  292. separate variable that only after all library checks have been performed gets
  293. appended to LDFLAGS.
  294. 5.9 Utilize Requires.private directives in libcurl.pc
  295. https://github.com/curl/curl/issues/864
  296. 6. Authentication
  297. 6.1 NTLM authentication and unicode
  298. NTLM authentication involving unicode user name or password only works
  299. properly if built with UNICODE defined together with the WinSSL/schannel
  300. backend. The original problem was mentioned in:
  301. https://curl.haxx.se/mail/lib-2009-10/0024.html
  302. https://curl.haxx.se/bug/view.cgi?id=896
  303. The WinSSL/schannel version verified to work as mentioned in
  304. https://curl.haxx.se/mail/lib-2012-07/0073.html
  305. 6.2 MIT Kerberos for Windows build
  306. libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
  307. library header files exporting symbols/macros that should be kept private to
  308. the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/
  309. 6.3 NTLM in system context uses wrong name
  310. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
  311. "system context" will make it use wrong(?) user name - at least when compared
  312. to what winhttp does. See https://curl.haxx.se/bug/view.cgi?id=535
  313. 6.4 Negotiate and Kerberos V5 need a fake user name
  314. In order to get Negotiate (SPNEGO) authentication to work in HTTP or Kerberos
  315. V5 in the e-mail protocols, you need to provide a (fake) user name (this
  316. concerns both curl and the lib) because the code wrongly only considers
  317. authentication if there's a user name provided by setting
  318. conn->bits.user_passwd in url.c https://curl.haxx.se/bug/view.cgi?id=440 How?
  319. https://curl.haxx.se/mail/lib-2004-08/0182.html A possible solution is to
  320. either modify this variable to be set or introduce a variable such as
  321. new conn->bits.want_authentication which is set when any of the authentication
  322. options are set.
  323. 6.5 NTLM doen't support password with § character
  324. https://github.com/curl/curl/issues/2120
  325. 7. FTP
  326. 7.1 FTP without or slow 220 response
  327. If a connection is made to a FTP server but the server then just never sends
  328. the 220 response or otherwise is dead slow, libcurl will not acknowledge the
  329. connection timeout during that phase but only the "real" timeout - which may
  330. surprise users as it is probably considered to be the connect phase to most
  331. people. Brought up (and is being misunderstood) in:
  332. https://curl.haxx.se/bug/view.cgi?id=856
  333. 7.2 FTP with CONNECT and slow server
  334. When doing FTP over a socks proxy or CONNECT through HTTP proxy and the multi
  335. interface is used, libcurl will fail if the (passive) TCP connection for the
  336. data transfer isn't more or less instant as the code does not properly wait
  337. for the connect to be confirmed. See test case 564 for a first shot at a test
  338. case.
  339. 7.3 FTP with NOBODY and FAILONERROR
  340. It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR
  341. with FTP to detect if a file exists or not, but it is not working:
  342. https://curl.haxx.se/mail/lib-2008-07/0295.html
  343. 7.4 FTP with ACCT
  344. When doing an operation over FTP that requires the ACCT command (but not when
  345. logging in), the operation will fail since libcurl doesn't detect this and
  346. thus fails to issue the correct command:
  347. https://curl.haxx.se/bug/view.cgi?id=635
  348. 7.5 ASCII FTP
  349. FTP ASCII transfers do not follow RFC959. They don't convert the data
  350. accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
  351. clearly describes how this should be done:
  352. The sender converts the data from an internal character representation to
  353. the standard 8-bit NVT-ASCII representation (see the Telnet
  354. specification). The receiver will convert the data from the standard
  355. form to his own internal form.
  356. Since 7.15.4 at least line endings are converted.
  357. 7.6 FTP with NULs in URL parts
  358. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
  359. <password>, and <fpath> components, encoded as "%00". The problem is that
  360. curl_unescape does not detect this, but instead returns a shortened C string.
  361. From a strict FTP protocol standpoint, NUL is a valid character within RFC
  362. 959 <string>, so the way to handle this correctly in curl would be to use a
  363. data structure other than a plain C string, one that can handle embedded NUL
  364. characters. From a practical standpoint, most FTP servers would not
  365. meaningfully support NUL characters within RFC 959 <string>, anyway (e.g.,
  366. Unix pathnames may not contain NUL).
  367. 7.7 FTP and empty path parts in the URL
  368. libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that
  369. such parts should be sent to the server as 'CWD ' (without an argument). The
  370. only exception to this rule, is that we knowingly break this if the empty
  371. part is first in the path, as then we use the double slashes to indicate that
  372. the user wants to reach the root dir (this exception SHALL remain even when
  373. this bug is fixed).
  374. 7.8 Premature transfer end but healthy control channel
  375. When 'multi_done' is called before the transfer has been completed the normal
  376. way, it is considered a "premature" transfer end. In this situation, libcurl
  377. closes the connection assuming it doesn't know the state of the connection so
  378. it can't be reused for subsequent requests.
  379. With FTP however, this isn't necessarily true but there are a bunch of
  380. situations (listed in the ftp_done code) where it *could* keep the connection
  381. alive even in this situation - but the current code doesn't. Fixing this would
  382. allow libcurl to reuse FTP connections better.
  383. 7.9 Passive transfer tries only one IP address
  384. When doing FTP operations through a proxy at localhost, the reported spotted
  385. that curl only tried to connect once to the proxy, while it had mulitiple
  386. addresses and a failed connect on one address should make it try the next.
  387. After switching to passive mode (EPSV), curl should try all IP addresses for
  388. "localhost". Currently it tries ::1, but it should also try 127.0.0.1.
  389. See https://github.com/curl/curl/issues/1508
  390. 7.10 Stick to same family over SOCKS proxy
  391. When asked to do FTP over a SOCKS proxy, it might connect to the proxy (and
  392. then subsequently to the remote server) using for example IPv4. When doing
  393. the second connection, curl should make sure that the second connection is
  394. using the same IP protocol version as the first connection did and not try
  395. others, since the remote server will only accept the same.
  396. See https://curl.haxx.se/mail/archive-2018-07/0000.html
  397. 8. TELNET
  398. 8.1 TELNET and time limtiations don't work
  399. When using telnet, the time limitation options don't work.
  400. https://curl.haxx.se/bug/view.cgi?id=846
  401. 8.2 Microsoft telnet server
  402. There seems to be a problem when connecting to the Microsoft telnet server.
  403. https://curl.haxx.se/bug/view.cgi?id=649
  404. 9. SFTP and SCP
  405. 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct
  406. When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP server
  407. using the multi interface, the commands are not being sent correctly and
  408. instead the connection is "cancelled" (the operation is considered done)
  409. prematurely. There is a half-baked (busy-looping) patch provided in the bug
  410. report but it cannot be accepted as-is. See
  411. https://curl.haxx.se/bug/view.cgi?id=748
  412. 10. SOCKS
  413. 10.1 SOCKS proxy connections are done blocking
  414. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very bad
  415. when used with the multi interface.
  416. 10.2 SOCKS don't support timeouts
  417. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
  418. According to bug #1556528, even the SOCKS5 connect code does not do it right:
  419. https://curl.haxx.se/bug/view.cgi?id=604
  420. When connecting to a SOCK proxy, the (connect) timeout is not properly
  421. acknowledged after the actual TCP connect (during the SOCKS "negotiate"
  422. phase).
  423. 10.3 FTPS over SOCKS
  424. libcurl doesn't support FTPS over a SOCKS proxy.
  425. 10.4 active FTP over a SOCKS
  426. libcurl doesn't support active FTP over a SOCKS proxy
  427. 11. Internals
  428. 11.1 Curl leaks .onion hostnames in DNS
  429. Curl sends DNS requests for hostnames with a .onion TLD. This leaks
  430. information about what the user is attempting to access, and violates this
  431. requirement of RFC7686: https://tools.ietf.org/html/rfc7686
  432. Issue: https://github.com/curl/curl/issues/543
  433. 11.2 error buffer not set if connection to multiple addresses fails
  434. If you ask libcurl to resolve a hostname like example.com to IPv6 addresses
  435. only. But you only have IPv4 connectivity. libcurl will correctly fail with
  436. CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER
  437. remains empty. Issue: https://github.com/curl/curl/issues/544
  438. 11.3 c-ares deviates from stock resolver on http://1346569778
  439. When using the socket resolvers, that URL becomes:
  440. * Rebuilt URL to: http://1346569778/
  441. * Trying 80.67.6.50...
  442. but with c-ares it instead says "Could not resolve: 1346569778 (Domain name
  443. not found)"
  444. See https://github.com/curl/curl/issues/893
  445. 11.4 HTTP test server 'connection-monitor' problems
  446. The 'connection-monitor' feature of the sws HTTP test server doesn't work
  447. properly if some tests are run in unexpected order. Like 1509 and then 1525.
  448. See https://github.com/curl/curl/issues/868
  449. 11.5 Connection information when using TCP Fast Open
  450. CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is
  451. enabled.
  452. See https://github.com/curl/curl/issues/1332
  453. 11.6 slow connect to localhost on Windows
  454. When connecting to "localhost" on Windows, curl will resolve the name for
  455. both ipv4 and ipv6 and try to connect to both happy eyeballs-style. Something
  456. in there does however make it take 200 millseconds to succeed - which is the
  457. HAPPY_EYEBALLS_TIMEOUT define exactly. Lowering that define speeds up the
  458. connection, suggesting a problem in the HE handling.
  459. If we can *know* that we're talking to a local host, we should lower the
  460. happy eyeballs delay timeout for IPv6 (related: hardcode the "localhost"
  461. addresses, mentioned in TODO). Possibly we should reduce that delay for all.
  462. https://github.com/curl/curl/issues/2281
  463. 12. LDAP and OpenLDAP
  464. 12.1 OpenLDAP hangs after returning results
  465. By configuration defaults, openldap automatically chase referrals on
  466. secondary socket descriptors. The OpenLDAP backend is asynchronous and thus
  467. should monitor all socket descriptors involved. Currently, these secondary
  468. descriptors are not monitored, causing openldap library to never receive
  469. data from them.
  470. As a temporary workaround, disable referrals chasing by configuration.
  471. The fix is not easy: proper automatic referrals chasing requires a
  472. synchronous bind callback and monitoring an arbitrary number of socket
  473. descriptors for a single easy handle (currently limited to 5).
  474. Generic LDAP is synchronous: OK.
  475. See https://github.com/curl/curl/issues/622 and
  476. https://curl.haxx.se/mail/lib-2016-01/0101.html
  477. 13. TCP/IP
  478. 13.1 --interface for ipv6 binds to unusable IP address
  479. Since IPv6 provides a lot of addresses with different scope, binding to an
  480. IPv6 address needs to take the proper care so that it doesn't bind to a
  481. locally scoped address as that is bound to fail.
  482. https://github.com/curl/curl/issues/686
  483. 14. DICT
  484. 14.1 DICT responses show the underlying protocol
  485. When getting a DICT response, the protocol parts of DICT aren't stripped off
  486. from the output.
  487. https://github.com/curl/curl/issues/1809