Commit graph

38617 commits

Author SHA1 Message Date
Stefan Eissing
2a2104f3cf
event: fix wakeup consumption
The events on a multi wakeup socketpair were only consumed via
curl_multi_poll()/curl_multi_wait() but not in event based processing on
a curl_multi_socket() call. That led to busy loops as reported in

Fixes #21547
Reported-by: Earnestly on github
Closes #21549
2026-05-12 08:11:31 +02:00
Viktor Szakats
01f08dc4eb
gnutls: fix more nettle 4+ compatibility issues
- disable DES with nettle 4. It no longer supports it.
  ```
  lib/curl_ntlm_core.c:67:12: fatal error: 'nettle/des.h' file not found
     67 | #  include <nettle/des.h>
        |            ^~~~~~~~~~~~~~
  ```

- fix MD4 support with nettle 4.
  ```
  lib/md4.c:178:36: error: too many arguments to function call, expected 2, have 3
    178 |   md4_digest(ctx, MD4_DIGEST_SIZE, digest);
        |   ~~~~~~~~~~                       ^~~~~~
  ```

- fix unused argument compiler warning:
  ```
  lib/vtls/gtls.c:2267:39: error: unused parameter 'sha256len' [clang-diagnostic-unused-parameter,-warnings-as-errors]
  2267 |                                size_t sha256len)
       |                                       ^
  ```
  Ref: https://github.com/curl/curl/actions/runs/25710321195/job/75488970143?pr=21557

- GHA/macos: stop enabling NTLM in the GnuTLS job.
  It no longer builds due to missing DES support in nettle 4.
  ```
  lib/curl_ntlm_core.c:90:4: error: "cannot compile NTLM support without a crypto library with DES."
     90 | #  error "cannot compile NTLM support without a crypto library with DES."
        |    ^
  ```
  Ref: https://github.com/curl/curl/actions/runs/25710321195/job/75488970170?pr=21557

Follow-up to cfadbaa133 #21169

Closes #21557
2026-05-12 05:33:08 +02:00
Viktor Szakats
b582a936dd
GHA/linux: build local wolfSSL opensslextra with --enable-ed25519
For use with RFC 9421 HTTP Message Signatures support.

Ref: https://github.com/curl/curl/pull/21239/files#r3222322908
Ref: #21239

Closes #21555
2026-05-12 04:26:33 +02:00
Xi Ruoyao
cfadbaa133
gnutls: allow building with nettle 4.0
Closes #21169
2026-05-12 03:54:24 +02:00
Tim Martin
185e67e1fa
docs: fix --follow doc typo
Let the singular ~~object~~ subject "option" agree with the verb "set".

Closes #21553
2026-05-12 02:10:27 +02:00
Viktor Szakats
4d82423dd3
delta: harden external command invocations
By moving operations Perl-native (from shell and external commands), and
passing arguments individually to external commands.

Pointed out by Codex Security

Closes #21104
2026-05-11 22:05:29 +02:00
Kai Pastor
7d546e52b2
cmake: export/forward NGTCP2_CRYPTO_BACKEND
Exporting the component name as passed in is somewhat boring. OTOH it is
convenient for reuse.

- FindNGTCP2: export crypto backend in `NGTCP2_CRYPTO_BACKEND`.
- pass `COMPONENTS` `NGTCP2_CRYPTO_BACKEND` in `curl-config.cmake`.
- FindNGTCP2: fix to skip Config detection when optional `COMPONENTS` is
  not passed.

Co-authored-by: Viktor Szakats
Reported-by: x-xiang on github
Fixes #21523
Follow-up to 8fce3e17e6 #20814

Closes #21540
2026-05-11 21:53:39 +02:00
Viktor Szakats
e8ce697973
idn: replace header guards with forward declaration
Follow-up to bc40e09f63 #21472

Closes #21551
2026-05-11 17:01:34 +02:00
amitbidlan
e0e56e9ae4
hostip: remove unused MAX_HOSTCACHE_LEN and MAX_DNS_CACHE_SIZE
These macros are leftovers from when DNS caching was moved out of
hostip.c into its own source file. Both are still defined and used in
lib/dnscache.c; the copies in lib/hostip.c are unreferenced.

Detected with clang -Wunused-macros.

Follow-up to 96d5b5c688
Closes #21550
2026-05-11 16:19:34 +02:00
Daniel Stenberg
daf6f541cc
RELEASE-NOTES: synced 2026-05-11 14:51:03 +02:00
Daniel Stenberg
37b2403f48
lib: drop support for CURLAUTH_DIGEST_IE
This bit was used to do Digest authentication like Internet Explorer
before version 7 (released on October 18, 2006). Presumably no one uses
this anymore and since it is hard to use and does broken auth, starting
in 8.21.0 this bit does nothing (except setting the actual Digest bit).

Closes #21486
2026-05-11 13:43:47 +02:00
Kai Pastor
10d4b34e5c
cmake: fix zstd CMake config name
They install `zstdConfig.cmake`,
885c79ba4a/build/cmake/CMakeModules/ZstdPackage.cmake (L33-L38).
With the `Config.cmake` pattern, this is a case-sensitive package name,
`zstd`.

Follow-up to 8fce3e17e6 #20814
Closes #21538
2026-05-11 12:08:32 +02:00
Viktor Szakats
4815070794
tidy-up: sort TLS backends, distros, alphabetically
Also:
- replace stray [Rr]ustls-ffi with Rustls for consistency.
- add AWS-LC to a couple of lists where missing.

Closes #21481
2026-05-11 11:57:25 +02:00
Viktor Szakats
ed3cd8b046
cmake: auto-select static nghttp2/nghttp3/ngtcp2 Config
When detecting these dependencies via CMake Config and their main
imported target is undefined, automatically assume and use their static
imported target instead.

Adopting from vcpkg downstream, where it's done for nghttp3 and ngtcp2,
but not for nghttp2.

Refs:
773e092a82/ports/curl/dependencies.patch
70b941a5d2

Downstream-patch-by: Kai Pastor

Closes #21470
2026-05-11 11:57:25 +02:00
Daniel Stenberg
6f1dfab6a2
ftp: avoid accessing EPSV response one byte past the NULL
If the response is just a single "(".

Reported-by: Andrew Nesbit
Closes #21545
2026-05-11 08:07:24 +02:00
renovate[bot]
67ce672842
GHA: update awslabs/aws-lc to v1.73.0
Closes #21542
2026-05-10 23:22:45 +02:00
Daniel Stenberg
ea75ccc53b
schannel_verify: avoid out of blob access
The code would previously read one byte past the provided
CURLOPT_CAINFO_BLOB if the blob ends exactly with -----BEGIN
CERTIFICATE-----

Reported-by: Andrew Nesbit
Closes #21543
2026-05-10 23:21:08 +02:00
Daniel Stenberg
b944940828
cookie: simplify strstore(), remove outdated comment
Closes #21541
2026-05-10 00:31:25 +02:00
renovate[bot]
0f6af820c2
Dockerfile: update debian:bookworm-slim Docker digest to 67b30a6
Closes #21539
2026-05-09 15:33:09 +02:00
renovate[bot]
1698a3f857
GHA: update google/boringssl to v0.20260508.0
Closes #21537
2026-05-08 16:46:42 +02:00
Daniel Stenberg
d656ff9458
CURLOPT_ECH.md: simplify the description language
It no longer requires "a special build" of OpenSSL, just OpenSSL 4+.

Emphasize the experimental part a little clearer.

Drop the caveat for wolfSSL from the main description.

Closes #21536
2026-05-08 16:23:05 +02:00
Daniel Stenberg
b174b8b326
ECH: cleanups
- passing an unknown string to CURLOPT_ECH now returns error

  To properly allow applications to spot if they pass in a typo or
  something to libcurl.

- CURLECH_DISABLE is now a plain zero internally, not a dedicated bit which
  simplifies checks for when ECH is enabled

- Dropped the CURLECH_CLA_CFG bit, and just check STRING_ECH_CONFIG

- Turn grease/enable/hard into three different numerical values, no bitmask
  needed

- Convert the struct field 'tls_ech' from an int to a byte.

Closes #21532
2026-05-08 13:09:45 +02:00
Daniel Stenberg
cda0268593
x509asn1: fix operator order in do_pubkey
Check the range before reading data, as it would otherwise read one byte
too many.

Reported-by: Andrew Nesbit
Closes #21533
2026-05-08 10:27:25 +02:00
Daniel Stenberg
3ce10063f1
tool_urlglob: avoid overflow at end of range
Due to how the range span globbing code works, a range that ends with
9223372036854775807 (the maximum signed 63 bit value) cannot be used as
it triggers an integer overflow.

Verified in test 2092

Reported-by: Andrew Nesbit
Closes #21529
2026-05-07 22:58:20 +02:00
Daniel Stenberg
9249aad4c2
ldap: fix minor leak on write callback error
The 'ber' pointer could remain allocated in the exit path if the write
callback returned error for one of the Curl_client_write() calls.

Reported-by: Andrew Nesbit
Closes #21530
2026-05-07 22:57:38 +02:00
Daniel Stenberg
df315692d7
ftp: simplify ftp_done
Closes #21520
2026-05-07 14:53:55 +02:00
Stefan Eissing
a86efdd7ca
url: fix connection reuse for starttls protocols
When a connection is tested for reuse in a transfer that *may* upgrade
to TLS (commonly via STARTTLS), the SSL configuration must match the
existing connection.

Reported-by: Andrew Nesbit
Closes #21522
2026-05-07 14:37:25 +02:00
Stefan Eissing
ef3b7903aa
ftp: remove bits.ftp_use_control_ssl
It's not needed since we can check the connection for SSL use.

Closes #21521
2026-05-07 14:03:48 +02:00
Stefan Eissing
fdd27a538c
auth: cleanups
- rename `req->proxyuserpwd` to `req->hd_proxy_auth`
- rename `req->userpwd` to `req->hd_auth`
- rename parameter `proxytunnel` to `is_connect` for Curl_http_output_auth()
- move path+query concatenation into Curl_http_output_auth(), saving an alloc when no auth is in play
- rename `H1_HD_USER_AUTH` into `H1_HD_AUTH`

Closes #21513
2026-05-07 14:03:00 +02:00
Stefan Eissing
71a5725563
ftp: remove 2 Curl_resolv_blocking() calls
They are no longer needed with the new peers and dns filter.
Connection setup will take care of the resoling and connecting.

Closes #21512
2026-05-07 14:02:13 +02:00
Daniel Stenberg
3e9817cd1b
url: remove ssh_config_matches
The CURLOPT_SSH_HOST_PUBLIC_KEY_* options are documented to verify the
host at connect time and not for connection reuse. Once the SSH host has
been deemed okay, it remains okay as long as the connection survives.

In addition: this function currently always returned TRUE since the
pointers have been NULLed in the SSH backend code before this function
is called.

Follow-up to c31fcf2dec

Reported-by: Andrew Nesbit
Closes #21519
2026-05-07 10:04:51 +02:00
Daniel Stenberg
94729ce4e4
CURLOPT_HAPROXYPROTOCOL.md: only sent for newly setup connections
Closes #21517
2026-05-07 09:11:30 +02:00
Daniel Stenberg
98d818cf2b
tool_formparse: tool2curlparts is no longer recursive
It could otherwise trigger a stack overflow in extreme cases

Reported-by: Andrew Nesbit
Closes #21518
2026-05-07 09:10:24 +02:00
parasol-aser
74bc655bdf
tool1622: assert width and exact format boundaries
Convert the silent "was too long!" diagnostics in the timebuf and
max5data width loops into fail_unless assertions, so a regression in
output width fails the unit test directly instead of only printing.

Add small exact-output tables that probe format-transition boundaries
not necessarily hit by the geometric value sweep: the 99999/100000
suffix kick-in for max5data, and the 6d/01h, 51m, 136y, and >99999y roll
points for timebuf.

Closes #21516
2026-05-07 08:00:03 +02:00
Daniel Stenberg
a946fbb5e6
setopt: gate a few proxy TLS options by checking backend support
The same way the corresponding non-proxy options are checked.

Closes #21514
2026-05-07 07:58:26 +02:00
Daniel Stenberg
67bf021e97
mbedtls: null terminate the private key blob
Unfortunately, mbedtls_pk_parse_key() requires the data to be
null-terminated if the data is PEM encoded (even when provided the exact
length), so this function needs to make a copy that has one.

Reported-by: Elise Vance
Closes #21515
2026-05-07 07:57:56 +02:00
Dan Fandrich
478e280278 tests: fix unit1636 with --disable-progress-meter
Closes #21500
2026-05-06 21:46:40 -07:00
Stefan Eissing
455bebc2c7
peer: fix compare of hostname for uds
Unix domain socket paths need to be compared case-senstive, in contrast
to DNS hostnames.

Follow-up to bc40e09f63

Pointed out by Codex Security

Closes #21511
2026-05-06 10:14:17 +02:00
Daniel Stenberg
06839bda76
RELEASE-NOTES: synced
Also bump pending version to 8.21.0
2026-05-06 09:19:12 +02:00
Daniel Stenberg
21687202d9
tool_formparse: polish error message + make two functions static
Closes #21510
2026-05-06 09:15:03 +02:00
Daniel Stenberg
e0df43b9d3
protocol: introduce typedef for the do_more() function
Instead of using magic values -1, 0 and -1 using enum.

Closes #21509
2026-05-06 08:16:33 +02:00
Daniel Stenberg
2c81cf620e
multi: make multi_runsingle use sub functions for states
The state machine now calls dedicated sub functions for each state, to
reduce the size and complexity.

Closes #21506
2026-05-05 17:54:54 +02:00
Daniel Stenberg
481c9d46f1
hostip: convert Curl_resolv_unix to static resolv_unix
It was only used within this file

Closes #21508
2026-05-05 17:49:12 +02:00
Daniel Stenberg
2cb6ba672d
hsts: rename Curl_hsts() to hsts_check() and make it static
It is no longer used outside of hsts.c

Closes #21507
2026-05-05 17:46:51 +02:00
Daniel Stenberg
80214dca6b
GHA: verify function-lengths
No production code function is allowed to be longer than 500 lines.

The lib/setopt.c:setopt_cptr function is currently exempt, as a single
exception until we make it smaller.

Closes #21492
2026-05-05 16:26:44 +02:00
Daniel Stenberg
f97f01f592
socks_gssapi: simplify Curl_SOCKS5_gssapi_negotiate
Also: pass in NULL when 'conf_state' is not wanted for gss_wrap() and
gss_unwrap()

Closes #21502
2026-05-05 16:24:40 +02:00
Stefan Eissing
bc40e09f63
lib: introduce Curl_peer
`struct Curl_peer` keeps information about a communication endpoint
together. It will replace `conn->host` and `conn->conn_to_host` and
proxyinfo host. It will also become part of `struct ssl_peer`.

It has a reference counter, so an instance can be shared between
connections and filters.

Elminiates `conn->host` and `conn->connect_to_host`, used in the
proxyinfo structures. Passed to DNS resolution and socks filters, etc.

Pass peer to http proxy and socks tunnel filters. Use peer in dns filter
and resolving. Make `Curl_peer` a member in the `struct ssl_peer`.

Add `docs/internals/PEERS.md` for documentation.

Closes #21472
2026-05-05 16:22:11 +02:00
Daniel Stenberg
9c9a4f3eab
thrdqueue.h: minor language polish in comments 2026-05-05 14:34:27 +02:00
Daniel Stenberg
484f724a30
thrdqueue.h: forward declare curl_thrdq unconditionally
This allows the unit tests to have a prototype involving such a struct
pointer - even when the build is done without threaded resolver.

Follow-up to 117d50b4bf

Closes #21503
2026-05-05 14:17:20 +02:00
Daniel Stenberg
03b547f73f
tool_formparse.c: use define instead of magic number
The longest header lines accepted for the -F option is now a define
instead of a magic number. I also bumped it to be an even 8K.

When fixing, I noticed that for some OOM errors curl would display two
error messages. Also fixed here.

Closes #21501
2026-05-05 10:11:10 +02:00