]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
105 min agoGHA: update dependency ngtcp2/ngtcp2 to v1.23.0 master
renovate[bot] [Sun, 31 May 2026 12:18:28 +0000 (12:18 +0000)] 
GHA: update dependency ngtcp2/ngtcp2 to v1.23.0

Closes #21815

3 hours agoscorecard: add support for http: testing
Stefan Eissing [Fri, 29 May 2026 09:06:58 +0000 (11:06 +0200)] 
scorecard: add support for http: testing

Add option `--http-plain` to test against httpd without
using TLS.

Closes #21805

6 hours agoGHA: update dependency ngtcp2/nghttp3 to v1.16.0
renovate[bot] [Sun, 31 May 2026 08:46:34 +0000 (08:46 +0000)] 
GHA: update dependency ngtcp2/nghttp3 to v1.16.0

Closes #21814

2 days agoh3-proxy: disable frequently failing pytests
Viktor Szakats [Thu, 28 May 2026 20:37:40 +0000 (22:37 +0200)] 
h3-proxy: disable frequently failing pytests

- test_60_02_connect_tunnel_fail[fail_h1_over_h3_proxytunnel]
- test_60_02_connect_tunnel_fail[fail_h3_over_h2_proxytunnel]
- test_60_02_connect_tunnel_fail[fail_h3_over_h3_proxytunnel]
- test_60_03_h3_target_auto_connect_udp[proxy_h3]
- test_60_15_connect_timeout

Further flaky ones may be disabled in future commits.
All to be re-enabled after stabilizing them.

Follow-up to 59213f8248cfc10e97a6a23f5e4da9b1e5057400 #21789
Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21803

2 days agoh3-proxy: fix callback return values, and a typo in tests
Viktor Szakats [Thu, 28 May 2026 20:22:32 +0000 (22:22 +0200)] 
h3-proxy: fix callback return values, and a typo in tests

- replace literal -1 with `NGHTTP3_ERR_CALLBACK_FAILURE` in nghttp3
  callback.
- replace `NGHTTP3_ERR_CALLBACK_FAILURE` with
  `NGTCP2_ERR_CALLBACK_FAILURE` in ngtcp2 callbacks.
- test_60_h3_proxy: fix non-critical typo in symbol.

Spotted by GitHub Code Quality

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21802

3 days agohttp: don't pass on set cookies to new origins
Daniel Stenberg [Thu, 28 May 2026 08:14:08 +0000 (10:14 +0200)] 
http: don't pass on set cookies to new origins

Verified by test 2015

Reported-by: azraelxuemo on hackerone
Closes #21794

3 days agoh3: fix signedness of two printf masks
Viktor Szakats [Thu, 28 May 2026 15:19:23 +0000 (17:19 +0200)] 
h3: fix signedness of two printf masks

Follow-up to c2ca16f3ff2ad8300e67ea5a3cc4060738473e45 #21799

3 days agoh3: sync printf masks with types, drop two casts
Viktor Szakats [Thu, 28 May 2026 14:18:21 +0000 (16:18 +0200)] 
h3: sync printf masks with types, drop two casts

Also fix `nwritten` signedness in `cb_h3_read_req_body()`.

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153
Ref: #20848

Closes #21799

3 days agoh3-proxy: fixes around H3 proxy
Stefan Eissing [Wed, 27 May 2026 14:50:18 +0000 (16:50 +0200)] 
h3-proxy: fixes around H3 proxy

code:
- less exception handling in existing code
- true ip happy eyeballing
- enable certificate verification
- cf-h2-proxy: abort connection when server closed connection

tests:
- remove all --insecure and --proxy-insecure args
- make session reuse test_60_12 a working one
- resolve port conflicts between h2o and nghttpx
- use proxy args better
- make test_60_06 run shorter
- kill h2o at the end of tests, normal stop takes too long

Ref: 59213f8248cfc10e97a6a23f5e4da9b1e5057400 #21789
Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21798

3 days agoGHA: enable H3 proxy in CI, also enable h2o tests on Linux
Viktor Szakats [Wed, 27 May 2026 21:56:50 +0000 (23:56 +0200)] 
GHA: enable H3 proxy in CI, also enable h2o tests on Linux

Also:
- GHA/http3-linux: enable deprecated APIs in openssl-prev local
  OpenSSL builds. Required by h2o and its vendored dependencies.
  Tried OpenSSL 4, LibreSSL 4.x, BoringSSL: all failed at one point.
- GHA/http3-linux: build h2o from source.
  libuv1-dev may not be stricly required.
  Tried installing libwslay-dev, but it wasn't recognized.
  Also disable building h2o libs for a much smaller dist directory and
  slightly faster build.
  Sadly, h2o is not versioned, so I pinned to the current latest commit
  at the master branch. It advertises itself as 2.3.0-DEV in pytest.
- drop redundant `libnghttp3` installs. Remains of openssl-quic builds.
  Follow-up to 6aaac9dd388a64d0f511544496608693e1105d13 #20226

Note GHA/macos pytests may or not not be stable with the H3 proxy tests.

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21789

3 days agoh3-proxy: rename feature 'Proxy/PROXY-HTTP3' to 'proxy-HTTP3'
Viktor Szakats [Wed, 27 May 2026 21:50:45 +0000 (23:50 +0200)] 
h3-proxy: rename feature 'Proxy/PROXY-HTTP3' to 'proxy-HTTP3'

For consistency and to follow existing 'HTTPS-proxy' (with lowercase
'proxy') feature tag more closely.

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21796

3 days agobuild: say 'experimental' in option descriptions
Viktor Szakats [Wed, 27 May 2026 21:43:27 +0000 (23:43 +0200)] 
build: say 'experimental' in option descriptions

Also:
- INSTALL-CMAKE.md: alpha-sort enable options.
- cmake: sync a description between source and docs.

Closes #21795

3 days agotests/http: fix HTTP/3 proxy pytest failures with h2o
Aritra Basu [Thu, 28 May 2026 00:35:44 +0000 (20:35 -0400)] 
tests/http: fix HTTP/3 proxy pytest failures with h2o

Fix pytest failures in HTTP/3 proxy tests when h2o is not installed,
misconfigured, or fails to start at runtime.

This prevents:
- FileNotFoundError when h2o document root does not exist
- Fixture setup errors when h2o is configured but cannot start
- Unused test data file creation when h2o is absent or broken
- CI aborts on systems where h2o exists but is not runnable

Bug: https://github.com/curl/curl/pull/21789#issuecomment-4559098879
Bug: https://github.com/curl/curl/pull/21789#issuecomment-4559161907

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21791

3 days agotidy-up: add space around operators, where missing
Viktor Szakats [Thu, 28 May 2026 07:23:27 +0000 (09:23 +0200)] 
tidy-up: add space around operators, where missing

Closes #21793

3 days agoGHA: update dependency google/boringssl to v0.20260526.0
renovate[bot] [Thu, 28 May 2026 05:06:20 +0000 (05:06 +0000)] 
GHA: update dependency google/boringssl to v0.20260526.0

Closes #21790

3 days agourlapi: fix an issue parsing file URLs
tiymat [Wed, 27 May 2026 03:14:31 +0000 (00:44 -0230)] 
urlapi: fix an issue parsing file URLs

Fixes #21743
Closes #21764

3 days agocf-socket: set scope_id for IPv6 link-local addresses
ambikeesshh [Fri, 22 May 2026 18:57:18 +0000 (00:27 +0530)] 
cf-socket: set scope_id for IPv6 link-local addresses

When connecting to an mDNS hostname that resolves to an IPv6 link-local
address, connect() fails with EINVAL because sin6_scope_id is 0. This is
a regression since 8.20.0 where the threaded resolver started splitting
A and AAAA queries into separate getaddrinfo calls. The AAAA-only call
with PF_INET6 may not set scope_id on systems where the same call with
PF_UNSPEC did.

When the resolver does not provide scope_id for a link-local address,
try to determine it from the system's network interfaces using
getifaddrs(). Also add scope_id to verbose connect output so the value
can be seen in curl -v logs.

Built and tested locally on Linux. checksrc passes.

Fixes #21669
Reported-by: Bartel Sielski
Closes #21728

3 days agotftp: avoid the timeout calc if the timeout is crazy
Daniel Stenberg [Wed, 27 May 2026 21:37:12 +0000 (23:37 +0200)] 
tftp: avoid the timeout calc if the timeout is crazy

Avoids integer overflow when a silly value is set.

Fixes #21782
Reported-by: Mike-menny on github
Closes #21787

3 days agounit3400: repair after capsule_encap_udp_hdr went static
Daniel Stenberg [Wed, 27 May 2026 21:55:14 +0000 (23:55 +0200)] 
unit3400: repair after capsule_encap_udp_hdr went static

Access the static function with UNITTEST as designed.

Follow-up to 73c2b4b4355aab3156

Closes #21788

3 days agotidy-up: apply clang-format fixes
Viktor Szakats [Wed, 27 May 2026 16:00:46 +0000 (18:00 +0200)] 
tidy-up: apply clang-format fixes

To lib, vtls/vauth, vtls/vquic, lib/vtls.

Also:
- unit3400: drop redundant `(void)arg`.
  Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153
- fix comment typos.

Closes #21786

3 days agopytest: re-enable test test_05_01 and test_05_02 for quiche 0.29.0+
Viktor Szakats [Wed, 27 May 2026 20:40:50 +0000 (22:40 +0200)] 
pytest: re-enable test test_05_01 and test_05_02 for quiche 0.29.0+

The upstream issue seems to have been fixed or mitigated in quiche
v0.29.0. Though the original upstream report and patch remain open at
the time of writing this.

Ref: https://github.com/cloudflare/quiche/issues/2277
Ref: https://github.com/cloudflare/quiche/pull/2278

Follow-up to 252b82f693574e884fb36dfde9371b409716a0fc #21730
Follow-up to 91b422d356a52d32708c02514d8ede66363e8847 #20952
Follow-up to 14478429e71ef0eee6d12b73113e9ff8e3ae9e75 #19916

Closes #21784

3 days agom4: drop redundant conditions in TLS library detections
Viktor Szakats [Wed, 27 May 2026 16:39:10 +0000 (18:39 +0200)] 
m4: drop redundant conditions in TLS library detections

Omit checking `OPT_<BACKEND>` against `no` twice.

Also:
- openssl: drop stray `OPT_OPENSSL=off` check.
  Follow-up to 68d89f242cf9f6326e3b2f6fe119b7c74ef41c66 #6897
- rustls: drop no-op line.
  Follow-up to 9c4209837094781d5eef69ae6bcad0e86b64bf99 #13202
- gnutls: fix casing in comment.
- merge `if` branches where possible after these changes.

Closes #21781

3 days agolib1560: fix to propagate failure from `get_nothing()`
Viktor Szakats [Wed, 27 May 2026 16:06:51 +0000 (18:06 +0200)] 
lib1560: fix to propagate failure from `get_nothing()`

Also:
- check `curl_url()` for NULL where missing.
- free memory `curl_url_get()` return pointer where missing.
- propagate `curl_url_set()` errors in `clear_url()`, where missing.
- add missing NULL-check before `strcmp()` in `clear_url()`.

Closes #21780

3 days agocapsule: make capsule_encap_udp_hdr static
Daniel Stenberg [Wed, 27 May 2026 13:50:19 +0000 (15:50 +0200)] 
capsule: make capsule_encap_udp_hdr static

And drop the Curl_ prefix.

Closes #21777

3 days agocreds: remove two unused functions
Daniel Stenberg [Wed, 27 May 2026 13:45:50 +0000 (15:45 +0200)] 
creds: remove two unused functions

Curl_creds_same_user and Curl_creds_same_password

Closes #21776

3 days agohttp_proxy: make two proxy_create functions static
Daniel Stenberg [Wed, 27 May 2026 13:42:27 +0000 (15:42 +0200)] 
http_proxy: make two proxy_create functions static

And drop their `Curl_` prefixes. They are only used within this file.

Closes #21775

3 days agodnscache: remove Curl_dns_entry_link
Daniel Stenberg [Wed, 27 May 2026 13:40:12 +0000 (15:40 +0200)] 
dnscache: remove Curl_dns_entry_link

Unused function

Closes #21774

3 days agocf-h3-proxy.c: bring back include
Daniel Stenberg [Wed, 27 May 2026 20:56:01 +0000 (22:56 +0200)] 
cf-h3-proxy.c: bring back include

Without it, it breaks regular (non-unity) builds.

Fix regression from 7e1001bcd69967707c

Closes #21785

3 days agoGHA: update dependency cloudflare/quiche to v0.29.1
renovate[bot] [Wed, 27 May 2026 19:51:17 +0000 (19:51 +0000)] 
GHA: update dependency cloudflare/quiche to v0.29.1

Closes #21783

4 days agoautotools: mbedtls detection fixes
Viktor Szakats [Fri, 22 May 2026 23:05:10 +0000 (01:05 +0200)] 
autotools: mbedtls detection fixes

- fix symbol used for first-round detection.
- skip detecting mbedtls on custom path if custom path was not supplied.

Reported-by: Ross Burton
Fixes #21727

Closes #21729

4 days agovtls: more large buffer support and error checks for SHA-256
Viktor Szakats [Wed, 27 May 2026 08:06:34 +0000 (10:06 +0200)] 
vtls: more large buffer support and error checks for SHA-256

- gnutls: support 4GiB+ SHA-256 digest inputs.
- openssl: check success of low-level update/finish digest calls.
- openssl: pass NULL to `EVP_DigestFinal_ex()` instead of discarding
  returned value.
- wolfssl: support 4GiB+ SHA-256 digest inputs.
- wolfssl: check success of low-level update/finish digest calls.
- sync and tidy up argument names in low-level sha256_sum functions.

Closes #21771

4 days agoschannel: check `schannel_sha256sum()` success, and more
Viktor Szakats [Sun, 24 May 2026 12:55:05 +0000 (14:55 +0200)] 
schannel: check `schannel_sha256sum()` success, and more

Also:
- support 4GiB+ SHA-256 digest inputs.
- check `CryptGetHashParam()` output size.
- avoid overwriting existing digest when new digest calculation fails.
- avoid adding digest hash element on failure.

Closes #21739

4 days agocurl_sha512_256: fix result code on error
Viktor Szakats [Wed, 27 May 2026 08:21:24 +0000 (10:21 +0200)] 
curl_sha512_256: fix result code on error

Replace result code `CURLE_SSL_CIPHER` with
`CURLE_BAD_FUNCTION_ARGUMENT` in case of a low-level digest function
fails. Functionality is related to vauth, not SSL, and the operation is
a digest, not a cipher.

Also fix a indentation.

Follow-up to 05268cf801a193b68411cfa298413c3e5ca79d4f #13070

Closes #21767

4 days agovtls_spack: drop redundant macro fallbacks
Viktor Szakats [Wed, 27 May 2026 08:24:40 +0000 (10:24 +0200)] 
vtls_spack: drop redundant macro fallbacks

For `UINT16_MAX` and `UINT32_MAX`. They are used in other sources
without this fallback.

Closes #21768

4 days agoINSTALL-CMAKE.md: document `H2O` config variable
Viktor Szakats [Wed, 27 May 2026 08:30:18 +0000 (10:30 +0200)] 
INSTALL-CMAKE.md: document `H2O` config variable

Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153

Closes #21769

4 days agotidy-up: miscellaneous
Viktor Szakats [Wed, 20 May 2026 10:20:10 +0000 (12:20 +0200)] 
tidy-up: miscellaneous

- H3 proxy: re-sync code with original source `curl_ngtcp2.c` to reduce
  differences, and to apply missed minor fixes. Also apply clang-format.
  Drop redundant `#undef`s, casts, `#endif` comments, includes, drop
  intermediate variables, sync include and macro order.
  Follow-up to e78b1b3eccfa6a2e367a1225ea1b66dafcdac3c4 #21153
- INSTALL-CMAKE.md: move `CURL_ENABLE_SMB` to the enable section.
- tests/http/env: rename `tcpdmp` to `tcpdump` to match object variable.
- mbedtls: drop incorrect `mbedTLS 4+` comments.
  (features are also supported by 3+, meaning it's always supported.)
- lib1648: rename a variable to match purpose.
- CIPHERS.md: alpha-sort link list.
- replace rare `X''` hex markup with `0x`.
- `IP v4/6` -> `IPv4/6`.
- 'version X.Y' -> 'vX.Y', where sensible.
- 'VX.Y' -> 'vX.Y', where sensible.
- fix indents, casing, newlines, typos.

Closes #21772

4 days agocf-h3-proxy: add SSL flag
Stefan Eissing [Wed, 27 May 2026 08:36:22 +0000 (10:36 +0200)] 
cf-h3-proxy: add SSL flag

Since the proxy filter does TLS, it needs to set the SSL flag.

Follow-up to e78b1b3eccfa6a2e3
Closes #21770

Spotted by Codex Security

4 days agocontent_encoding: timeout during slow decoding
Stefan Eissing [Tue, 26 May 2026 13:59:09 +0000 (15:59 +0200)] 
content_encoding: timeout during slow decoding

Check during transfer/content decoding for every MB or so, if the
transfer has reached its overall time limit. Error out if so.

This is mainly a protectin against compression bombs using way more time
than the transfer is allowed to. Normal compression ratios are unlikely
to benefit as they need more upstream data where the timeout handling is
already in place.

Fixes #21603
Reported-by: Joshua Rogers
Closes #21758

4 days agocontent_encoding: fix limit failure message
Stefan Eissing [Tue, 26 May 2026 13:27:22 +0000 (15:27 +0200)] 
content_encoding: fix limit failure message

The message triggered earlier than intended and did not take the
transfer/content type into account.

Ref #21603
Reported-by: Joshua Rogers
Closes #21756

4 days agourlapi: forbid '|' in host
tiymat [Wed, 27 May 2026 01:05:27 +0000 (22:35 -0230)] 
urlapi: forbid '|' in host

Closes #21762

4 days agogtls: use the correct return code in trace output
Daniel Stenberg [Wed, 27 May 2026 07:26:41 +0000 (09:26 +0200)] 
gtls: use the correct return code in trace output

Instead of using a hard-coded zero.

Spotted by Copilot

Closes #21766

4 days agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 27 May 2026 07:06:55 +0000 (09:06 +0200)] 
RELEASE-NOTES: synced

4 days agogtls: fix ignored return and uninitialized status in OCSP check
Joshua Rogers [Tue, 19 May 2026 14:16:12 +0000 (16:16 +0200)] 
gtls: fix ignored return and uninitialized status in OCSP check

gnutls_ocsp_resp_get_single() was called with (void) discarding its
return value, so a failure (e.g. an OCSP response with no
SingleResponse entries) went undetected.  The following switch() then
read an uninitialized gnutls_ocsp_cert_status_t, which is undefined
behaviour and could yield GNUTLS_OCSP_CERT_GOOD (0) depending on
stack contents, causing gtls_verify_ocsp_status to return CURLE_OK for
a response that was never successfully parsed.

Fix by initializing status to GNUTLS_OCSP_CERT_UNKNOWN and treating a
negative return from gnutls_ocsp_resp_get_single as an error.

Closes #21679

4 days agoHTTP/3: add proxy CONNECT and MASQUE CONNECT-UDP support (ngtcp2 QUIC)
Aritra Basu [Mon, 27 Apr 2026 23:35:38 +0000 (19:35 -0400)] 
HTTP/3: add proxy CONNECT and MASQUE CONNECT-UDP support (ngtcp2 QUIC)

This patch adds two major proxy capabilities to curl (ngtcp2 QUIC):
- HTTP/3 Proxy CONNECT: Tunnel HTTP/1.1 or HTTP/2 traffic through an
  HTTPS proxy that speaks HTTP/3 (QUIC) using the standard CONNECT
  method over an HTTP/3 connection.
- MASQUE CONNECT-UDP: Tunnel HTTP/3 (QUIC) traffic through an HTTP
  proxy (speaking HTTP/1.1, HTTP/2, or HTTP/3) using the extended
  CONNECT method with the CONNECT-UDP protocol (RFC9297 & RFC9298).

Public API additions:
- `CURLPROXY_HTTPS3`: new proxy type constant for HTTP/3 proxy
- `--proxy-http3`: new CLI flag to negotiate HTTP/3 with HTTPS proxy

The implementation adds two new filters:
- `H3-PROXY` - enables negotiating HTTP/3 (QUIC) to the proxy and
  running CONNECT/CONNECT-UDP through that proxy transport.
- `CAPSULE` - dedicated filter inserted between QUIC transport and
  HTTP-PROXY to handle datagram capsule encapsulation/decapsulation.

Here is how the curl filter chaining looks in different scenarios:
- HTTP/3 Proxy CONNECT (tunneling TCP protocols over QUIC proxy):
  conn -> HTTP/1.1 or HTTP/2  -> SSL -> HTTP-PROXY ->
                                 H3-PROXY -> HAPPY-EYEBALLS -> UDP
- MASQUE CONNECT-UDP (tunneling QUIC over any proxy):
  conn -> HTTP/3 -> CAPSULE -> HTTP-PROXY -> H3-PROXY ->
                               HAPPY-EYEBALLS -> UDP
  conn -> HTTP/3 -> CAPSULE -> HTTP-PROXY -> H1-PROXY or H2-PROXY ->
                               SSL -> HAPPY-EYEBALLS -> TCP

- Both features currently require the ngtcp2 QUIC backend.
- Both features are experimental (disabled by default). Enable with
  `--enable-proxy-http3`(autotools) or `-DUSE_PROXY_HTTP3=ON`(CMake).

Tests:
- tests/unit/unit3400.c: Unit tests for capsule protocol encode/decode
- tests/http/test_60_h3_proxy.py: Comprehensive pytest integration suite
- tests/http/testenv/h2o.py: Managing h2o instances with HTTP/1.1, HTTP/2,
  and HTTP/3 (QUIC) listeners, proxy.connect and proxy.connect-udp enabled.

References:
  RFC 9297 - HTTP Datagrams and the Capsule Protocol
  RFC 9298 - Proxying UDP in HTTP
  RFC 9000 Â§16 â€” Variable-Length Integer Encoding

Signed-off-by: Aritra Basu <aritrbas+gh@cisco.com>
Closes #21153

4 days agoGHA: fix locale tests on macOS, extend to verify test 1981
Viktor Szakats [Tue, 26 May 2026 09:40:15 +0000 (11:40 +0200)] 
GHA: fix locale tests on macOS, extend to verify test 1981

- fix macOS locale tests to clear existing variables.
  (Without this, the system-defined `LC_ALL` takes precedence, and
  the custom envs in CI are ignored.)

- trigger test 1981 issue by setting `LC_TIME` to non-English, on macOS.
  (On Linux it'd require explicitly installing a non-English locale, I
  skipped this for simplicity.)
  ```
  [...]
  -Time: 01/Aug/2025 08:31:43.037103 +0000 UTC[CR][LF]
  +Time: 01/ao%c3%bb/2025 08:31:43.037103 +0000 UTC[CR][LF]
  [...]
  FAIL 1981: '%time output with --write-out' HTTP, HTTP GET
  ```
  Follow-up to 90a7732d467eae7c5a59fc07c5a072970926f8c6 #21749

Follow-up to 1cc8a5235f76e744433cbf28ec98ecb972158387 #17988
Follow-up to c221c0ee5935497168c52686a9d8cc87b45bbca9 #17938

Closes #21753

4 days agoINSTALL-CMAKE.md: drop two obsolete sections
Viktor Szakats [Tue, 26 May 2026 19:32:19 +0000 (21:32 +0200)] 
INSTALL-CMAKE.md: drop two obsolete sections

Follow-up to 89043ba90689418a115e967633e261139b48ce23 #20407

Closes #21761

4 days agoGHA: verify tarball downloads
Viktor Szakats [Tue, 26 May 2026 13:56:27 +0000 (15:56 +0200)] 
GHA: verify tarball downloads

Detect latest tarball version via the https://curl.se/downloads.html
page, download the signing key from a public keyserver then verify
source download signatures.

To ensure that public downloads are intact.

Closes #21759

4 days agoGHA: require HTTPS protocol in redirections (where missing)
Viktor Szakats [Tue, 26 May 2026 13:59:18 +0000 (15:59 +0200)] 
GHA: require HTTPS protocol in redirections (where missing)

Also:
- drop following redirects on `openldap.org`.

Closes #21757

4 days agotest1981: explicitly set the locale
Stefan Eissing [Tue, 26 May 2026 08:25:22 +0000 (10:25 +0200)] 
test1981: explicitly set the locale

Otherwise we may get a different month name in the output.

Closes #21749

5 days agoGHA: bump LibreSSL to 4.3.2
Viktor Szakats [Tue, 26 May 2026 11:22:20 +0000 (13:22 +0200)] 
GHA: bump LibreSSL to 4.3.2

Also switch back to ftp.openbsd.org download server. More often than not
the GitHub release entry is missing the download artifacts at the time
of detecting a new version, breaking automatic bumps. We cache the
download so it does not bang the origin server with many requests.

Follow-up to 800b0bec18e9c77e35912fac8321c791d7b57863 #19082
Closes #21742
Closes #21754

5 days agoGnuTLS: require 3.7.2 for earlydata
Stefan Eissing [Tue, 26 May 2026 09:25:01 +0000 (11:25 +0200)] 
GnuTLS: require 3.7.2 for earlydata

Since all API features we need for TLSv1.3 earlydata support do exist
only from version 3.7.2 onwards, make that the minimal version required.

Fixes #21750
Reported-by: Johannes Schlatow
Closes #21751

5 days agomulti_ev: silence clang-tidy nonsense
Stefan Eissing [Tue, 26 May 2026 09:38:25 +0000 (11:38 +0200)] 
multi_ev: silence clang-tidy nonsense

About a "unnecessary define" - my ass.

Closes #21752

5 days agodocs: fix odd wording in CONTRIBUTE.md
mik [Thu, 21 May 2026 08:25:49 +0000 (10:25 +0200)] 
docs: fix odd wording in CONTRIBUTE.md

Found with AI assistance, verified manually

Closes #21705

5 days agomulti: handle pause in multi socket callback
Daniel Stenberg [Tue, 26 May 2026 07:52:19 +0000 (09:52 +0200)] 
multi: handle pause in multi socket callback

The mev_sh_entry object might be removed if curl_easy_pause() is called
from within the socket callback.

Introduced a 'magic' struct field to to 'mev_sh_entry' to make it easier
to programmatically detect/assert if the pointer is bad - in debug
builds.

Reported-by: Joshua Rogers
Closes #21748

5 days agotransfer: clear referer when set to NULL
Daniel Stenberg [Mon, 25 May 2026 14:43:00 +0000 (16:43 +0200)] 
transfer: clear referer when set to NULL

Verify in test 1649

Closes #21741

5 days agoVULN-DISCLOSURE-POLICY.md: emphasize the no email thank you part
Daniel Stenberg [Tue, 26 May 2026 07:09:24 +0000 (09:09 +0200)] 
VULN-DISCLOSURE-POLICY.md: emphasize the no email thank you part

Closes #21747

6 days agoldap: switch of chasing referrals
Stefan Eissing [Sat, 23 May 2026 12:40:55 +0000 (14:40 +0200)] 
ldap: switch of chasing referrals

It is switched off in the OpenLDAP backend, so we should do the
same here.

Follow-up to cdc1da912066535680f02eb31

Closes #21732

6 days agolibssh: map SSH_KNOWN_HOSTS_OTHER to CURLKHMATCH_MISMATCH
Joshua Rogers [Fri, 22 May 2026 07:48:15 +0000 (09:48 +0200)] 
libssh: map SSH_KNOWN_HOSTS_OTHER to CURLKHMATCH_MISMATCH

Host key type mismatch from libssh was incorrectly reported as missing,
causing key callbacks to accept instead of reject.

Reported by: Joshua Rogers (Aisle Research)
Closes #21724

7 days agoGHA/http3-linux: fixup quiche cache
Viktor Szakats [Sun, 24 May 2026 13:12:54 +0000 (15:12 +0200)] 
GHA/http3-linux: fixup quiche cache

Closes #21740

7 days agoquiche: bump cloudflare/quiche to v0.29.0, update pytest workaround
Viktor Szakats [Sat, 23 May 2026 09:05:27 +0000 (11:05 +0200)] 
quiche: bump cloudflare/quiche to v0.29.0, update pytest workaround

Also:
- drop no longer necessary quiche build workaround.
- update build for boringssl's new location (since v0.29.0, it's no
  longer vendored) within the quiche tree.
- move boringssl install dir out of quiche tree, and shorten it.

Ref: https://github.com/cloudflare/quiche/issues/2277
Ref: https://github.com/cloudflare/quiche/pull/2278
Ref: #21620

Closes #21730

7 days agomailmap: cmeister2@gmail is primary for Max Dymond
Max Dymond [Sun, 24 May 2026 09:22:21 +0000 (10:22 +0100)] 
mailmap: cmeister2@gmail is primary for Max Dymond

I'd rather all my commits be attributed to cmeister2@gmail.com instead
of anything else; especially not my old Microsoft email address!

Closes #21735

7 days agoKNOWN_BUGS: remove stale Threads::Threads entry
Max Dymond [Sun, 24 May 2026 08:02:33 +0000 (09:02 +0100)] 
KNOWN_BUGS: remove stale Threads::Threads entry

The old CMake bug about exporting -lpthread instead of Threads::Threads
no longer matches current master. As of 2d546d239ecd455b6459e68b85ef8d4b045c0a00
("cmake: use Threads::Threads imported target for POSIX Threads"),
the build now uses Threads::Threads and the generated CMake package
config resolves the dependency explicitly, so this KNOWN_BUGS entry is stale.

Closes #21734

9 days agoschannel: error on TLS 1.3-only with cipher list
Joshua Rogers [Fri, 22 May 2026 07:59:17 +0000 (09:59 +0200)] 
schannel: error on TLS 1.3-only with cipher list

The legacy SCHANNEL_CRED path cannot negotiate TLS 1.3. When TLS 1.3
is the only enabled protocol and a cipher list is set, fail instead of
silently downgrading to TLS 1.2.

Fixes https://github.com/curl/curl/issues/21702
Closes https://github.com/curl/curl/pull/21725

9 days agoCIPHERS.md: fix the example that uses only TLS 1.3
Jay Satiro [Thu, 21 May 2026 18:00:09 +0000 (14:00 -0400)] 
CIPHERS.md: fix the example that uses only TLS 1.3

- Add --tls-max 1.3 to set the maximum version to TLS 1.3.

- Remove Schannel because it doesn't support TLS 1.3 ciphers since
  6238888.

Prior to this change the example set the minimum version to TLS 1.3 but
not the maximum version to TLS 1.3.

Ref: https://github.com/curl/curl/issues/21702

Closes https://github.com/curl/curl/pull/21719

9 days agongtcp2: fail handshake directly
Stefan Eissing [Thu, 21 May 2026 12:21:59 +0000 (14:21 +0200)] 
ngtcp2: fail handshake directly

When certificate verification fails, error out of the handshake
callback, forcing ngtcp2 to stop processing the connection any further.

Closes #21712

9 days agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 22 May 2026 07:48:59 +0000 (09:48 +0200)] 
RELEASE-NOTES: synced

9 days agohttp2: remove stream dependency tracking
Stefan Eissing [Fri, 22 May 2026 07:11:41 +0000 (09:11 +0200)] 
http2: remove stream dependency tracking

The HTTP/2 feature is deprecated, few servers implement it and our
implementation is complicated by its state management. Make the two
CURLOPT_* involved a nop and deprecate them.

Closes #21723

9 days agoKNOWN_BUGS.md: remove fixed GnuTLS <-> OpenSSL incompat bug
11soda11 [Thu, 21 May 2026 22:03:51 +0000 (00:03 +0200)] 
KNOWN_BUGS.md: remove fixed GnuTLS <-> OpenSSL incompat bug

The entry is about GnuTLS not sending the client cert when it doesn't
match the `DN` the server requested.  OpenSSL does the opposite.

The issue was already fixed by #4958 and removed from KNOWN_BUGS,
but it was added back to the list by #16677, seemingly by mistake.

The issue is still fixed for GnuTLS >= 3.5.0.
As curl only supports GnuTLS >= 3.6.5, remove the bug entry from
KNOWN_BUGS.md

Fixes #21720
Closes #21722

9 days agourlapi: fix redirect handling if CURLU_NO_GUESS_SCHEME is set
Daniel Stenberg [Thu, 21 May 2026 21:00:55 +0000 (23:00 +0200)] 
urlapi: fix redirect handling if CURLU_NO_GUESS_SCHEME is set

Verified by test 1967

Reported-by: Joshua Rogers
Closes #21721

9 days agoGHA/checksrc: add auditor-level zizmor (warning-only)
Viktor Szakats [Thu, 21 May 2026 17:09:35 +0000 (19:09 +0200)] 
GHA/checksrc: add auditor-level zizmor (warning-only)

CI time cost is 1s.

It may replace existing pedantic check, if this level isn't bringing
false-positives or annoyance. Officially it's not meant for CI, but curl
has been passing this in the last couple of months when checked locally.

Closes #21718

10 days agounits: tidy up begin/end blocks
Viktor Szakats [Thu, 21 May 2026 02:21:33 +0000 (04:21 +0200)] 
units: tidy up begin/end blocks

- use `UNITTEST_BEGIN_SIMPLE`/`UNITTEST_END_SIMPLE` where missing.
- drop redundant `(void)arg;` where using `UNITTEST_BEGIN*`.
- unit1636: drop redundant block after `UNITTEST_BEGIN*`.
- unit1609: fix typo in comment.
- unit1627: merge to `if`s.

Closes #21715

10 days agomulti: silence gcc 16 `-Wnull-dereference`, bump CI job to test
Viktor Szakats [Thu, 21 May 2026 09:16:49 +0000 (11:16 +0200)] 
multi: silence gcc 16 `-Wnull-dereference`, bump CI job to test

- GHA/windows: bump dl-mingw job from gcc 15 to 16.

- multi: silence warning while building libcurlu:
  ```
  In function 'multi_ischanged',
      inlined from 'multi_socket.isra' at D:/a/curl/curl/lib/multi.c:3282:6:
  D:/a/curl/curl/lib/multi.c:1710:17: error: null pointer dereference [-Werror=null-dereference]
   1710 |   bool retval = (bool)multi->recheckstate;
        |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
  D:/a/curl/curl/lib/multi.c:1712:25: error: null pointer dereference [-Werror=null-dereference]
   1712 |     multi->recheckstate = FALSE;
        |                         ^
  ```
  Ref: https://github.com/curl/curl/actions/runs/26217071531/job/77142119137?pr=21707

- multi: silence another `-Wnull-dereference`, popping up in libcurl
  with gcc 13 after the previous silencing:
  ```
  In function 'Curl_multi_xfers_running',
      inlined from 'multi_socket.isra' at ../../lib/multi.c:3292:28:
  ../../lib/multi.c:4132:15: error: null pointer dereference [-Werror=null-dereference]
   4132 |   return multi->xfers_alive;
        |          ~~~~~^~~~~~~~~~~~~
  ```
  Ref: https://github.com/curl/curl/actions/runs/26218822231/job/77148186045

- multi: also add `DEBUGASSERT(multi)` to the two updated functions.

Closes #21707

10 days agocmake: opt in `MSVC_VERSION` 1951 to picky warnings
Viktor Szakats [Thu, 21 May 2026 12:58:11 +0000 (14:58 +0200)] 
cmake: opt in `MSVC_VERSION` 1951 to picky warnings

Closes #21714

10 days agoGHA/windows: bump windows-2025 runners to windows-2025-vs2026
Viktor Szakats [Thu, 21 May 2026 12:49:31 +0000 (14:49 +0200)] 
GHA/windows: bump windows-2025 runners to windows-2025-vs2026

To silence:
```
NOTICE: windows-2025 requests are being redirected to windows-2025-vs2026 by June 15, 2026
```

Closes #21713

10 days agoGHA: simplify boolean `if` comparisons
Viktor Szakats [Thu, 21 May 2026 09:28:58 +0000 (11:28 +0200)] 
GHA: simplify boolean `if` comparisons

Closes #21709

10 days agotest1185: fix to previous commit
Viktor Szakats [Thu, 21 May 2026 09:24:15 +0000 (11:24 +0200)] 
test1185: fix to previous commit

Follow-up to 419b1c0b751b257bd54787618454d90fe88e7b79 #21703

10 days agochecksrc: detect `curlx_safefree()` opportunities
Viktor Szakats [Wed, 20 May 2026 22:51:04 +0000 (00:51 +0200)] 
checksrc: detect `curlx_safefree()` opportunities

Follow-up to bcd0497c8112e05412d2c649e8d9eea2bda8020e #21700
Follow-up to 1c3289c85e1a7a939464d5c5e84382d2e250e611 #21684
Follow-up to c0f0e400e0bc43cbe8c42c6937ed0ac743a8d81a #5968
Follow-up to 0f4a03cbb6fdb84d05cb6aafe50444edad4f4119

Closes #21703

10 days agodocs: note CURLOPT_PINNEDPUBLICKEY has no effect on legacy LDAP backend
Joshua Rogers [Tue, 19 May 2026 21:14:01 +0000 (23:14 +0200)] 
docs: note CURLOPT_PINNEDPUBLICKEY has no effect on legacy LDAP backend

Closes #21682

10 days agotidy-up: use `curlx_safefree()`
Viktor Szakats [Wed, 20 May 2026 18:43:59 +0000 (20:43 +0200)] 
tidy-up: use `curlx_safefree()`

Closes #21700

10 days agotests: add an assert to avoid IPC blocking
Dan Fandrich [Tue, 5 May 2026 03:48:52 +0000 (20:48 -0700)] 
tests: add an assert to avoid IPC blocking

If so much data is being sent over the internal IPC pipe that the pipe
buffer fills and the syscall blocks, the program will hang. Add an
assert to ensure that this limit is never reached. The buffer size is
going to be different on different platforms, so choose 1KB which is
likely to be a reasonable lower bound on just about any system.
Currently, the maximum amount ever written is <100 bytes, so this should
provide plenty of headroom.

Spotted by Codex Security

Closes #21688

11 days agoschannel: fix revoke_best_effort setting for proxy
Joshua Rogers [Tue, 19 May 2026 21:32:26 +0000 (23:32 +0200)] 
schannel: fix revoke_best_effort setting for proxy

- Fix revoke_best_effort reading wrong ssl config.

Prior to this change the revoke_best_effort setting for the proxy was
wrongly ignored in favor of the same setting for the destination host.

In other words, CURLSSLOPT_REVOKE_BEST_EFFORT set via
CURLOPT_PROXY_SSL_OPTIONS did not apply to the proxy and
CURLSSLOPT_REVOKE_BEST_EFFORT set via CURLOPT_SSL_OPTIONS wrongly
applied to the proxy.

Closes https://github.com/curl/curl/pull/21683

11 days agocfilters: fix busy loop on blocked transfers
Stefan Eissing [Tue, 19 May 2026 13:31:45 +0000 (15:31 +0200)] 
cfilters: fix busy loop on blocked transfers

When a transfer gets paused after the connection has been established,
any data sitting in the kernel socket buffers will no longer get read.

Prevent the sockets form being added to the pollsets, because they
will trigger POLLIN endlessly and cause a busy poll loop. Same in event
based processing.

Reported-by: Harry Sintonen
Fixes https://github.com/curl/curl/issues/21671
Closes https://github.com/curl/curl/pull/21675

11 days agosspi: clear SSPI credentials on AcquireCredentialsHandle failure
penpal [Fri, 15 May 2026 17:53:29 +0000 (23:38 +0545)] 
sspi: clear SSPI credentials on AcquireCredentialsHandle failure

- Clear credentials on AcquireCredentialsHandle failure so it is not
  used on a subsequent call.

SSPI initialization may evaluate the credentials pointer to determine
whether or not a prior call to AcquireCredentialsHandle was successful,
therefore we must clear it on a failed call.

Closes https://github.com/curl/curl/pull/21642

11 days agocmake: quote `COMPONENTS` string in `curl-config.in.cmake`
Viktor Szakats [Wed, 20 May 2026 16:43:41 +0000 (18:43 +0200)] 
cmake: quote `COMPONENTS` string in `curl-config.in.cmake`

For consistency and for handling an accidental empty more gracefully.

Follow-up to 7d546e52b21c94e1d4f6669d2d4d64f79bff0d7b #21540

Closes #21699

11 days agosetopt: clear proxy auth properly on NULL
Daniel Stenberg [Wed, 20 May 2026 11:39:25 +0000 (13:39 +0200)] 
setopt: clear proxy auth properly on NULL

Verify NULLed proxy credentials with test1648

Closes #21696

11 days agoDockerfile: fix typo in variable name
Viktor Szakats [Wed, 20 May 2026 10:01:40 +0000 (12:01 +0200)] 
Dockerfile: fix typo in variable name

Did not cause an actual issue.

Spotted by GitHub Code Quality

Follow-up to 41c03b4c98dbc639a32d32486ed5146be2e73ee1 #13250

Closes #21693

11 days agoGHA/non-native: drop DragonFlyBSD job, due to unreliable package repo updates
Viktor Szakats [Wed, 20 May 2026 01:42:49 +0000 (03:42 +0200)] 
GHA/non-native: drop DragonFlyBSD job, due to unreliable package repo updates

Example:
```
Wed, 20 May 2026 09:51:48 GMT Updating Avalon repository catalogue...
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT repository Avalon has no meta file, using default settings
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT pkg: An error occurred while fetching package: No error
Wed, 20 May 2026 09:51:48 GMT Unable to update repository Avalon
Wed, 20 May 2026 09:51:48 GMT Error updating repositories!
Wed, 20 May 2026 09:51:48 GMT Error: Process completed with exit code 3.
```

As tested over at libssh2, retrying the install command also does not
help, only repeats the same failure.

Also: fix whitespace in matrix.

Follow-up to b158d1c9f7456a8f976c74c08d2dc5a555e9cc77 #21681

Closes #21694

11 days agourlapi: compare zone-id in Curl_url_same_origin()
Joshua Rogers [Tue, 19 May 2026 23:03:31 +0000 (01:03 +0200)] 
urlapi: compare zone-id in Curl_url_same_origin()

Closes #21686

11 days agowebsockets: auto-tunnel through http proxy
Stefan Eissing [Wed, 20 May 2026 08:30:25 +0000 (10:30 +0200)] 
websockets: auto-tunnel through http proxy

When using a ws: or wss: url with a http proxy, automatically
switch to tunneling operation mode.

Add test_20_10 to check.

Fixes #21663
Closes #21691

11 days agoGHA/non-native: move BSDs to a single matrix, add DragonFly and Midnight
Viktor Szakats [Tue, 19 May 2026 17:05:41 +0000 (19:05 +0200)] 
GHA/non-native: move BSDs to a single matrix, add DragonFly and Midnight

- bump cross-platform-actions to v1.1.0.
  Ref: https://github.com/cross-platform-actions/action/releases/tag/v1.1.0

- merge BSD jobs into a single matrix.

- split BSD jobs into build steps as used for other platforms.
  A new feature of cross-platform-actions v1.1.0.

- sync BSD build steps with other platforms.

- add DragonFlyBSD and MidnightBSD to the BSD matrix.
  New features of cross-platform-actions v1.1.0.
  MidnightBSD uses GnuTLS to add variation, also the preinstalled
  OpenSSL is too old (v1.1.1w) for curl.
  Stick with autotools for DragonFlyBSD; I could not figure out how
  to install cmake.
  Refs:
  https://en.wikipedia.org/wiki/DragonFly_BSD
  https://en.wikipedia.org/wiki/MidnightBSD

- bump Intel FreeBSD jobs from v14.3 to v15.0.

- fix to show `gcc` in the NetBSD job name.

All these saved 50 lines of YAML. The two new jobs take 2m15s each. The
bump to FreeBSD 15 needs and extra minute in total.

Note, the DragonFlyBSD job seems to have reliability issues. If it
remains an issue, I'll comment it out or delete it in a future commit.

Closes #21681

11 days agoDockerfile: update debian:bookworm-slim Docker digest to 0104b33
renovate[bot] [Wed, 20 May 2026 01:15:47 +0000 (01:15 +0000)] 
Dockerfile: update debian:bookworm-slim Docker digest to 0104b33

Closes #21687

11 days agorunner.pm: apply minor correctness fix
Viktor Szakats [Sat, 16 May 2026 16:58:47 +0000 (18:58 +0200)] 
runner.pm: apply minor correctness fix

"Lines 244-245 overwrite global variables `$runnerr` and `$runnerw` that
were already assigned in the child process (lines 205-206). In the
parent process context, these assignments appear incorrect and could
cause issues if `runner_init` is called multiple times. The parent
should only store references in the controller hashes."

It could never cause an actual issue, but clarifies the intent of the
code.

Spotted and fixed by GitHub Code Quality

Cherry-picked from #21646

Closes #21672

11 days agotidy-up: miscellaneous
Viktor Szakats [Sat, 16 May 2026 16:47:52 +0000 (18:47 +0200)] 
tidy-up: miscellaneous

- fix typos and wording in documentation and comments.
- KNOWN_BUGS: merge duplicate H1 section.
- test_10_proxy: delete stray expressions.
- Perl: `while()` -> `while(1)`.
- Perl: fix indent, whitespace, drop redundant quotes and parentheses.
- fix casing: URL, SSL, Windows.
- badwords: readd `threadsafe`, add `well-known` (and fix it).
- replace `WinXP` -> `Windows XP` to match other uses.

Closes #21646

11 days agounit3303, unit3304: tidy-ups
Viktor Szakats [Tue, 19 May 2026 22:17:58 +0000 (00:17 +0200)] 
unit3303, unit3304: tidy-ups

- use `curlx_safefree()`.
- drop redundant blocks.

Follow-up to 7541ae569d82fb308a5e2d94916027da4fa3ba3e #21667

Closes #21684

11 days agotls: fix incomplete mTLS config in conn reuse and session cache
Joshua Rogers [Tue, 19 May 2026 09:47:50 +0000 (11:47 +0200)] 
tls: fix incomplete mTLS config in conn reuse and session cache

cert_type, key, key_type, key_passwd and key_blob lived in
ssl_config_data but not in ssl_primary_config, so they were invisible to
match_ssl_primary_config() and to the TLS session cache peer key.

Two easy handles sharing a connection pool could reuse each other's
authenticated connections when they differed only on SSLKEY, SSLKEYTYPE,
KEYPASSWD, SSLCERTTYPE or SSLKEYBLOB. The second handle would silently
inherit the first handle's authenticated identity.

Promote all five fields into ssl_primary_config so the conn-reuse
predicate and session cache key cover the complete client credential
set. Also replace the fixed ":CCERT" session cache marker with the
actual clientcert path so sessions are not shared across different
client certificates.

Verified by test 3303 and 3304

Reported-By: Joshua Rogers (AISLE Research)
Closes #21667

12 days agoGHA/non-native: alpha-sort BSD jobs
Viktor Szakats [Tue, 19 May 2026 16:56:01 +0000 (18:56 +0200)] 
GHA/non-native: alpha-sort BSD jobs

Closes #21680

12 days agourl: detect proxy changes read from environment
Daniel Stenberg [Mon, 18 May 2026 21:47:11 +0000 (23:47 +0200)] 
url: detect proxy changes read from environment

When a proxy is set from an environment variable, detect if that proxy
is not the same as previously and flush state.

Verified by test1647: verify changing proxy with env variables and make
sure Digest state is flushed in the second use

Closes #21666

12 days agoBUFQ.md: re-sync with source code
Viktor Szakats [Tue, 19 May 2026 13:04:46 +0000 (15:04 +0200)] 
BUFQ.md: re-sync with source code

Also:
- move bullet points out from C code fences.
- fold long lines.

Follow-up to d4983ffc134addd20bea18987dec7c3b771e74a4 #17396

Closes #21678

12 days agotidy-up: rename more `CURLcode` variables to `result`
Viktor Szakats [Tue, 19 May 2026 12:49:28 +0000 (14:49 +0200)] 
tidy-up: rename more `CURLcode` variables to `result`

Follow-up to 885b553545a74365f4fc2541a0829f7745e80d37 #21348

Closes #21676

12 days agodocs: tidy-up scheme references
Viktor Szakats [Mon, 18 May 2026 16:38:25 +0000 (18:38 +0200)] 
docs: tidy-up scheme references

After this patch `://` schemes are lowercase and enclosed in backticks.

Also:
- docs/libcurl/libcurl-multi.md: drop a stray C code fence.
- docs/libcurl/libcurl-tutorial.md: replace single/double quotes with
  Markdown markup where applicable.

Ref: #21646

Closes #21674