]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
3 weeks agoCURLOPT_SSH_HOSTKEYFUNCTION.md: for new connections only
Daniel Stenberg [Fri, 15 May 2026 11:54:41 +0000 (13:54 +0200)] 
CURLOPT_SSH_HOSTKEYFUNCTION.md: for new connections only

curl can then reuse the connection for subsequent transfers without
calling this function again.

Fixes #21606
Reported-by: Joshua Rogers
Closes #21628

3 weeks agosrc: add `curlx_memzero()` to clear buffers securely
Viktor Szakats [Wed, 13 May 2026 16:20:33 +0000 (18:20 +0200)] 
src: add `curlx_memzero()` to clear buffers securely

To safely zero memory, introduce `curlx_memzero()`, and map it to
`memset_s()` (C11) or `memset_explicit()` (C23) if auto-detected, or
`explicit_bzero()` or `explicit_memset()` for platforms opted-in, or
fall back to a local workaround if all unavailable. On Windows, always
use `SecureZeroMemory()`, or `SecureZeroMemory2()` with Visual Studio
and Windows SDK 10.0.26100.0+.

Details above are experimental and may change if they cause issues.

Also add macros/functions that zero memory before freeing a buffer:
- `curlx_safefreezero()`: for buffers with size.
- `curlx_safefreezeroz()`: for null-terminated buffers.
- `curlx_freezero()`: for buffers with size.
- `curlx_freezeroz()`: for null-terminated buffers.

`curlx_memzero()` must not be passed a NULL pointer because in some
implementations it is undefined behavior.

Also:
- curl_sha512_256: Replace hard-wired `explicit_memset()` call with new
  `curlx_memzero()`.

Refs:
https://en.cppreference.com/c/string/byte/memset
https://man7.org/linux/man-pages/man3/explicit_bzero.3.html
https://man.freebsd.org/cgi/man.cgi?query=explicit_bzero
https://man.netbsd.org/NetBSD-7.2/explicit_memset.3
https://learn.microsoft.com/previous-versions/windows/desktop/legacy/aa366877(v=vs.85)
https://learn.microsoft.com/windows/win32/memory/winbase-securezeromemory2
https://learn.microsoft.com/cpp/overview/compiler-versions
https://learn.microsoft.com/windows/apps/windows-sdk/downloads
https://jtsoya539.github.io/windows-sdk-versions/

Credits-to: Daniel Gustafsson
Credits-to: Will Cosgrove and co-authors in libssh2
Ref: #13589 (original attempt)
Ref: #21588

Closes #21598

3 weeks agourlapi: consume trailing dots after IPv4 numerical addresses
Daniel Stenberg [Fri, 15 May 2026 15:04:26 +0000 (17:04 +0200)] 
urlapi: consume trailing dots after IPv4 numerical addresses

If the hostname is specified as an IPv4 numerical address and it is
followed by a single dot, acccept that as a valid IPv4 and remove the
dot when normalizing.

This prevents otherwise legitimate IPv4 hostnames to have trailing dots.
Seems to match what browsers do.

Extended test 1560 to verify.

Closes #21635

3 weeks agoCURLOPT_SHARE: warn about early remove
Stefan Eissing [Fri, 15 May 2026 12:56:24 +0000 (14:56 +0200)] 
CURLOPT_SHARE: warn about early remove

Add a warning to removing a SHARE from an EASY handle before it is
finished.

Closes #21633

3 weeks agocookie: compare path case sensitively
Daniel Stenberg [Thu, 14 May 2026 21:46:45 +0000 (23:46 +0200)] 
cookie: compare path case sensitively

Verify with test 1645

Reported-by: Joshua Rogers
Closes #21616

3 weeks agostrparse: make curlx_str_until() accept zero for 'max'
Daniel Stenberg [Wed, 13 May 2026 22:06:03 +0000 (00:06 +0200)] 
strparse: make curlx_str_until() accept zero for 'max'

When asked to parse for a string with max zero bytes, it will always
return error and no longer trigger an assert. This saves the caller from
having to check for this condition.

Closes #21600

3 weeks agorustls: drop two wrong leftover casts to `ssize_t`
Viktor Szakats [Fri, 15 May 2026 09:54:14 +0000 (11:54 +0200)] 
rustls: drop two wrong leftover casts to `ssize_t`

While both source and target types are already `size_t`.

Spotted by GitHub Code Quality

Follow-up to b7c676d13f0988bde9bb0e4c3cfc688072cdb2e0 #17593

Closes #21625

3 weeks agotidy-up: prefer "initialize" with a 'z'
Viktor Szakats [Thu, 14 May 2026 22:37:37 +0000 (00:37 +0200)] 
tidy-up: prefer "initialize" with a 'z'

To match the majority of usage in source.

Closes #21618

3 weeks agogsasl: fix potential double free
Viktor Szakats [Thu, 14 May 2026 12:35:21 +0000 (14:35 +0200)] 
gsasl: fix potential double free

Also:
- require libgsasl 1.6.0+ (2010-12-14) for a `gsasl_finish()` that
  handles a NULL argument.
  Ref: https://gitlab.com/gsasl/gsasl/-/commit/b550032df8488a9ceaa3cfd4c634947d8f219717

Reported-by: Joshua Rogers (Aisle Research)
Closes #21609

3 weeks agolibssh: add support for SHA256 host public keys
Viktor Szakats [Thu, 14 May 2026 11:32:46 +0000 (13:32 +0200)] 
libssh: add support for SHA256 host public keys

Reported-by: Joshua Rogers
Fixes #21605

Closes #21607

3 weeks agourlapi: deny hostnames with more than one trailing dot
Daniel Stenberg [Fri, 15 May 2026 08:14:36 +0000 (10:14 +0200)] 
urlapi: deny hostnames with more than one trailing dot

Or consisting of just a single dot.

Such names cannot be resolved with DNS.

While they *can* still be resolved with /etc/hosts or --resolve tricks,
they easily cause internal problems because their trailing dots.

Let's not allow them anymore.

Closes #21622

3 weeks agorustls: error on CURLOPT_CRLFILE with native CA store
Joshua Rogers [Thu, 14 May 2026 21:19:54 +0000 (23:19 +0200)] 
rustls: error on CURLOPT_CRLFILE with native CA store

Closes #21614

3 weeks agowindows: update MS SDK versions in comments
Viktor Szakats [Fri, 15 May 2026 00:10:24 +0000 (02:10 +0200)] 
windows: update MS SDK versions in comments

To make them more accurate.

Also:
- show Visual Studio version, where missing.
- ease the formatting.
- schannel_int.h: clang-tidy fallback code.

Used: `rg -l --sort=path CERT_FIND_HAS_PRIVATE_KEY`

Closes #21621

3 weeks agoGHA: pin containers to hash (where missing)
Viktor Szakats [Thu, 14 May 2026 22:50:18 +0000 (00:50 +0200)] 
GHA: pin containers to hash (where missing)

Fixing this with zizmor v1.25.0:
```
error[unpinned-images]: unpinned image references
  --> .github/workflows/linux-old.yml:59:5
59 |     container: 'debian:stretch'
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ container image is not pinned to a SHA256 hash
   = help: audit documentation -> https://docs.zizmor.sh/audits/#unpinned-images
[...]
```
Ref: https://github.com/curl/curl/actions/runs/25890035949/job/76090925291?pr=21618

Sadly there is no automatic mechanism to bump them..

Also:
- replace `debian-stretch` with its slim variant.
- bump one of the two Alpine jobs from 3.20 to 3.23.4.

Closes #21619

3 weeks agodocs: fix a couple of typos
Viktor Szakats [Thu, 14 May 2026 22:28:02 +0000 (00:28 +0200)] 
docs: fix a couple of typos

Spotted by GitHub Code Quality

Closes #21617

3 weeks agocreds: drop redundant `CURL_UNCONST()`s
Viktor Szakats [Thu, 14 May 2026 19:57:02 +0000 (21:57 +0200)] 
creds: drop redundant `CURL_UNCONST()`s

Follow-up to 8f71d0fde515aa4c68002477356c35bd79927729 #21548

Closes #21612

3 weeks agolib: make `__STDC_VERSION__` literals `L` (where missing)
Viktor Szakats [Thu, 14 May 2026 08:57:34 +0000 (10:57 +0200)] 
lib: make `__STDC_VERSION__` literals `L` (where missing)

3 weeks agocmake: unfold a line
Viktor Szakats [Thu, 14 May 2026 14:33:23 +0000 (16:33 +0200)] 
cmake: unfold a line

3 weeks agoGHA: explicitly `brew update` before `brew install` with Linuxbrew
Viktor Szakats [Thu, 14 May 2026 12:09:50 +0000 (14:09 +0200)] 
GHA: explicitly `brew update` before `brew install` with Linuxbrew

Fixing:
```
==> Installing openssl@3 dependency: ca-certificates
==> Pouring ca-certificates--2026-05-14.all.bottle.tar.gz
Error: undefined method '[]' for nil
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/utils/bottles.rb:127:in 'Utils::Bottles.load_tab'
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/formula_installer.rb:1507:in 'FormulaInstaller#pour'
[...]
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/brew.rb:114:in '<main>'
You have disabled automatic updates and have not updated today.
Do not report this issue until you've run `brew update` and tried again.
Error: Process completed with exit code 1.
```
Ref: https://github.com/curl/curl/actions/runs/25859030402/job/75984082148?pr=21607

Dropping `HOMEBREW_NO_AUTO_UPDATE=1` was not enough to fix it.

Closes #21608

3 weeks agostrparse: split a multi-line assert into many separate ones
Daniel Stenberg [Wed, 13 May 2026 21:28:43 +0000 (23:28 +0200)] 
strparse: split a multi-line assert into many separate ones

This way we can better tell exactly which condition that triggers. Like
in fuzzer logs.

Closes #21599

3 weeks agodocs: fix grammar and wording in FAQ
0xN3R3K3 [Wed, 13 May 2026 15:34:10 +0000 (18:34 +0300)] 
docs: fix grammar and wording in FAQ

Closes #21593

3 weeks agopythonlint.sh: make it fail on error, fix ruff warnings in pytest
Viktor Szakats [Wed, 13 May 2026 20:50:13 +0000 (22:50 +0200)] 
pythonlint.sh: make it fail on error, fix ruff warnings in pytest

Follow-up to a5542c23e7427b8ea8f6183f503f2935d88d5d65 #21289
Follow-up to 17e8200733a1fd9db148f794d7e1cfb47e491fcd

Closes #21597

3 weeks agocmake: merge `if` blocks (tidy-up)
Viktor Szakats [Wed, 13 May 2026 20:08:03 +0000 (22:08 +0200)] 
cmake: merge `if` blocks (tidy-up)

Closes #21596

3 weeks agocookie: constify struct pointers
Viktor Szakats [Wed, 13 May 2026 12:28:27 +0000 (14:28 +0200)] 
cookie: constify struct pointers

Closes #21589

3 weeks agollist: constify struct pointers
Viktor Szakats [Wed, 13 May 2026 12:42:55 +0000 (14:42 +0200)] 
llist: constify struct pointers

Closes #21590

3 weeks agourlapi: change more lowercase percent-encoded to uppercase
Daniel Stenberg [Wed, 13 May 2026 14:06:00 +0000 (16:06 +0200)] 
urlapi: change more lowercase percent-encoded to uppercase

For consistency with other code, prefer uppercase.

Verified by test 1628
Reported-by: Fabian Keil
URL: https://curl.se/mail/lib-2026-05/0006.html
Closes #21592

3 weeks agocreds: create on service name only
Stefan Eissing [Wed, 13 May 2026 12:45:35 +0000 (14:45 +0200)] 
creds: create on service name only

Fix creation of creds object for transfer when only a sasl service
name is configured by the application.

Follow-up to 5e99b73cf441d9c369768

Closes #21591

3 weeks agourl: keep the question mark for empty queries
Daniel Stenberg [Wed, 13 May 2026 08:35:02 +0000 (10:35 +0200)] 
url: keep the question mark for empty queries

Reported-by: Bill Mill
Fixes #21544

Verified by test 1721

Closes #21584

3 weeks agosnpego_sspi: preserve distinction btw policy-only and uncond delegation
Daniel Stenberg [Wed, 13 May 2026 07:55:36 +0000 (09:55 +0200)] 
snpego_sspi: preserve distinction btw policy-only and uncond delegation

CURLOPT_GSSAPI_DELEGATION exposes distinct modes:
CURLGSSAPI_DELEGATION_POLICY_FLAG is documented as delegating only when
OK-AS-DELEGATE policy permits it, while CURLGSSAPI_DELEGATION_FLAG is
unconditional. The new SSPI implementation checks for either bit and
sets ISC_REQ_DELEGATE, so a caller requesting policy-limited delegation
is put on the same SSPI path as unconditional delegation.

In addition, curl's existing protection that avoids reusing a connection
when the GSS delegation setting differs was guarded only by HAVE_GSSAPI;
SSPI-only builds now have an effective delegation option, but the
connection's delegation setting was neither copied nor compared. This
would cause Windows SSPI Negotiate/Kerberos authentication to delegate
credentials contrary to the caller's selected policy or reuse an
already-delegated authenticated connection for a transfer that requested
no delegation.

Follow-up to cc6777d939976b2f322dcbe5a

Reported by Codex Security
Closes #21583

3 weeks agocreds: add sasl service name
Stefan Eissing [Wed, 13 May 2026 10:02:48 +0000 (12:02 +0200)] 
creds: add sasl service name

The SASL service name, used in authentication, is part of curl's credentials
when authenticating to a server/proxy. Make it part of `struct Curl_creds`.

Change code to use `creds` to obtain a service name. By tying creds used
to the connection, connection reuse is also only allowed when the service
name matches.

Closes #21585

3 weeks agotool_urlglob: check glob use before access
Daniel Stenberg [Wed, 13 May 2026 10:41:51 +0000 (12:41 +0200)] 
tool_urlglob: check glob use before access

As this function can now be invoked with only the second glob "active",
it must avoid accessing the first one if not in use.

Follow-up to 2238f0921cb00b3395847

Spotted by Codex Security

Closes #21586

3 weeks agocurl: named globs in output file name for upload glob references
Daniel Stenberg [Tue, 21 Apr 2026 22:52:16 +0000 (00:52 +0200)] 
curl: named globs in output file name for upload glob references

Use parts of text from the upload filename field when that uses globbing
by giving it a name the same way we do it for URL globs. For example, if
you upload three files to a HTTP URL and want to save the corresponding
responses in separate files:

    curl -T 'file{<num>1,2,3}' https://upload.example/ -o 'response-#<num>'

Verified by test 2014

Closes #21407

3 weeks agoCURLOPT_MAXFILESIZE: clarify this also works for on-going transfers
Daniel Stenberg [Wed, 13 May 2026 06:58:04 +0000 (08:58 +0200)] 
CURLOPT_MAXFILESIZE: clarify this also works for on-going transfers

It was not really clear, but it has worked like this since 8.4.0 which
now is a while.

Closes #21582

3 weeks agoldap: fix to not leak `attribute` on OOM (WinLDAP)
Viktor Szakats [Tue, 12 May 2026 16:19:26 +0000 (18:19 +0200)] 
ldap: fix to not leak `attribute` on OOM (WinLDAP)

Reported-by: Andrew Nesbitt
Closes #21576

3 weeks agoTHANKS-filter: update
Viktor Szakats [Tue, 12 May 2026 16:24:19 +0000 (18:24 +0200)] 
THANKS-filter: update

Source: https://github.com/andrew

Closes #21577

3 weeks agoVULN-DISCLOSURE-POLICY.md: remove mention of bug bounty reward
Andrei Rybak [Tue, 12 May 2026 16:02:21 +0000 (18:02 +0200)] 
VULN-DISCLOSURE-POLICY.md: remove mention of bug bounty reward

As a follow-up to commits ca7ef4b817 ("BUG-BOUNTY.md: we stop the
bug-bounty end of Jan 2026", 2026-01-22) and ed7bf43a08 ("BUG-BOUNTY.md:
minor rephrase to say there is no bug bounty", 2026-03-10), remove a
leftover mention of the reward for vulnerability reports, that no longer
exists, in file `VULN-DISCLOSURE-POLICY.md`.

Fixes #21571
Reported-by: Alan De Smet
Closes #21574

3 weeks agotool_urlglob: better 'Duplicate glob name' position
Daniel Stenberg [Tue, 12 May 2026 14:01:41 +0000 (16:01 +0200)] 
tool_urlglob: better 'Duplicate glob name' position

This now points to where the duplicate name ends, not where it starts.

Also fixes test 2410 to use a fixed hostname so that the error position
remains the same.

Reported-by: Viktor Szakats
Fixes #21567
Closes #21568

3 weeks agosrc: fix comment typos
Viktor Szakats [Tue, 12 May 2026 13:54:06 +0000 (15:54 +0200)] 
src: fix comment typos

Found by GitHub Code Quality

Closes #21570

3 weeks agocurl_ntlm_core: propagate DES `CryptEncrypt()` error
Viktor Szakats [Tue, 12 May 2026 13:56:11 +0000 (15:56 +0200)] 
curl_ntlm_core: propagate DES `CryptEncrypt()` error

Spotted by GitHub Code Quality

Closes #21569

3 weeks agocreds: hold credentials
Stefan Eissing [Mon, 11 May 2026 12:25:52 +0000 (14:25 +0200)] 
creds: hold credentials

Authorizdation credentials are kept in `struct Curl_creds`. This contains:

* `user`: the username, maybe the empty string
* `passwd`: the password, maybe the empty string
* `sasl_authzid`: the SASL authz value, maybe the empty string
* `oauth_bearer`: the OAUTH bearer token, maybe the empty string
* `source`: where the credentials from from
* `refcount`: a reference counter to link/unkink creds

A `creds` with all values empty is equivalent to NULL, e.g. no `creds`
instance. With reference counting, `creds` can be linked/unlinked
in several places.

See docs/internals/CREDENTIALS.md for use.

Closes #21548

3 weeks agoGHA: (re-)enable SMB in a few builds
Daniel Stenberg [Tue, 12 May 2026 10:49:30 +0000 (12:49 +0200)] 
GHA: (re-)enable SMB in a few builds

Closes #21564

3 weeks agocurl_ntlm_core: fix nettle 4+ builds in certain MultiSSL combos
Viktor Szakats [Tue, 12 May 2026 11:42:12 +0000 (13:42 +0200)] 
curl_ntlm_core: fix nettle 4+ builds in certain MultiSSL combos

Also rename macro to resemble other backends.

Reported by Codex Security

Fixes #21562
Follow-up to 01f08dc4eb20a19aa60230653715c8b839619cbb #21557

Closes #21566

3 weeks agortsp: bump buf after rtsp_filter_rtp()
Daniel Stenberg [Tue, 12 May 2026 09:56:16 +0000 (11:56 +0200)] 
rtsp: bump buf after rtsp_filter_rtp()

Reported-by: Andrew Nesbit
Closes #21563

3 weeks agospnego_sspi: honor CURLOPT_GSSAPI_DELEGATION for Windows SSPI
Song X. Gao [Mon, 11 May 2026 16:45:15 +0000 (12:45 -0400)] 
spnego_sspi: honor CURLOPT_GSSAPI_DELEGATION for Windows SSPI

Make CURLOPT_GSSAPI_DELEGATION effective on Windows builds that use SSPI
(instead of a native GSS-API implementation), so Kerberos delegation can
be requested during SPNEGO/Negotiate authentication.

Closes #21528

3 weeks agotftp: stricter option name checks
Daniel Stenberg [Tue, 12 May 2026 07:20:31 +0000 (09:20 +0200)] 
tftp: stricter option name checks

Previously, the use of checkprefix() alone allowed the code to match not
only on "blksize" but also (mistakenly) on "blksizeFOO" etc.

Reported-by: Andrew Nesbit
Closes #21560

3 weeks agotool_urlglob: make globbing error reported for correct position
Daniel Stenberg [Tue, 12 May 2026 08:03:02 +0000 (10:03 +0200)] 
tool_urlglob: make globbing error reported for correct position

Reported by Codex Security

Closes #21561

3 weeks agotool_urlglob: add named globs
Daniel Stenberg [Wed, 22 Apr 2026 09:38:02 +0000 (11:38 +0200)] 
tool_urlglob: add named globs

Idea-by: Bastian Jesuiter
Verified by test 2408 - 2411

Closes #21409

3 weeks agoevent: fix wakeup consumption
Stefan Eissing [Mon, 11 May 2026 12:56:04 +0000 (14:56 +0200)] 
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

3 weeks agognutls: fix more nettle 4+ compatibility issues
Viktor Szakats [Tue, 12 May 2026 02:50:09 +0000 (04:50 +0200)] 
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 cfadbaa133504d47ece989486fde944d076e0222 #21169

Closes #21557

3 weeks agoGHA/linux: build local wolfSSL opensslextra with `--enable-ed25519`
Viktor Szakats [Tue, 12 May 2026 02:02:36 +0000 (04:02 +0200)] 
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

3 weeks agognutls: allow building with nettle 4.0
Xi Ruoyao [Thu, 30 Apr 2026 14:53:20 +0000 (22:53 +0800)] 
gnutls: allow building with nettle 4.0

Closes #21169

3 weeks agodocs: fix --follow doc typo
Tim Martin [Mon, 11 May 2026 20:06:57 +0000 (15:06 -0500)] 
docs: fix --follow doc typo

Let the singular ~~object~~ subject "option" agree with the verb "set".

Closes #21553

3 weeks agodelta: harden external command invocations
Viktor Szakats [Wed, 18 Mar 2026 12:24:07 +0000 (13:24 +0100)] 
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

3 weeks agocmake: export/forward `NGTCP2_CRYPTO_BACKEND`
Kai Pastor [Sat, 9 May 2026 05:23:37 +0000 (07:23 +0200)] 
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 8fce3e17e6cb310cd6dbe38ff14869b8fe5827d2 #20814

Closes #21540

3 weeks agoidn: replace header guards with forward declaration
Viktor Szakats [Mon, 11 May 2026 08:50:36 +0000 (10:50 +0200)] 
idn: replace header guards with forward declaration

Follow-up to bc40e09f63889a8bc14fa8f7221921eb5b4a559e #21472

Closes #21551

3 weeks agohostip: remove unused MAX_HOSTCACHE_LEN and MAX_DNS_CACHE_SIZE
amitbidlan [Mon, 11 May 2026 13:39:53 +0000 (22:39 +0900)] 
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

3 weeks agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 11 May 2026 12:51:03 +0000 (14:51 +0200)] 
RELEASE-NOTES: synced

3 weeks agolib: drop support for CURLAUTH_DIGEST_IE 21486/head
Daniel Stenberg [Sat, 2 May 2026 20:50:10 +0000 (22:50 +0200)] 
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

3 weeks agocmake: fix zstd CMake config name
Kai Pastor [Fri, 8 May 2026 15:21:52 +0000 (17:21 +0200)] 
cmake: fix zstd CMake config name

They install `zstdConfig.cmake`,
https://github.com/facebook/zstd/blob/885c79ba4ae8345e006f61bc97b270d4cf7ff076/build/cmake/CMakeModules/ZstdPackage.cmake#L33-L38.
With the `Config.cmake` pattern, this is a case-sensitive package name,
`zstd`.

Follow-up to 8fce3e17e6cb310cd6dbe38ff14869b8fe5827d2 #20814
Closes #21538

3 weeks agotidy-up: sort TLS backends, distros, alphabetically
Viktor Szakats [Fri, 1 May 2026 11:25:49 +0000 (13:25 +0200)] 
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

3 weeks agocmake: auto-select static nghttp2/nghttp3/ngtcp2 Config
Viktor Szakats [Wed, 29 Apr 2026 17:09:28 +0000 (19:09 +0200)] 
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:
https://github.com/microsoft/vcpkg/blob/773e092a82fc3b4c3e73ee7b049a5e119fa45898/ports/curl/dependencies.patch
https://github.com/microsoft/vcpkg/commit/70b941a5d2443e79eeab62507acb41bd22201277

Downstream-patch-by: Kai Pastor
Closes #21470

3 weeks agoftp: avoid accessing EPSV response one byte past the NULL
Daniel Stenberg [Sun, 10 May 2026 22:18:53 +0000 (00:18 +0200)] 
ftp: avoid accessing EPSV response one byte past the NULL

If the response is just a single "(".

Reported-by: Andrew Nesbit
Closes #21545

3 weeks agoGHA: update awslabs/aws-lc to v1.73.0
renovate[bot] [Sun, 10 May 2026 00:33:47 +0000 (00:33 +0000)] 
GHA: update awslabs/aws-lc to v1.73.0

Closes #21542

3 weeks agoschannel_verify: avoid out of blob access
Daniel Stenberg [Sun, 10 May 2026 13:13:59 +0000 (15:13 +0200)] 
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

4 weeks agocookie: simplify strstore(), remove outdated comment
Daniel Stenberg [Sat, 9 May 2026 13:27:11 +0000 (15:27 +0200)] 
cookie: simplify strstore(), remove outdated comment

Closes #21541

4 weeks agoDockerfile: update debian:bookworm-slim Docker digest to 67b30a6
renovate[bot] [Sat, 9 May 2026 04:45:54 +0000 (04:45 +0000)] 
Dockerfile: update debian:bookworm-slim Docker digest to 67b30a6

Closes #21539

4 weeks agoGHA: update google/boringssl to v0.20260508.0
renovate[bot] [Fri, 8 May 2026 14:24:33 +0000 (14:24 +0000)] 
GHA: update google/boringssl to v0.20260508.0

Closes #21537

4 weeks agoCURLOPT_ECH.md: simplify the description language
Daniel Stenberg [Fri, 8 May 2026 11:13:20 +0000 (13:13 +0200)] 
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

4 weeks agoECH: cleanups
Daniel Stenberg [Thu, 7 May 2026 21:07:54 +0000 (23:07 +0200)] 
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

4 weeks agox509asn1: fix operator order in do_pubkey
Daniel Stenberg [Thu, 7 May 2026 21:35:40 +0000 (23:35 +0200)] 
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

4 weeks agotool_urlglob: avoid overflow at end of range
Daniel Stenberg [Thu, 7 May 2026 15:45:48 +0000 (17:45 +0200)] 
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

4 weeks agoldap: fix minor leak on write callback error
Daniel Stenberg [Thu, 7 May 2026 16:02:35 +0000 (18:02 +0200)] 
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

4 weeks agoftp: simplify ftp_done
Daniel Stenberg [Thu, 7 May 2026 07:44:28 +0000 (09:44 +0200)] 
ftp: simplify ftp_done

Closes #21520

4 weeks agourl: fix connection reuse for starttls protocols
Stefan Eissing [Thu, 7 May 2026 08:30:07 +0000 (10:30 +0200)] 
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

4 weeks agoftp: remove bits.ftp_use_control_ssl
Stefan Eissing [Thu, 7 May 2026 08:00:10 +0000 (10:00 +0200)] 
ftp: remove bits.ftp_use_control_ssl

It's not needed since we can check the connection for SSL use.

Closes #21521

4 weeks agoauth: cleanups
Stefan Eissing [Wed, 6 May 2026 11:44:16 +0000 (13:44 +0200)] 
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

4 weeks agoftp: remove 2 Curl_resolv_blocking() calls
Stefan Eissing [Wed, 6 May 2026 07:49:14 +0000 (09:49 +0200)] 
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

4 weeks agourl: remove ssh_config_matches
Daniel Stenberg [Thu, 7 May 2026 07:04:55 +0000 (09:04 +0200)] 
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 c31fcf2decfbf1259cc1f31

Reported-by: Andrew Nesbit
Closes #21519

4 weeks agoCURLOPT_HAPROXYPROTOCOL.md: only sent for newly setup connections
Daniel Stenberg [Thu, 7 May 2026 06:19:36 +0000 (08:19 +0200)] 
CURLOPT_HAPROXYPROTOCOL.md: only sent for newly setup connections

Closes #21517

4 weeks agotool_formparse: tool2curlparts is no longer recursive
Daniel Stenberg [Thu, 7 May 2026 06:33:46 +0000 (08:33 +0200)] 
tool_formparse: tool2curlparts is no longer recursive

It could otherwise trigger a stack overflow in extreme cases

Reported-by: Andrew Nesbit
Closes #21518

4 weeks agotool1622: assert width and exact format boundaries
parasol-aser [Thu, 7 May 2026 03:53:34 +0000 (03:53 +0000)] 
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

4 weeks agosetopt: gate a few proxy TLS options by checking backend support
Daniel Stenberg [Wed, 6 May 2026 21:40:25 +0000 (23:40 +0200)] 
setopt: gate a few proxy TLS options by checking backend support

The same way the corresponding non-proxy options are checked.

Closes #21514

4 weeks agombedtls: null terminate the private key blob
Daniel Stenberg [Wed, 6 May 2026 21:59:22 +0000 (23:59 +0200)] 
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

4 weeks agotests: fix unit1636 with --disable-progress-meter
Dan Fandrich [Tue, 5 May 2026 03:56:51 +0000 (20:56 -0700)] 
tests: fix unit1636 with --disable-progress-meter

Closes #21500

4 weeks agopeer: fix compare of hostname for uds
Stefan Eissing [Wed, 6 May 2026 07:24:50 +0000 (09:24 +0200)] 
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 bc40e09f63889a8bc14fa8f7221921

Pointed out by Codex Security

Closes #21511

4 weeks agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 6 May 2026 07:19:12 +0000 (09:19 +0200)] 
RELEASE-NOTES: synced

Also bump pending version to 8.21.0

4 weeks agotool_formparse: polish error message + make two functions static
Daniel Stenberg [Wed, 6 May 2026 06:50:44 +0000 (08:50 +0200)] 
tool_formparse: polish error message + make two functions static

Closes #21510

4 weeks agoprotocol: introduce typedef for the do_more() function 21509/head
Daniel Stenberg [Tue, 5 May 2026 16:39:12 +0000 (18:39 +0200)] 
protocol: introduce typedef for the do_more() function

Instead of using magic values -1, 0 and -1 using enum.

Closes #21509

4 weeks agomulti: make multi_runsingle use sub functions for states
Daniel Stenberg [Tue, 5 May 2026 13:02:32 +0000 (15:02 +0200)] 
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

4 weeks agohostip: convert Curl_resolv_unix to static resolv_unix
Daniel Stenberg [Tue, 5 May 2026 15:09:36 +0000 (17:09 +0200)] 
hostip: convert Curl_resolv_unix to static resolv_unix

It was only used within this file

Closes #21508

4 weeks agohsts: rename Curl_hsts() to hsts_check() and make it static
Daniel Stenberg [Tue, 5 May 2026 15:01:41 +0000 (17:01 +0200)] 
hsts: rename Curl_hsts() to hsts_check() and make it static

It is no longer used outside of hsts.c

Closes #21507

4 weeks agoGHA: verify function-lengths
Daniel Stenberg [Mon, 4 May 2026 12:25:47 +0000 (14:25 +0200)] 
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

4 weeks agosocks_gssapi: simplify Curl_SOCKS5_gssapi_negotiate
Daniel Stenberg [Tue, 5 May 2026 09:13:07 +0000 (11:13 +0200)] 
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

4 weeks agolib: introduce Curl_peer
Stefan Eissing [Tue, 5 May 2026 10:58:22 +0000 (12:58 +0200)] 
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

4 weeks agothrdqueue.h: minor language polish in comments
Daniel Stenberg [Tue, 5 May 2026 12:34:27 +0000 (14:34 +0200)] 
thrdqueue.h: minor language polish in comments

4 weeks agothrdqueue.h: forward declare curl_thrdq unconditionally
Daniel Stenberg [Tue, 5 May 2026 09:37:03 +0000 (11:37 +0200)] 
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 117d50b4bf48ca04908f87dd665ba

Closes #21503

4 weeks agotool_formparse.c: use define instead of magic number
Daniel Stenberg [Tue, 5 May 2026 07:20:47 +0000 (09:20 +0200)] 
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

4 weeks agothrdqueue: make thrdq_await_done only for unit tests
Daniel Stenberg [Mon, 4 May 2026 21:44:25 +0000 (23:44 +0200)] 
thrdqueue: make thrdq_await_done only for unit tests

It is not used for anything else, so drop Curl_ and make it conditional
accordingly.

Closes #21499

4 weeks agogtls: fix some typos
Daniel Stenberg [Mon, 4 May 2026 21:33:49 +0000 (23:33 +0200)] 
gtls: fix some typos

Also make gtls_get_ietf_proto() static

Found by Copilot

Closes #21498

4 weeks agolib: two minor typos
Daniel Stenberg [Mon, 4 May 2026 14:17:11 +0000 (16:17 +0200)] 
lib: two minor typos

Spotted by Copilot

Closes #21496