summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordartraiden <wowemuh@gmail.com>2023-07-26 15:20:15 +0300
committerdartraiden <wowemuh@gmail.com>2023-07-26 17:45:46 +0300
commitf53a55e58dd7733f1176a0ac268b2df576778970 (patch)
tree37e4f2fda1ce457bba52fed3e19b5870d3dc388e
parente0bf792776131deef8f2634fb3eeb8bd8239c059 (diff)
libcurl: update to 8.2.1
-rw-r--r--libs/libcurl/docs/CHANGES719
-rw-r--r--libs/libcurl/docs/THANKS7
-rw-r--r--libs/libcurl/include/curl/curlver.h8
-rw-r--r--libs/libcurl/include/curl/websockets.h8
-rw-r--r--libs/libcurl/src/CMakeLists.txt9
-rw-r--r--libs/libcurl/src/amigaos.c1
-rw-r--r--libs/libcurl/src/cf-h1-proxy.c4
-rw-r--r--libs/libcurl/src/cf-haproxy.c4
-rw-r--r--libs/libcurl/src/cf-https-connect.c2
-rw-r--r--libs/libcurl/src/cfilters.c10
-rw-r--r--libs/libcurl/src/cfilters.h4
-rw-r--r--libs/libcurl/src/config-win32.h7
-rw-r--r--libs/libcurl/src/connect.c4
-rw-r--r--libs/libcurl/src/curl_setup.h11
-rw-r--r--libs/libcurl/src/dynbuf.h2
-rw-r--r--libs/libcurl/src/hostip.c9
-rw-r--r--libs/libcurl/src/http.c17
-rw-r--r--libs/libcurl/src/http2.c14
-rw-r--r--libs/libcurl/src/http_proxy.c4
-rw-r--r--libs/libcurl/src/libcurl.plist6
-rw-r--r--libs/libcurl/src/socks.c15
-rw-r--r--libs/libcurl/src/transfer.c4
-rw-r--r--libs/libcurl/src/vquic/curl_ngtcp2.c2
-rw-r--r--libs/libcurl/src/vquic/curl_quiche.c26
-rw-r--r--libs/libcurl/src/vtls/vtls.c4
-rw-r--r--libs/libcurl/src/ws.c26
26 files changed, 476 insertions, 451 deletions
diff --git a/libs/libcurl/docs/CHANGES b/libs/libcurl/docs/CHANGES
index 93b451ed04..c18d77996a 100644
--- a/libs/libcurl/docs/CHANGES
+++ b/libs/libcurl/docs/CHANGES
@@ -6,6 +6,364 @@
Changelog
+Version 8.2.1 (26 Jul 2023)
+
+Daniel Stenberg (26 Jul 2023)
+
+- RELEASE-NOTES: synced
+
+ curl 8.2.1 release
+
+- THANKS: add contributors from 8.2.1
+
+- docs: provide more see also for cipher options
+
+ More cross references. Hide nroff errors.
+
+ Closes #11513
+
+- docs: mark two TLS options for TLS, not SSL
+
+ Closes #11514
+
+Brad Harder (25 Jul 2023)
+
+- curl_multi_wait.3: fix arg quoting to doc macro .BR
+
+ Closes #11511
+
+Daniel Stenberg (24 Jul 2023)
+
+- RELEASE-NOTES: synced
+
+Viktor Szakats (24 Jul 2023)
+
+- cmake: update ngtcp2 detection
+
+ Replace `OpenSSL` with `quictls` to follow the same change
+ in the v0.17.0 ngtcp2 release.
+
+ Follow-up to e0093b4b732f6495b0fb1cd6747cbfedcdcf63ed
+
+ Closes #11508
+
+Stefan Eissing (24 Jul 2023)
+
+- http: VLH, very large header test and fixes
+
+ - adding tests using very large passwords in auth
+ - fixes general http sending to treat h3 like h2, and
+ not like http1.1
+ - eliminate H2_HEADER max definitions and use the commmon
+ DYN_HTTP_REQUEST everywhere, different limits do not help
+ - fix http2 handling of requests denied by nghttp2 on send
+ to immediately report the refused stream
+
+ Closes #11509
+
+Andrei Rybak (23 Jul 2023)
+
+- CONTRIBUTE: drop mention of copyright year ranges
+
+ Year ranges in copyrights were dropped in commits [1] and [2].
+ Verification of year ranges in copyrights was dropped from script
+ 'scripts/copyright.pl' in commit [3]. However, the corresponding
+ passages in file 'docs/CONTRIBUTE.md' weren't updated.
+
+ Drop mentions of copyright year ranges from 'docs/CONTRIBUTE.md'.
+
+ [1] 2bc1d775f (copyright: update all copyright lines and remove year
+ ranges, 2023-01-02)
+ [2] c46761bd8 (tests/http: remove year ranges from copyrights,
+ 2023-03-14)
+ [3] 0e293bacb (copyright.pl: cease doing year verifications, 2023-01-28)
+
+ Closes #11504
+
+- CONTRIBUTE: fix syntax in commit message description
+
+ File 'docs/CONTRIBUTE.md' includes a description of how one should write
+ commit messages in the curl project. Different possible parts of the
+ message are enclosed in square brackets. One exception is the section
+ describing how the curl project doesn't use "Signed-off-by" commit
+ trailers [1], which is enclosed in an opening curly brace paired with a
+ closing square bracket.
+
+ Fix the enclosing square brackets in description of "Signed-off-by"
+ trailers in commit messages in file 'docs/CONTRIBUTE.md'.
+
+ [1] See description of option '--signoff' in Git documentation:
+ https://git-scm.com/docs/git-commit
+
+ Closes #11504
+
+Daniel Stenberg (23 Jul 2023)
+
+- src/mkhelp: strip off escape sequences
+
+ At some point the nroff command stopped stripping off escape sequences,
+ so then this script needs to do the job instead.
+
+ Reported-by: VictorVG on github
+ Fixes #11501
+ Closes #11503
+
+- KNOWN_BUGS: building for old macOS fails with gcc
+
+ Closes #11441
+
+Jacob Hoffman-Andrews (22 Jul 2023)
+
+- rustls: update rustls-ffi 0.10.0
+
+ This brings in version 0.21.0 of the upstream rustls implementation,
+ which notable includes support for IP address certificates.
+
+ Closes #10865
+
+Brad Harder (22 Jul 2023)
+
+- websocket: rename arguments/variables to match docs
+
+ Pedantry/semantic-alignment between functions, docs, comments with
+ respect to websocket protocol code; No functional change intended.
+
+ * "totalsize", "framesize" becomes "fragsize" (we deal in frame fragments).
+
+ * "sendflags" becomes "flags"
+
+ * use canonical CURL *handle
+
+ Closes #11493
+
+Jan Macku (21 Jul 2023)
+
+- bug_report: use issue forms instead of markdown template
+
+ Issue forms allow you to define web-like input forms using YAML
+ syntax. It allows you to guide the reporter to get the required
+ information.
+
+ Signed-off-by: Jan Macku <jamacku@redhat.com>
+ Closes #11474
+
+Daniel Stenberg (21 Jul 2023)
+
+- TODO: Obey Retry-After in redirects
+
+ (remove "Set custom client ip when using haproxy protocol" which was
+ shipped in 8.2.0)
+
+ Mentioned-by: Yair Lenga
+ Closes #11447
+
+- RELEASE-NOTES: synced
+
+Oliver Roberts (21 Jul 2023)
+
+- amissl: fix AmiSSL v5 detection
+
+ Due to changes in the AmiSSL SDK, the detection needed adjusting.
+
+ Closes #11477
+
+Alois Klink (21 Jul 2023)
+
+- unittest/makefile: remove unneeded unit1621_LDADD
+
+ The `unit1621_LDADD` variable has the exact same value as the `LDADD`
+ flag in `Makefile.am`, except without `@LDFLAGS@ @LIBCURL_LIBS@`.
+
+ This was originally added by [98e6629][], but I can't see any reason
+ why it exists, so we should remove it to clean things up.
+
+ [98e6629]: https://github.com/curl/curl/commit/98e6629154044e4ab1ee7cff8351c7
+ ebcb131e88
+
+ Closes #11494
+
+- unittest/makefile: remove unneeded unit1394_LDADD
+
+ These custom `unit1394_LDADD` and similar automake overrides are no
+ longer neded. They were originally added by added by [8dac7be][] for
+ metalink support, but are no longer after [265b14d][] removed metalink.
+
+ [8dac7be]: https://github.com/curl/curl/commit/8dac7be438512a8725d3c71e9139bd
+ fdcac1ed8c
+ [265b14d]: https://github.com/curl/curl/commit/265b14d6b37c4298bd5556fabcbc37
+ d36f911693
+
+ Closes #11494
+
+- cmake: add `libcurlu`/`libcurltool` for unit tests
+
+ Add a `libcurlu`/`libcurltool` static library that is compiled only for
+ unit tests. We use `EXCLUDE_FROM_ALL` to make sure that they're not
+ built by default, they're only built if unit tests are built.
+
+ These libraries allow us to compile every unit test with CMake.
+
+ Closes #11446
+
+Daniel Stenberg (21 Jul 2023)
+
+- test979: test -u with redirect to (the same) absolute host
+
+ Verifies #11492
+
+- transfer: do not clear the credentials on redirect to absolute URL
+
+ Makes test 979 work. Regression shipped in 8.2.0 from commit
+ dd4d1a26959f63a2c
+
+ Fixes #11486
+ Reported-by: Cloudogu Siebels
+ Closes #11492
+
+Jon Rumsey (20 Jul 2023)
+
+- os400: correct EXPECTED_STRING_LASTZEROTERMINATED
+
+ Correct EXPECTED_STRING_LASTZEROTERMINATED to account for
+ CURLOPT_HAPROXY_CLIENT_IP which requires EBCDIC to ASCII conversion when
+ passed into curl_easy_setopt().
+
+ Closes #11476
+
+Oliver Roberts (20 Jul 2023)
+
+- amissl: add missing signal.h include
+
+ In some environments, signal.h is already included, but not in others
+ which cause compilation to fail, so explictly include it.
+
+ Closes #11478
+
+- amigaos: fix sys/mbuf.h m_len macro clash
+
+ The updated Curl_http_req_make and Curl_http_req_make2 functions spawned
+ a parameter called m_len. The AmigaOS networking headers, derived from
+ NetBSD, contain "#define m_len m_hdr.mh_len" which clashes with
+ this. Since we do not actually use mbuf, force the include file to be
+ ignored, removing the clash.
+
+ Closes #11479
+
+Daniel Stenberg (20 Jul 2023)
+
+- socks: print ipv6 address within brackets
+
+ Fixes #11483
+ Closes #11484
+
+Christian Schmitz (20 Jul 2023)
+
+- libcurl-errors.3: add CURLUE_OK
+
+ Closes #11488
+
+Oliver Roberts (20 Jul 2023)
+
+- cfilters: rename close/connect functions to avoid clashes
+
+ Rename `close` and `connect` in `struct Curl_cftype` for
+ consistency and to avoid clashes with macros of the same name
+ (the standard AmigaOS networking connect() function is implemented
+ via a macro).
+
+ Closes #11491
+
+Stefan Eissing (20 Jul 2023)
+
+- http2: fix regression on upload EOF handling
+
+ - a regression introduced by c9ec85121110d7cbbbed2990024222c8f5b8afe5
+ where optimization of small POST bodies leads to a new code path
+ for such uploads that did not trigger the "done sending" event
+ - add triggering this event for early "upload_done" situations
+
+ Fixes #11485
+ Closes #11487
+ Reported-by: Aleksander Mazur
+
+Daniel Stenberg (19 Jul 2023)
+
+- configure: check for nghttp2_session_get_stream_local_window_size
+
+ The http2 code uses it now. Introduced in nghttp2 1.15.0 (Sep 2016)
+
+ Fixes #11470
+ Reported-by: Paul Howarth
+ Closes #11473
+
+Stefan Eissing (19 Jul 2023)
+
+- quiche: fix segfault and other things
+
+ - refs #11449 where a segfault is reported when IP Eyeballing did
+ not immediately connect but made several attempts
+ - The transfer initiating the eyeballing was initialized too early,
+ leadding to references to the filter instance that was then
+ replaced in the subsequent eyeball attempts. That led to a use
+ after free in the buffer handling for the transfer
+ - transfers are initiated now more lazy (like in the ngtcp2 filter),
+ when the stream is actually opened
+ - suppress reporting on quiche event errors for "other" transfers
+ than the current one to not fail a transfer due to faults in
+ another one.
+ - revert recent return value handling for quiche_h3_recv_body()
+ to not indicate an error but an EAGAIN situation. We wish quiche
+ would document what functions return.
+
+ Fixes #11449
+ Closes #11469
+ Reported-by: ウさん
+
+Daniel Stenberg (19 Jul 2023)
+
+- hostip: return IPv6 first for localhost resolves
+
+ Fixes #11465
+ Reported-by: Chilledheart on github
+ Closes #11466
+
+Harry Sintonen (19 Jul 2023)
+
+- tool: fix tool_seek_cb build when SIZEOF_CURL_OFF_T > SIZEOF_OFF_T
+
+ - a variable was renamed, and some use of it wasn't. this fixes the
+ build.
+
+ Closes #11468
+
+Stefan Eissing (19 Jul 2023)
+
+- quiche: fix lookup of transfer at multi
+
+ - refs #11449 where weirdness in quiche multi connection tranfers was
+ observed
+ - fixes lookup of transfer for a quiche event to take the connection
+ into account
+ - formerly, a transfer with the same stream_id, but on another connection
+ could be found
+
+ Closes #11462
+
+Daniel Stenberg (19 Jul 2023)
+
+- RELEASE-NOTES: synced
+
+ bump to 8.2.1
+
+John Haugabook (19 Jul 2023)
+
+- ciphers.d: put URL in first column
+
+ This makes the URL turn into a link properly when "webified".
+
+ Fixes https://github.com/curl/curl-www/issues/270
+ Closes #11464
+
Version 8.2.0 (19 Jul 2023)
Daniel Stenberg (19 Jul 2023)
@@ -8654,364 +9012,3 @@ Jay Satiro (3 Jan 2023)
Prior to this change http2_cfilter_add could return an uninitialized
cfilter pointer in an OOM condition. In this case though, the pointer
is discarded and not dereferenced so there was no risk of a crash.
-
-Stefan Eissing (3 Jan 2023)
-
-- cf-socket: keep sockaddr local in the socket filters
-
- - copy `struct Curl_addrinfo` on filter setup into context
- - remove `struct Curl_addrinfoi *` with `struct Curl_sockaddr_ex *` in
- connectdata that is set and NULLed by the socket filter
- - this means we have no reference to the resolver info in connectdata or
- its filters
- - trigger the CF_CTRL_CONN_INFO_UPDATE event when the complete filter
- chain reaches connected status
- - update easy handle connection information on CF_CTRL_DATA_SETUP event.
-
- Closes #10213
-
-Daniel Stenberg (3 Jan 2023)
-
-- RELEASE-NOTES: synced
-
-- runtests: consider warnings fatal and error on them
-
- To help us detect and fix warnings in this script easier and faster.
-
- Assisted-by: Jakob Hirsch
-
- Ref: #10206
- Closes #10208
-
-- copyright: update all copyright lines and remove year ranges
-
- - they are mostly pointless in all major jurisdictions
- - many big corporations and projects already don't use them
- - saves us from pointless churn
- - git keeps history for us
- - the year range is kept in COPYING
-
- checksrc is updated to allow non-year using copyright statements
-
- Closes #10205
-
-- docs/DEPRECATE.md: deprecate gskit
-
- Ref: #10163
-
- - This is a niche TLS library, only running on some IBM systems
- - no regular curl contributors use this backend
- - no CI builds use or verify this backend
- - gskit, or the curl adaption for it, lacks many modern TLS features
- making it an inferior solution
- - build breakages in this code take weeks or more to get detected
- - fixing gskit code is mostly done "flying blind"
-
- Closes #10201
-
-- Revert "x509asn1: avoid freeing unallocated pointers"
-
- This reverts commit 6b19247e794cfdf4ec63c5880d8f4f5485f653ab.
-
- Fixes #10163
- Closes #10207
-
-- ngtcp2: fix the build without 'sendmsg'
-
- Follow-up from 71b7e0161032
-
- Closes #10210
-
-- cmake: check for sendmsg
-
- Used by ngtcp2
-
- Closes #10211
-
-Timmy Schierling (2 Jan 2023)
-
-- runtest.pl: add expected fourth return value
-
- Fixes warning in autobild log: "Use of uninitialized value $HTTP2TLSPORT
- in substitution iterator at /tests/runtests.pl line 3516"
-
- Closes #10206
-
-Daniel Stenberg (2 Jan 2023)
-
-- http2: when using printf %.*s, the length arg must be 'int'
-
- Detected by Coverity CID 1518341
-
- Closes #10203
-
-- cfilters: check for NULL before using pointer
-
- Detected by Coverity CID 1518343
-
- Closes #10202
-
-- http2: in connisdead check, attach the connection before reading
-
- Otherwise data->conn is NULL and things go wrong.
-
- This problem caused occastional failures in test 359, 1700 and more
- depending on timing and the alignment of various planets.
-
- Assisted-by: Stefan Eissing
-
- Closes #10199
-
-Philip Heiduck (2 Jan 2023)
-
-- Linux CI: update some dependecies to latest tag
-
- Closes #10195
-
-Daniel Stenberg (2 Jan 2023)
-
-- c-hyper: move down the Accept-Encoding header generation
-
- To match the internal HTTP request header order so that test 1277 works
- again.
-
- Closes #10200
-
-- release-notes.pl: check fixes/closes lines better
-
- To better skip lines that just happen to mention those words at the
- start of a line without being instructions.
-
-- test1560: use a UTF8-using locale when run
-
- There are odd cases that don't use UTF8 and then the IDN handling goes
- wrong.
-
- Reported-by: Marcel Raad
- Fixes #10193
- Closes #10196
-
-- cf-socket: fix build regression
-
- Reported-by: Stephan Guilloux
- Fixes #10190
- Closes #10191
-
-- examples: remove the curlgtk.c example
-
- - it does not add a lot of value
- - we do not test-build it to verify because of its dependencies
- - unclear for what GTK versions it works or not
-
- Reported-by: odek86 on github
-
- Fixes #10197
- Closes #10198
-
-Andy Alt (2 Jan 2023)
-
-- docs: add link to GitHub Discussions
-
- Closes #10171
-
-- GHA: ignore changes to md files for most workflows
-
- Closes #10176
-
-Josh Brobst (2 Jan 2023)
-
-- http: decode transfer encoding first
-
- The unencoding stack is added to as Transfer-Encoding and
- Content-Encoding fields are encountered with no distinction between the
- two, meaning the stack will be incorrect if, e.g., the message has both
- fields and a non-chunked Transfer-Encoding comes first. This commit
- fixes this by ordering the stack with transfer encodings first.
-
- Reviewed-by: Patrick Monnerat
- Closes #10187
-
-Daniel Stenberg (1 Jan 2023)
-
-- curl.h: mark CURLSSLBACKEND_MESALINK as deprecated
-
- Follow-up since 223f26c28a340b36
-
- Deprecated since 7.82.0
-
- Closes #10189
-
-- curl_global_sslset.3: clarify the openssl situation
-
- and add rustls
-
- Closes #10188
-
-Cameron Blomquist (1 Jan 2023)
-
-- http: add additional condition for including stdint.h
-
- stdint.h was only included in http.h when ENABLE_QUIC was defined, but
- symbols from stdint.h are also used when USE_NGHTTP2 is defined. This
- causes build errors when USE_NGHTTP2 is defined but ENABLE_QUIC is not.
-
- Closes #10185
-
-Daniel Stenberg (31 Dec 2022)
-
-- urldata: cease storing TLS auth type
-
- The only TLS auth type libcurl ever supported is SRP and that is the
- default type. Since nobody ever sets any other type, there is no point
- in wasting space to store the set type and code to check the type.
-
- If TLS auth is used, SRP is now implied.
-
- Closes #10181
-
-- vtls: use ALPN HTTP/1.0 when HTTP/1.0 is used
-
- Previously libcurl would use the HTTP/1.1 ALPN id even when the
- application specified HTTP/1.0.
-
- Reported-by: William Tang
- Ref: #10183
-
-Marcel Raad (30 Dec 2022)
-
-- lib670: make test.h the first include
-
- As in all other lib tests. This avoids a macro redefinition warning for
- `_FILE_OFFSET_BITS` visible in the autobuilds.
-
- Closes https://github.com/curl/curl/pull/10182
-
-Stefan Eissing (30 Dec 2022)
-
-- lib: connect/h2/h3 refactor
-
- Refactoring of connection setup and happy eyeballing. Move
- nghttp2. ngtcp2, quiche and msh3 into connection filters.
-
- - eyeballing cfilter that uses sub-filters for performing parallel connects
- - socket cfilter for all transport types, including QUIC
- - QUIC implementations in cfilter, can now participate in eyeballing
- - connection setup is more dynamic in order to adapt to what filter did
- really connect. Relevant to see if a SSL filter needs to be added or
- if SSL has already been provided
- - HTTP/3 test cases similar to HTTP/2
- - multiuse of parallel transfers for HTTP/3, tested for ngtcp2 and quiche
-
- - Fix for data attach/detach in VTLS filters that could lead to crashes
- during parallel transfers.
- - Eliminating setup() methods in cfilters, no longer needed.
- - Improving Curl_conn_is_alive() to replace Curl_connalive() and
- integrated ssl alive checks into cfilter.
- - Adding CF_CNTRL_CONN_INFO_UPDATE to tell filters to update
- connection into and persist it at the easy handle.
-
- - Several more cfilter related cleanups and moves:
- - stream_weigth and dependency info is now wrapped in struct
- Curl_data_priority
- - Curl_data_priority members depend is available in HTTP2|HTTP3
- - Curl_data_priority members depend on NGHTTP2 support
- - handling init/reset/cleanup of priority part of url.c
- - data->state.priority same struct, but shallow copy for compares only
-
- - PROTOPT_STREAM has been removed
- - Curl_conn_is_mulitplex() now available to check on capability
-
- - Adding query method to connection filters.
- - ngtcp2+quiche: implementing query for max concurrent transfers.
-
- - Adding is_alive and keep_alive cfilter methods. Adding DATA_SETUP event.
- - setting keepalive timestamp on connect
- - DATA_SETUP is called after the connection has been completely
- setup (but may not connected yet) to allow filters to initialize
- data members they use.
-
- - there is no socket to be had with msh3, it is unclear how select
- shall work
-
- - manual test via "curl --http3 https://curl.se" fail with "empty
- reply from server".
-
- - Various socket/conn related cleanups:
- - Curl_socket is now Curl_socket_open and in cf-socket.c
- - Curl_closesocket is now Curl_socket_close and in cf-socket.c
- - Curl_ssl_use has been replaced with Cur_conn_is_ssl
- - Curl_conn_tcp_accepted_set has been split into
- Curl_conn_tcp_listen_set and Curl_conn_tcp_accepted_set
- with a clearer purpose
-
- Closes #10141
-
-Daniel Stenberg (30 Dec 2022)
-
-- RELEASE-NOTES: synced
-
-- docs/libcurl/curl_getdate.3: minor whitespace edit
-
- To avoid a fccp quirk that made it render wrongly on the website
-
-- transfer: break the read loop when RECV is cleared
-
- When the RECV bit is cleared because the response reading for this
- transfer is complete, the read loop should be stopped. data_pending()
- can otherwise still return TRUE and another read would be attempted.
-
- Reported-by: Hide Ishikawa
- Fixes #10172
- Closes #10174
-
-- multihandle: turn bool struct fields into bits
-
- Closes #10179
-
-Stefan Eissing (30 Dec 2022)
-
-- ftpserver: lower the normal DATA connect timeout to speed up torture tests
-
- - tests/ftpserver.pl blocks when expecting a DATA connection from the
- client.
-
- - the previous 10 seconds were encountered repeatedly in torture tests
- and let to long waits.
-
- - 2 seconds should still be sufficient for current hw, but CI will show.
-
- Closes #10178
-
-Nick Banks (28 Dec 2022)
-
-- msh3: add support for request payload
-
- Closes #10136
-
-Stefan Eissing (28 Dec 2022)
-
-- openssl: remove attached easy handles from SSL instances
-
- - keeping the "current" easy handle registered at SSL* is no longer
- necessary, since the "calling" data object is already stored in the
- cfilter's context (and used by other SSL backends from there).
- - The "detach" of an easy handle that goes out of scope is then avoided.
- - using SSL_set0_wbio for clear reference counting where available.
-
- Closes #10151
-
-Daniel Stenberg (28 Dec 2022)
-
-- socketpair: allow localhost MITM sniffers
-
- Windows allow programs to MITM connections to localhost. The previous
- check here would detect that and error out. This new method writes data
- to verify the pipe thus allowing MITM.
-
- Reported-by: SerusDev on github
- Fixes #10144
- Closes #10169
-
-- HTTP3: mention what needs to be in place to remove EXPERIMENTAL label
-
- Closes #10168
diff --git a/libs/libcurl/docs/THANKS b/libs/libcurl/docs/THANKS
index 9a0ea00fae..beca5197e1 100644
--- a/libs/libcurl/docs/THANKS
+++ b/libs/libcurl/docs/THANKS
@@ -124,6 +124,7 @@ Ali Khodkar
Ali Utku Selen
ALittleDruid on github
Allen Pulsifer
+Alois Klink
Alona Rossen
Amaury Denoyelle
amishmm on github
@@ -435,6 +436,7 @@ Cherish98 on github
Chester Liu
Chih-Chung Chang
Chih-Hsuan Yen
+Chilledheart on github
Chloe Kudryavtsev
Chris "Bob Bob"
Chris Araman
@@ -489,6 +491,7 @@ Clemens Gruber
Cliff Crosland
Clifford Wolf
Clint Clayton
+Cloudogu Siebels
Clément Notin
cmfrolick on github
codesniffer13 on github
@@ -1163,6 +1166,7 @@ Jan Ehrhardt
Jan Engelhardt
Jan Koen Annot
Jan Kunder
+Jan Macku
Jan Mazur
Jan Schaumann
Jan Schmidt
@@ -1302,6 +1306,7 @@ John E. Malmberg
John Gardiner Myers
John H. Ayad
John Hascall
+John Haugabook
John Janssen
John Joseph Bachir
John Kelly
@@ -2773,6 +2778,7 @@ Vicente Garcia
Victor Magierski
Victor Snezhko
Victor Vieux
+VictorVG on github
Vijay Panghal
Vikram Saxena
Viktor Szakats
@@ -2859,6 +2865,7 @@ xtonik on github
xwxbug on github
Xì Gà
Yaakov Selkowitz
+Yair Lenga
Yang Tse
Yaobin Wen
Yarram Sunil
diff --git a/libs/libcurl/include/curl/curlver.h b/libs/libcurl/include/curl/curlver.h
index a71880e44e..b85f767b2f 100644
--- a/libs/libcurl/include/curl/curlver.h
+++ b/libs/libcurl/include/curl/curlver.h
@@ -32,13 +32,13 @@
/* This is the version number of the libcurl package from which this header
file origins: */
-#define LIBCURL_VERSION "8.2.0"
+#define LIBCURL_VERSION "8.2.1"
/* The numeric version number is also available "in parts" by using these
defines: */
#define LIBCURL_VERSION_MAJOR 8
#define LIBCURL_VERSION_MINOR 2
-#define LIBCURL_VERSION_PATCH 0
+#define LIBCURL_VERSION_PATCH 1
/* This is the numeric version of the libcurl version number, meant for easier
parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will
@@ -59,7 +59,7 @@
CURL_VERSION_BITS() macro since curl's own configure script greps for it
and needs it to contain the full number.
*/
-#define LIBCURL_VERSION_NUM 0x080200
+#define LIBCURL_VERSION_NUM 0x080201
/*
* This is the date and time when the full source package was created. The
@@ -70,7 +70,7 @@
*
* "2007-11-23"
*/
-#define LIBCURL_TIMESTAMP "2023-07-19"
+#define LIBCURL_TIMESTAMP "2023-07-26"
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
diff --git a/libs/libcurl/include/curl/websockets.h b/libs/libcurl/include/curl/websockets.h
index 774e85a4cf..a10652dc1c 100644
--- a/libs/libcurl/include/curl/websockets.h
+++ b/libs/libcurl/include/curl/websockets.h
@@ -56,11 +56,11 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
size_t *recv,
const struct curl_ws_frame **metap);
-/* sendflags for curl_ws_send() */
+/* flags for curl_ws_send() */
#define CURLWS_PONG (1<<6)
/*
- * NAME curl_easy_send()
+ * NAME curl_ws_send()
*
* DESCRIPTION
*
@@ -69,8 +69,8 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
*/
CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t framesize,
- unsigned int sendflags);
+ curl_off_t fragsize,
+ unsigned int flags);
/* bits for the CURLOPT_WS_OPTIONS bitmask: */
#define CURLWS_RAW_MODE (1<<0)
diff --git a/libs/libcurl/src/CMakeLists.txt b/libs/libcurl/src/CMakeLists.txt
index 6d404d588b..f55c3449a2 100644
--- a/libs/libcurl/src/CMakeLists.txt
+++ b/libs/libcurl/src/CMakeLists.txt
@@ -65,6 +65,14 @@ add_library(
)
add_library(
+ curlu # special libcurlu library just for unittests
+ STATIC
+ EXCLUDE_FROM_ALL
+ ${HHEADERS} ${CSOURCES}
+)
+target_compile_definitions(curlu PUBLIC UNITTESTS CURL_STATICLIB)
+
+add_library(
${PROJECT_NAME}::${LIB_NAME}
ALIAS ${LIB_NAME}
)
@@ -80,6 +88,7 @@ if(NOT BUILD_SHARED_LIBS)
endif()
target_link_libraries(${LIB_NAME} PRIVATE ${CURL_LIBS})
+target_link_libraries(curlu PRIVATE ${CURL_LIBS})
transform_makefile_inc("Makefile.soname" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake")
include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake)
diff --git a/libs/libcurl/src/amigaos.c b/libs/libcurl/src/amigaos.c
index 26c3535b6f..1448def49a 100644
--- a/libs/libcurl/src/amigaos.c
+++ b/libs/libcurl/src/amigaos.c
@@ -178,6 +178,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
#endif /* CURLRES_AMIGA */
#ifdef USE_AMISSL
+#include <signal.h>
int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *errorfds, struct timeval *timeout)
{
diff --git a/libs/libcurl/src/cf-h1-proxy.c b/libs/libcurl/src/cf-h1-proxy.c
index 57277598b0..0c3aa3c020 100644
--- a/libs/libcurl/src/cf-h1-proxy.c
+++ b/libs/libcurl/src/cf-h1-proxy.c
@@ -1074,7 +1074,7 @@ static CURLcode cf_h1_proxy_connect(struct Curl_cfilter *cf,
}
DEBUGF(LOG_CF(data, cf, "connect"));
- result = cf->next->cft->connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
if(result || !*done)
return result;
@@ -1146,7 +1146,7 @@ static void cf_h1_proxy_close(struct Curl_cfilter *cf,
h1_tunnel_go_state(cf, cf->ctx, H1_TUNNEL_INIT, data);
}
if(cf->next)
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
}
diff --git a/libs/libcurl/src/cf-haproxy.c b/libs/libcurl/src/cf-haproxy.c
index 0848943135..c970552a15 100644
--- a/libs/libcurl/src/cf-haproxy.c
+++ b/libs/libcurl/src/cf-haproxy.c
@@ -115,7 +115,7 @@ static CURLcode cf_haproxy_connect(struct Curl_cfilter *cf,
return CURLE_OK;
}
- result = cf->next->cft->connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
if(result || !*done)
return result;
@@ -168,7 +168,7 @@ static void cf_haproxy_close(struct Curl_cfilter *cf,
cf->connected = FALSE;
cf_haproxy_ctx_reset(cf->ctx);
if(cf->next)
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
}
static int cf_haproxy_get_select_socks(struct Curl_cfilter *cf,
diff --git a/libs/libcurl/src/cf-https-connect.c b/libs/libcurl/src/cf-https-connect.c
index 387da5ab5c..76251d94c8 100644
--- a/libs/libcurl/src/cf-https-connect.c
+++ b/libs/libcurl/src/cf-https-connect.c
@@ -432,7 +432,7 @@ static void cf_hc_close(struct Curl_cfilter *cf, struct Curl_easy *data)
cf->connected = FALSE;
if(cf->next) {
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
Curl_conn_cf_discard_chain(&cf->next, data);
}
}
diff --git a/libs/libcurl/src/cfilters.c b/libs/libcurl/src/cfilters.c
index a83a5cc590..e12aa2019a 100644
--- a/libs/libcurl/src/cfilters.c
+++ b/libs/libcurl/src/cfilters.c
@@ -50,7 +50,7 @@ void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
cf->connected = FALSE;
if(cf->next)
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
}
#endif
@@ -161,7 +161,7 @@ void Curl_conn_close(struct Curl_easy *data, int index)
/* it is valid to call that without filters being present */
cf = data->conn->cfilter[index];
if(cf) {
- cf->cft->close(cf, data);
+ cf->cft->do_close(cf, data);
}
}
@@ -293,14 +293,14 @@ CURLcode Curl_conn_cf_connect(struct Curl_cfilter *cf,
bool blocking, bool *done)
{
if(cf)
- return cf->cft->connect(cf, data, blocking, done);
+ return cf->cft->do_connect(cf, data, blocking, done);
return CURLE_FAILED_INIT;
}
void Curl_conn_cf_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
if(cf)
- cf->cft->close(cf, data);
+ cf->cft->do_close(cf, data);
}
int Curl_conn_cf_get_select_socks(struct Curl_cfilter *cf,
@@ -348,7 +348,7 @@ CURLcode Curl_conn_connect(struct Curl_easy *data,
*done = cf->connected;
if(!*done) {
- result = cf->cft->connect(cf, data, blocking, done);
+ result = cf->cft->do_connect(cf, data, blocking, done);
if(!result && *done) {
Curl_conn_ev_update_info(data, data->conn);
conn_report_connect_stats(data, data->conn);
diff --git a/libs/libcurl/src/cfilters.h b/libs/libcurl/src/cfilters.h
index 384cdd3c9b..829340a2af 100644
--- a/libs/libcurl/src/cfilters.h
+++ b/libs/libcurl/src/cfilters.h
@@ -168,8 +168,8 @@ struct Curl_cftype {
int flags; /* flags of filter type */
int log_level; /* log level for such filters */
Curl_cft_destroy_this *destroy; /* destroy resources of this cf */
- Curl_cft_connect *connect; /* establish connection */
- Curl_cft_close *close; /* close conn */
+ Curl_cft_connect *do_connect; /* establish connection */
+ Curl_cft_close *do_close; /* close conn */
Curl_cft_get_host *get_host; /* host filter talks to */
Curl_cft_get_select_socks *get_select_socks;/* sockets to select on */
Curl_cft_data_pending *has_data_pending;/* conn has data pending */
diff --git a/libs/libcurl/src/config-win32.h b/libs/libcurl/src/config-win32.h
index 5536ebfa7a..e12ab552fd 100644
--- a/libs/libcurl/src/config-win32.h
+++ b/libs/libcurl/src/config-win32.h
@@ -205,10 +205,6 @@
/* Define if you have the socket function. */
#define HAVE_SOCKET 1
-/* Define if libSSH2 is in use */
-#define USE_LIBSSH2 1
-#define HAVE_LIBSSH2_H 1
-
/* Define if you have the strcasecmp function. */
#ifdef __MINGW32__
#define HAVE_STRCASECMP 1
@@ -627,9 +623,6 @@ Vista
# define CURL_DISABLE_LDAP 1
#endif
-/* if SSL is enabled */
-#define USE_OPENSSL 1
-
/* Define to use the Windows crypto library. */
#if !defined(CURL_WINDOWS_APP)
#define USE_WIN32_CRYPTO
diff --git a/libs/libcurl/src/connect.c b/libs/libcurl/src/connect.c
index 9a8e1e3bbb..52739b9783 100644
--- a/libs/libcurl/src/connect.c
+++ b/libs/libcurl/src/connect.c
@@ -937,7 +937,7 @@ static void cf_he_close(struct Curl_cfilter *cf,
ctx->state = SCFST_INIT;
if(cf->next) {
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
Curl_conn_cf_discard_chain(&cf->next, data);
}
}
@@ -1291,7 +1291,7 @@ static void cf_setup_close(struct Curl_cfilter *cf,
ctx->state = CF_SETUP_INIT;
if(cf->next) {
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
Curl_conn_cf_discard_chain(&cf->next, data);
}
}
diff --git a/libs/libcurl/src/curl_setup.h b/libs/libcurl/src/curl_setup.h
index a5df371c4c..de5d6a6182 100644
--- a/libs/libcurl/src/curl_setup.h
+++ b/libs/libcurl/src/curl_setup.h
@@ -61,6 +61,16 @@
# ifndef NOGDI
# define NOGDI
# endif
+/* Detect Windows App environment which has a restricted access
+ * to the Win32 APIs. */
+# if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \
+ defined(WINAPI_FAMILY)
+# include <winapifamily.h>
+# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
+ !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+# define CURL_WINDOWS_APP
+# endif
+# endif
#endif
/*
@@ -288,6 +298,7 @@
# if defined(HAVE_PROTO_BSDSOCKET_H) && \
(!defined(__amigaos4__) || defined(USE_AMISSL))
/* use bsdsocket.library directly, instead of libc networking functions */
+# define _SYS_MBUF_H /* m_len define clashes with curl */
# include <proto/bsdsocket.h>
# ifdef __amigaos4__
int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds,
diff --git a/libs/libcurl/src/dynbuf.h b/libs/libcurl/src/dynbuf.h
index b95412567f..8f85254cc0 100644
--- a/libs/libcurl/src/dynbuf.h
+++ b/libs/libcurl/src/dynbuf.h
@@ -81,8 +81,6 @@ int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save);
#define DYN_PAUSE_BUFFER (64 * 1024 * 1024)
#define DYN_HAXPROXY 2048
#define DYN_HTTP_REQUEST (1024*1024)
-#define DYN_H2_HEADERS (128*1024)
-#define DYN_H2_TRAILERS (128*1024)
#define DYN_APRINTF 8000000
#define DYN_RTSP_REQ_HEADER (64*1024)
#define DYN_TRAILERS (64*1024)
diff --git a/libs/libcurl/src/hostip.c b/libs/libcurl/src/hostip.c
index 04ac91437c..3b1b3f8877 100644
--- a/libs/libcurl/src/hostip.c
+++ b/libs/libcurl/src/hostip.c
@@ -557,6 +557,7 @@ static struct Curl_addrinfo *get_localhost6(int port, const char *name)
static struct Curl_addrinfo *get_localhost(int port, const char *name)
{
struct Curl_addrinfo *ca;
+ struct Curl_addrinfo *ca6;
const size_t ss_size = sizeof(struct sockaddr_in);
const size_t hostlen = strlen(name);
struct sockaddr_in sa;
@@ -583,8 +584,12 @@ static struct Curl_addrinfo *get_localhost(int port, const char *name)
memcpy(ca->ai_addr, &sa, ss_size);
ca->ai_canonname = (char *)ca->ai_addr + ss_size;
strcpy(ca->ai_canonname, name);
- ca->ai_next = get_localhost6(port, name);
- return ca;
+
+ ca6 = get_localhost6(port, name);
+ if(!ca6)
+ return ca;
+ ca6->ai_next = ca;
+ return ca6;
}
#ifdef ENABLE_IPV6
diff --git a/libs/libcurl/src/http.c b/libs/libcurl/src/http.c
index fcbbeddaaa..c0261b7cc5 100644
--- a/libs/libcurl/src/http.c
+++ b/libs/libcurl/src/http.c
@@ -1308,7 +1308,7 @@ CURLcode Curl_buffer_send(struct dynbuf *in,
|| IS_HTTPS_PROXY(conn->http_proxy.proxytype)
#endif
)
- && conn->httpversion != 20) {
+ && conn->httpversion < 20) {
/* Make sure this doesn't send more body bytes than what the max send
speed says. The request bytes do not count to the max speed.
*/
@@ -3380,6 +3380,9 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
}
}
+ if(data->req.upload_done)
+ Curl_conn_ev_data_done_send(data);
+
if((conn->httpversion >= 20) && data->req.upload_chunky)
/* upload_chunky was set above to set up the request in a chunky fashion,
but is disabled here again to avoid that the chunked encoded version is
@@ -4568,8 +4571,8 @@ CURLcode Curl_http_req_make(struct httpreq **preq,
if(!req->path)
goto out;
}
- Curl_dynhds_init(&req->headers, 0, DYN_H2_HEADERS);
- Curl_dynhds_init(&req->trailers, 0, DYN_H2_TRAILERS);
+ Curl_dynhds_init(&req->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&req->trailers, 0, DYN_HTTP_REQUEST);
result = CURLE_OK;
out:
@@ -4726,8 +4729,8 @@ CURLcode Curl_http_req_make2(struct httpreq **preq,
if(result)
goto out;
- Curl_dynhds_init(&req->headers, 0, DYN_H2_HEADERS);
- Curl_dynhds_init(&req->trailers, 0, DYN_H2_TRAILERS);
+ Curl_dynhds_init(&req->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&req->trailers, 0, DYN_HTTP_REQUEST);
result = CURLE_OK;
out:
@@ -4857,8 +4860,8 @@ CURLcode Curl_http_resp_make(struct http_resp **presp,
if(!resp->description)
goto out;
}
- Curl_dynhds_init(&resp->headers, 0, DYN_H2_HEADERS);
- Curl_dynhds_init(&resp->trailers, 0, DYN_H2_TRAILERS);
+ Curl_dynhds_init(&resp->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&resp->trailers, 0, DYN_HTTP_REQUEST);
result = CURLE_OK;
out:
diff --git a/libs/libcurl/src/http2.c b/libs/libcurl/src/http2.c
index 00a5b107c0..c5528019b8 100644
--- a/libs/libcurl/src/http2.c
+++ b/libs/libcurl/src/http2.c
@@ -252,7 +252,7 @@ static CURLcode http2_data_setup(struct Curl_cfilter *cf,
H2_STREAM_SEND_CHUNKS, BUFQ_OPT_NONE);
Curl_bufq_initp(&stream->recvbuf, &ctx->stream_bufcp,
H2_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
- Curl_dynhds_init(&stream->resp_trailers, 0, DYN_H2_TRAILERS);
+ Curl_dynhds_init(&stream->resp_trailers, 0, DYN_HTTP_REQUEST);
stream->resp_hds_len = 0;
stream->bodystarted = FALSE;
stream->status_code = -1;
@@ -2122,7 +2122,13 @@ static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data,
/* Call the nghttp2 send loop and flush to write ALL buffered data,
* headers and/or request body completely out to the network */
result = h2_progress_egress(cf, data);
- if(result == CURLE_AGAIN) {
+ /* if the stream has been closed in egress handling (nghttp2 does that
+ * when it does not like the headers, for example */
+ if(stream && stream->closed) {
+ nwritten = http2_handle_stream_close(cf, data, stream, err);
+ goto out;
+ }
+ else if(result == CURLE_AGAIN) {
blocked = 1;
}
else if(result) {
@@ -2130,14 +2136,14 @@ static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data,
nwritten = -1;
goto out;
}
- else if(!Curl_bufq_is_empty(&stream->sendbuf)) {
+ else if(stream && !Curl_bufq_is_empty(&stream->sendbuf)) {
/* although we wrote everything that nghttp2 wants to send now,
* there is data left in our stream send buffer unwritten. This may
* be due to the stream's HTTP/2 flow window being exhausted. */
blocked = 1;
}
- if(blocked) {
+ if(stream && blocked) {
/* Unable to send all data, due to connection blocked or H2 window
* exhaustion. Data is left in our stream buffer, or nghttp2's internal
* frame buffer or our network out buffer. */
diff --git a/libs/libcurl/src/http_proxy.c b/libs/libcurl/src/http_proxy.c
index 0d680832ab..c741b01261 100644
--- a/libs/libcurl/src/http_proxy.c
+++ b/libs/libcurl/src/http_proxy.c
@@ -71,7 +71,7 @@ static CURLcode http_proxy_cf_connect(struct Curl_cfilter *cf,
DEBUGF(LOG_CF(data, cf, "connect"));
connect_sub:
- result = cf->next->cft->connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
if(result || !*done)
return result;
@@ -181,7 +181,7 @@ static void http_proxy_cf_close(struct Curl_cfilter *cf,
ctx->cf_protocol = NULL;
}
if(cf->next)
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
}
diff --git a/libs/libcurl/src/libcurl.plist b/libs/libcurl/src/libcurl.plist
index 20247bd436..f1e86cc3a8 100644
--- a/libs/libcurl/src/libcurl.plist
+++ b/libs/libcurl/src/libcurl.plist
@@ -15,7 +15,7 @@
<string>se.curl.libcurl</string>
<key>CFBundleVersion</key>
- <string>8.2.0</string>
+ <string>8.2.1</string>
<key>CFBundleName</key>
<string>libcurl</string>
@@ -27,9 +27,9 @@
<string>????</string>
<key>CFBundleShortVersionString</key>
- <string>libcurl 8.2.0</string>
+ <string>libcurl 8.2.1</string>
<key>CFBundleGetInfoString</key>
- <string>libcurl.plist 8.2.0</string>
+ <string>libcurl.plist 8.2.1</string>
</dict>
</plist>
diff --git a/libs/libcurl/src/socks.c b/libs/libcurl/src/socks.c
index a390d10f17..c214a1746d 100644
--- a/libs/libcurl/src/socks.c
+++ b/libs/libcurl/src/socks.c
@@ -567,7 +567,6 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf,
*/
struct connectdata *conn = cf->conn;
unsigned char *socksreq = (unsigned char *)data->state.buffer;
- char dest[256] = "unknown"; /* printable hostname:port */
int idx;
CURLcode result;
CURLproxycode presult;
@@ -820,8 +819,8 @@ CONNECT_REQ_INIT:
/* FALLTHROUGH */
CONNECT_RESOLVED:
case CONNECT_RESOLVED: {
+ char dest[MAX_IPADR_LEN] = "unknown"; /* printable address */
struct Curl_addrinfo *hp = NULL;
- size_t destlen;
if(dns)
hp = dns->addr;
if(!hp) {
@@ -831,8 +830,6 @@ CONNECT_RESOLVED:
}
Curl_printable_address(hp, dest, sizeof(dest));
- destlen = strlen(dest);
- msnprintf(dest + destlen, sizeof(dest) - destlen, ":%d", sx->remote_port);
len = 0;
socksreq[len++] = 5; /* version (SOCKS5) */
@@ -848,7 +845,8 @@ CONNECT_RESOLVED:
socksreq[len++] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[i];
}
- infof(data, "SOCKS5 connect to IPv4 %s (locally resolved)", dest);
+ infof(data, "SOCKS5 connect to %s:%d (locally resolved)", dest,
+ sx->remote_port);
}
#ifdef ENABLE_IPV6
else if(hp->ai_family == AF_INET6) {
@@ -862,7 +860,8 @@ CONNECT_RESOLVED:
((unsigned char *)&saddr_in6->sin6_addr.s6_addr)[i];
}
- infof(data, "SOCKS5 connect to IPv6 %s (locally resolved)", dest);
+ infof(data, "SOCKS5 connect to [%s]:%d (locally resolved)", dest,
+ sx->remote_port);
}
#endif
else {
@@ -1115,7 +1114,7 @@ static CURLcode socks_proxy_cf_connect(struct Curl_cfilter *cf,
return CURLE_OK;
}
- result = cf->next->cft->connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
if(result || !*done)
return result;
@@ -1193,7 +1192,7 @@ static void socks_proxy_cf_close(struct Curl_cfilter *cf,
DEBUGASSERT(cf->next);
cf->connected = FALSE;
socks_proxy_cf_free(cf);
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
}
static void socks_proxy_cf_destroy(struct Curl_cfilter *cf,
diff --git a/libs/libcurl/src/transfer.c b/libs/libcurl/src/transfer.c
index 45c47e373c..4d466c145e 100644
--- a/libs/libcurl/src/transfer.c
+++ b/libs/libcurl/src/transfer.c
@@ -1558,10 +1558,6 @@ CURLcode Curl_follow(struct Curl_easy *data,
/* If this is not redirect due to a 401 or 407 response and an absolute
URL: don't allow a custom port number */
disallowport = TRUE;
- if(!data->set.allow_auth_to_other_hosts) {
- Curl_safefree(data->state.aptr.user);
- Curl_safefree(data->state.aptr.passwd);
- }
}
DEBUGASSERT(data->state.uh);
diff --git a/libs/libcurl/src/vquic/curl_ngtcp2.c b/libs/libcurl/src/vquic/curl_ngtcp2.c
index 41ed55a64a..50ca212a96 100644
--- a/libs/libcurl/src/vquic/curl_ngtcp2.c
+++ b/libs/libcurl/src/vquic/curl_ngtcp2.c
@@ -1835,6 +1835,8 @@ out:
*err = result;
sent = -1;
}
+ DEBUGF(LOG_CF(data, cf, "[h3sid=%" PRId64 "] cf_send(len=%zu) -> %zd, %d",
+ stream? stream->id : -1, len, sent, *err));
CF_DATA_RESTORE(cf, save);
return sent;
}
diff --git a/libs/libcurl/src/vquic/curl_quiche.c b/libs/libcurl/src/vquic/curl_quiche.c
index c587b13571..f6e995c6c5 100644
--- a/libs/libcurl/src/vquic/curl_quiche.c
+++ b/libs/libcurl/src/vquic/curl_quiche.c
@@ -329,7 +329,7 @@ static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf,
else {
DEBUGASSERT(data->multi);
for(sdata = data->multi->easyp; sdata; sdata = sdata->next) {
- if(H3_STREAM_ID(sdata) == stream3_id) {
+ if((sdata->conn == data->conn) && H3_STREAM_ID(sdata) == stream3_id) {
return sdata;
}
}
@@ -426,7 +426,7 @@ static ssize_t stream_resp_read(void *reader_ctx,
return nread;
}
else {
- *err = stream->resp_got_header? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+ *err = CURLE_AGAIN;
return -1;
}
}
@@ -457,8 +457,8 @@ static CURLcode cf_recv_body(struct Curl_cfilter *cf,
if(nwritten < 0 && result != CURLE_AGAIN) {
DEBUGF(LOG_CF(data, cf, "[h3sid=%"PRId64"] recv_body error %zd",
stream->id, nwritten));
- failf(data, "Error %zd in HTTP/3 response body for stream[%"PRId64"]",
- nwritten, stream->id);
+ failf(data, "Error %d in HTTP/3 response body for stream[%"PRId64"]",
+ result, stream->id);
stream->closed = TRUE;
stream->reset = TRUE;
stream->send_closed = TRUE;
@@ -591,8 +591,13 @@ static CURLcode cf_poll_events(struct Curl_cfilter *cf,
"for [h3sid=%"PRId64"] -> %d",
stream? stream->id : -1, cf_ev_name(ev),
stream3_id, result));
- quiche_h3_event_free(ev);
- return result;
+ if(data == sdata) {
+ /* Only report this error to the caller if it is about the
+ * transfer we were called with. Otherwise we fail a transfer
+ * due to a problem in another one. */
+ quiche_h3_event_free(ev);
+ return result;
+ }
}
quiche_h3_event_free(ev);
}
@@ -1147,10 +1152,8 @@ static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf,
(void)arg1;
(void)arg2;
switch(event) {
- case CF_CTRL_DATA_SETUP: {
- result = h3_data_setup(cf, data);
+ case CF_CTRL_DATA_SETUP:
break;
- }
case CF_CTRL_DATA_PAUSE:
result = h3_data_pause(cf, data, (arg1 != 0));
break;
@@ -1339,11 +1342,6 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf,
}
#endif
- /* we do not get a setup event for the initial transfer */
- result = h3_data_setup(cf, data);
- if(result)
- return result;
-
result = cf_flush_egress(cf, data);
if(result)
return result;
diff --git a/libs/libcurl/src/vtls/vtls.c b/libs/libcurl/src/vtls/vtls.c
index 20beeacb02..353775d46e 100644
--- a/libs/libcurl/src/vtls/vtls.c
+++ b/libs/libcurl/src/vtls/vtls.c
@@ -1504,7 +1504,7 @@ static void ssl_cf_close(struct Curl_cfilter *cf,
CF_DATA_SAVE(save, cf, data);
cf_close(cf, data);
- cf->next->cft->close(cf->next, data);
+ cf->next->cft->do_close(cf->next, data);
CF_DATA_RESTORE(cf, save);
}
@@ -1528,7 +1528,7 @@ static CURLcode ssl_cf_connect(struct Curl_cfilter *cf,
DEBUGASSERT(connssl);
DEBUGASSERT(cf->conn->host.name);
- result = cf->next->cft->connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
if(result || !*done)
goto out;
diff --git a/libs/libcurl/src/ws.c b/libs/libcurl/src/ws.c
index 47f26be9e6..41eb5d526d 100644
--- a/libs/libcurl/src/ws.c
+++ b/libs/libcurl/src/ws.c
@@ -970,10 +970,10 @@ static CURLcode ws_flush(struct Curl_easy *data, struct websocket *ws,
return CURLE_OK;
}
-CURL_EXTERN CURLcode curl_ws_send(struct Curl_easy *data, const void *buffer,
+CURL_EXTERN CURLcode curl_ws_send(CURL *data, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t totalsize,
- unsigned int sendflags)
+ curl_off_t fragsize,
+ unsigned int flags)
{
struct websocket *ws;
ssize_t nwritten, n;
@@ -997,7 +997,7 @@ CURL_EXTERN CURLcode curl_ws_send(struct Curl_easy *data, const void *buffer,
ws = data->conn->proto.ws;
if(data->set.ws_raw_mode) {
- if(totalsize || sendflags)
+ if(fragsize || flags)
return CURLE_BAD_FUNCTION_ARGUMENT;
if(!buflen)
/* nothing to do */
@@ -1030,10 +1030,10 @@ CURL_EXTERN CURLcode curl_ws_send(struct Curl_easy *data, const void *buffer,
if(space < 14)
return CURLE_AGAIN;
- if(sendflags & CURLWS_OFFSET) {
- if(totalsize) {
- /* a frame series 'totalsize' bytes big, this is the first */
- n = ws_enc_write_head(data, &ws->enc, sendflags, totalsize,
+ if(flags & CURLWS_OFFSET) {
+ if(fragsize) {
+ /* a frame series 'fragsize' bytes big, this is the first */
+ n = ws_enc_write_head(data, &ws->enc, flags, fragsize,
&ws->sendbuf, &result);
if(n < 0)
return result;
@@ -1047,7 +1047,7 @@ CURL_EXTERN CURLcode curl_ws_send(struct Curl_easy *data, const void *buffer,
}
}
else if(!ws->enc.payload_remain) {
- n = ws_enc_write_head(data, &ws->enc, sendflags, (curl_off_t)buflen,
+ n = ws_enc_write_head(data, &ws->enc, flags, (curl_off_t)buflen,
&ws->sendbuf, &result);
if(n < 0)
return result;
@@ -1112,15 +1112,15 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t framesize,
- unsigned int sendflags)
+ curl_off_t fragsize,
+ unsigned int flags)
{
(void)curl;
(void)buffer;
(void)buflen;
(void)sent;
- (void)framesize;
- (void)sendflags;
+ (void)fragsize;
+ (void)flags;
return CURLE_NOT_BUILT_IN;
}