]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
68 min agosws: log the exact closing reason better, to help debugging tests master
Daniel Stenberg [Wed, 29 Jul 2026 14:32:40 +0000 (16:32 +0200)] 
sws: log the exact closing reason better, to help debugging tests

Closes #22431

79 min agotool: remove duplicate setopts
Stefan Eissing [Wed, 29 Jul 2026 15:58:08 +0000 (17:58 +0200)] 
tool: remove duplicate setopts

CURLOPT_RESOLVE and CURLOPT_CONNECT_TO were set twice.
A happy little accident?

Closes #22433

2 hours agotests: fix cert comparison with old cryptography
Dan Fandrich [Tue, 28 Jul 2026 23:27:38 +0000 (16:27 -0700)] 
tests: fix cert comparison with old cryptography

The fallback path for cryptography < 42 was broken by commit e13362c2
that caused a comparison between offset-naive and offset-aware
datetimes. Use the positional form of tz in datetime.now() everywhere.

Ref: #22396

Pointed out by Codex Security
Closes #22426

5 hours agoldap: support empty username and password
Jay Satiro [Fri, 26 Jun 2026 18:12:43 +0000 (14:12 -0400)] 
ldap: support empty username and password

Prior to this change an empty username or password was passed to the
LDAP bind function as NULL instead of an empty string.

Regression since 8f71d0fd.

Reported-by: Yoshiro Yoneya
Fixes https://github.com/curl/curl/issues/22162
Closes https://github.com/curl/curl/pull/22196

5 hours agoGHA: update dependency nghttp2/nghttp2 to v1.70.0
renovate[bot] [Wed, 29 Jul 2026 17:14:11 +0000 (17:14 +0000)] 
GHA: update dependency nghttp2/nghttp2 to v1.70.0

Closes #22434

5 hours agourlapi: clear password buffer on error path
Viktor Szakats [Wed, 29 Jul 2026 15:09:06 +0000 (17:09 +0200)] 
urlapi: clear password buffer on error path

Reported by Copilot
Bug: https://github.com/curl/curl/pull/21637#pullrequestreview-4809702512
Follow-up to 112a8b5adf36c17e7816a8db701b3e7a22958e52 #21637
Follow-up to 7c34365ccea19949317878c7fcd5f7376e2e09f1 #21879

Closes #22432

10 hours agosrc: safely clear certain buffers
Viktor Szakats [Wed, 13 May 2026 23:36:22 +0000 (01:36 +0200)] 
src: safely clear certain buffers

That may hold credentials or other sensitive data, or where we want to
ensure the zeroing is not optimized out by the compiler.

Credits-to: Daniel Gustafsson
Ref: #13589 (original attempt)
Ref: #21588

Follow-up to #21645
Follow-up to 066478f6346a2d987a9ecc3bd3bf45764d69c1c4 #21598

Closes #21637

10 hours agodocs/INTERNALS.md -> docs/DEPENDENCIES.md
Daniel Stenberg [Wed, 29 Jul 2026 11:59:31 +0000 (13:59 +0200)] 
docs/INTERNALS.md -> docs/DEPENDENCIES.md

With some minor cleanups

Closes #22430

11 hours agosrc: improve `curlx_memzero()` internal APIs
Viktor Szakats [Sat, 16 May 2026 10:08:00 +0000 (12:08 +0200)] 
src: improve `curlx_memzero()` internal APIs

- delete zero-and-free wrapper macros. (not yet used)
  To keep it simple.
- do NULL-check in `curlx_memzero()`.
  To avoid noise at call sites.
- add `curlx_strzero()` for null-terminated strings, also with
  NULL-check.

Ref: #21637
Follow-upt o 066478f6346a2d987a9ecc3bd3bf45764d69c1c4 #21598

Closes #21645

11 hours agoh2: bootstrap max streams from multi handle if in use
CatboxParadox [Tue, 28 Jul 2026 12:12:09 +0000 (14:12 +0200)] 
h2: bootstrap max streams from multi handle if in use

Closes #22418

11 hours agoEXPERIMENTAL: cleanups, unify on titles, merge quiche into a single segment
Daniel Stenberg [Wed, 29 Jul 2026 11:21:52 +0000 (13:21 +0200)] 
EXPERIMENTAL: cleanups, unify on titles, merge quiche into a single segment

Closes #22428

11 hours agoEXPERIMENTAL: Apple fast UDP
Daniel Stenberg [Wed, 29 Jul 2026 11:12:46 +0000 (13:12 +0200)] 
EXPERIMENTAL: Apple fast UDP

Follow-up to 079a11bcba5858ffab2cf6e810e9d980

Closes #22428

11 hours agowebsocket: pause writing and meta data fix
Stefan Eissing [Tue, 28 Jul 2026 12:27:13 +0000 (14:27 +0200)] 
websocket: pause writing and meta data fix

When writing a decoded chunk of websocket data, always flush the writer
chain so that buffered data gets delivered before the ws meta data gets
updated.

Add client writer flags CURL_CW_FLAG_BLOWUP for writer types that may
significantly enlarge write sizes. This flag causes the pause writer to
be added and shrinks the write chunk sizes. We do not want that for
content decoders like WS that do not change the size.

Add test_20_13 to check that large frames are paused/unpaused correctly
with the matching meta data.

Fixes #22413
Reported-by: Hendrik Hübner
Closes #22416

11 hours agoconncache: connection healthiness fix
Stefan Eissing [Tue, 28 Jul 2026 08:43:30 +0000 (10:43 +0200)] 
conncache: connection healthiness fix

Update the `lastchecked` timestamp on connection health checks when
successful to prevent repeated recalcs for a second.

Rename `seems_dead` to `seems_healthy` because the world is already
depressing enough.

Consider pending input on connection only unhealthy when the connection
has no transfers and is not multiplexed.

Closes #22412

13 hours agovquic: add option to use Apple fast UDP
Viktor Szakats [Tue, 28 Jul 2026 12:22:43 +0000 (14:22 +0200)] 
vquic: add option to use Apple fast UDP

Using Apple's secret `SYS_recvmsg_x` and `SYS_sendmsg_x` syscalls for
receiving/sending batches of UDP packets.

Since it uses undocumented calls, it's experimental and disabled by
default.

To enable:
- autotools: `--enable-apple-fast-udp`
- cmake: `-DCURL_ENABLE_APPLE_FAST_UDP=ON`

Also:
- enable in two H3 CI jobs with both build tools, pytest and clang-tidy.

Refs:
https://max-inden.de/post/fast-udp-io-in-firefox/
https://www.macsyscalls.com/en/syscall/480-recvmsg-x
https://www.macsyscalls.com/en/syscall/481-sendmsg-x

C-code-authored-by: Stefan Eissing
Build-code-authored-by: Viktor Szakats
Closes #22341
Closes #22417

13 hours agoGHA/configure-vs-cmake: dump `./configure --help`
Viktor Szakats [Wed, 29 Jul 2026 09:25:07 +0000 (11:25 +0200)] 
GHA/configure-vs-cmake: dump `./configure --help`

For visual review when necessary. For the three major platforms for
symmetry and good measure.

Closes #22427

13 hours agoGHA: update dependency google/boringssl to v0.20260728.0
renovate[bot] [Tue, 28 Jul 2026 22:21:01 +0000 (22:21 +0000)] 
GHA: update dependency google/boringssl to v0.20260728.0

Closes #22425

16 hours agoHISTORY: add when c-ares support was introduced (2004)
Daniel Stenberg [Wed, 29 Jul 2026 07:04:46 +0000 (09:04 +0200)] 
HISTORY: add when c-ares support was introduced (2004)

24 hours agotidy-up: use `CURL_CSTRLEN()` macro on more static strings
Viktor Szakats [Tue, 28 Jul 2026 20:36:11 +0000 (22:36 +0200)] 
tidy-up: use `CURL_CSTRLEN()` macro on more static strings

Follow-up to e1450d8fdaf05f27ec75eb15df303fe931755a59 #22406

Closes #22424

26 hours agoscripts/badwords.txt: do not recommend using 'will' in rewrites
Daniel Stenberg [Tue, 28 Jul 2026 20:44:50 +0000 (22:44 +0200)] 
scripts/badwords.txt: do not recommend using 'will' in rewrites

Instead suggest "avoid contraction and rewrite to present tense"

Reported-by: claudex on github
Fixes #22422
Closes #22423

26 hours agodocs/INTERNALS.md: move a column one byte
Daniel Stenberg [Tue, 28 Jul 2026 12:47:44 +0000 (14:47 +0200)] 
docs/INTERNALS.md: move a column one byte

To make the minimum gap two spaces, so that we can separate the columns
programmatically

26 hours agoscorecard: fix `max_upload` init value in `ul_parallel()`
Viktor Szakats [Wed, 15 Jul 2026 00:18:30 +0000 (02:18 +0200)] 
scorecard: fix `max_upload` init value in `ul_parallel()`

"In `ul_parallel`, `max_parallel` is computed using
`self._download_parallel` instead of `self._upload_parallel`. This
causes the upload parallelism to incorrectly follow the download
parallel setting. It should use `self._upload_parallel` to be consistent
with how `uploads()` computes `max_parallel`."

Reported by GitHub Code Quality

Follow-up to 30ef79ed937ca0fc7592ff73d162398773c6a5aa #17295

Closes #22421

26 hours agodnsd: fix bounds check in `read_https_alpn_part()`
Viktor Szakats [Wed, 15 Jul 2026 00:28:09 +0000 (02:28 +0200)] 
dnsd: fix bounds check in `read_https_alpn_part()`

"The check `i > 256` permits `i == 256` to pass through. When `i` is
then cast to `uint8_t` in `blob_add(b, (uint8_t)i)`, the value wraps to
0, silently encoding a zero-length ALPN entry instead of rejecting it.
The condition should be `i > 255` (or equivalently `i >= 256`) to
correctly reject any length that does not fit in a single byte."

Reported by GitHub Code Quality

Follow-up to 86f1e5b3f6c90e453368fdf23c366c1d4a8c953b #21299

Closes #22420

26 hours agoCI: improve labeler matches
Dan Fandrich [Tue, 28 Jul 2026 20:19:40 +0000 (13:19 -0700)] 
CI: improve labeler matches

29 hours agoschannel: fix error check logic in `get_client_cert()` file reader
Viktor Szakats [Wed, 15 Jul 2026 16:04:59 +0000 (18:04 +0200)] 
schannel: fix error check logic in `get_client_cert()` file reader

Reported by GitHub Code Quality
Follow-up to 0fdf96512613574591f501d63fe49495ba40e1d5 #5193

Closes #22415

29 hours agocurl_gssapi: document/update feature availability
Viktor Szakats [Tue, 28 Jul 2026 15:08:02 +0000 (17:08 +0200)] 
curl_gssapi: document/update feature availability

- update `GSS_C_DELEG_POLICY_FLAG` comment to include Apple GSS, add
  date, and amend MIT Kerberos version to 1.7+ (was: 1.8+)
  Ref: https://github.com/krb5/krb5/commit/45875a4d7bbd6bb8a943572d84fef5ca2bb18291
  Ref: https://github.com/apple-oss-distributions/Heimdal/commit/1635de38a813f6e1dd3f8fd270683187ad4f02be

- document `HAVE_GSS_SET_NEG_MECHS`/`gss_set_neg_mechs()`.
  Ref: https://github.com/krb5/krb5/commit/079eed2cf749702f75ddc385cf943fbab931f9d8
  It's also committed to Heimdal, but not present in a release
  as of 7.8.0 (current latest).
  Ref: https://github.com/heimdal/heimdal/commit/735039dbdc3aa58d06afdefd214efe3f5e421244

Follow-up to a8881e5e1d2e22d4b085d45ab6c8ce1df251d602 #21315 #22410
Follow-up to d169ad68faa5ed5ba2375e7502307a6262466d88 #22052

Closes #22419

31 hours agotests: bump ruff version to 0.60.0
Dan Fandrich [Sat, 25 Jul 2026 23:41:05 +0000 (16:41 -0700)] 
tests: bump ruff version to 0.60.0

This version enables many more warnings by default.

Closes #22396

31 hours agotests: target Python 3.8 as the minimum Python version
Dan Fandrich [Sat, 25 Jul 2026 20:34:38 +0000 (13:34 -0700)] 
tests: target Python 3.8 as the minimum Python version

This version is already two releases out of support, but is "only" 7
years old so is probably still being used in the real world. Document
this version along with some other testing dependencies.  Remove code
support for earlier versions. Disable ruff checks that need a newer
version.

31 hours agotests: address mutable class vars and naive datetime in Python code
Dan Fandrich [Sat, 25 Jul 2026 20:23:21 +0000 (13:23 -0700)] 
tests: address mutable class vars and naive datetime in Python code

Mark Python mutable class variables with ClassVar, to denote that the
danger this can cause has been considered.  Since any change made to
these in any object affects all other objects, this can cause locality
errors. However, as used in the test suite, they are are never modified
and so they are annotated as being intended.

Always set a timezone in datetime objects, as mixing naive and
timezone-aware object can cause errors.

These fix ruff rules DTZ005, RUF012.

31 hours agotests: use simpler constructions in Python code
Dan Fandrich [Sat, 25 Jul 2026 21:05:01 +0000 (14:05 -0700)] 
tests: use simpler constructions in Python code

* call super() without arguments
* mark an unused variable as such
* simplify by using dict getter for default values
* use writelines() when possible
* use dedent to simplify some text formatting
* avoid items() on dict in a loop when unnecessary
* replace most Python format() calls with f-strings
* use capture_output in subprocess.run

This fixes ruff rules FLY002, FURB122, PERF102, RUF059, SIM401, UP008,
UP022, UP030.

31 hours agotests: simplify by removing unneeded Python code
Dan Fandrich [Sat, 25 Jul 2026 20:49:29 +0000 (13:49 -0700)] 
tests: simplify by removing unneeded Python code

* combine separate if statements
* remove an unneeded encode() call
* remove unneeded returns
* simplify code when returning early

This fixes ruff rules SIM102, SIM114, UP012, PLR1711.

31 hours agotests: change whitespace and comments in Python test code
Dan Fandrich [Sat, 25 Jul 2026 20:35:51 +0000 (13:35 -0700)] 
tests: change whitespace and comments in Python test code

* remove an unneeded ruff warning disable
* remove coding: utf-8 from Python code; PEP 3120 makes UTF-8 the
  default encoding
* remove unusable shebang lines from Python code
* remove empty print strings
* disable warnings when file objects are stored; these instances can't
  be handled with context managers
* use more consistent whitespace in Python code, fixing flake8 warnings
* set the executable bit on scorecard.py, making it easier to run

These fix ruff rules EXE001, FURB105, UP009, SIM115.

31 hours agotests: improve exception handling in Python test code
Dan Fandrich [Sat, 25 Jul 2026 20:06:38 +0000 (13:06 -0700)] 
tests: improve exception handling in Python test code

* Explicitly set "check" in subprocess.run() to raise an exception
  automatically, where it was done manually before
* Use contextlib.suppress to ignore exceptions
* Use custom exceptions for test errors for clarity and flexibility.
* Replace IOError with OSError

This fixes ruff rules BLE001, PLW1510, S110, TRY201, TRY203, TRY002,
UP024.

35 hours agotidy-up: use more `static`, `sizeof()`, `char[]`, double-const
Viktor Szakats [Wed, 22 Jul 2026 23:50:06 +0000 (01:50 +0200)] 
tidy-up: use more `static`, `sizeof()`, `char[]`, double-const

- make `const` data `static`, where missing and possible.
- replace `strlen()` on literal or const strings with `sizeof()`.
  While the latter is optimized by popular C compiler, e.g. MSVC only
  does it with `/O2`.
- replace magic numbers with `sizeof()`, where missing.
- introduce `CURL_CSTRLEN()` macro for `sizeof(char[]) - 1`.
- use `CURL_CSTRLEN()` macro.
- move `const` before integer types, where missing.
- replace `char *var` with `var[]`, where missing and possible.
- use double const, where missing.
  `static const char *` -> `static const char * const`.
- lib1514: constify pointers.
- unit3205: drop redundant cast, avoid another one.
- unit1666: map `OID()` macro to identical `STRCONST()`.

Closes #22406

35 hours agourlapi: improved return codes
Daniel Stenberg [Mon, 27 Jul 2026 14:05:38 +0000 (16:05 +0200)] 
urlapi: improved return codes

- add CURLUE_BACKSLASH that can be returned when a backslash was used
  where a forward one probably was intended.

- make CURLUE_NO_HOST higher priority than port number errors for URLs
  without hostname. Like in "http://::1"

- shortened some URL parser error strings

Extend test 1560 to verify.

Reported-by: kit-ty-kate on github
Fixes #22337
Closes #22408

35 hours agolib2405: adjust for non-threaded builds
Daniel Stenberg [Tue, 28 Jul 2026 09:53:42 +0000 (11:53 +0200)] 
lib2405: adjust for non-threaded builds

- Attempt to fix the flakiness set in 9726fc8259ad7ebf1682
- Reduce macro use

Closes #22414

39 hours agoEXPERIMENTAL.md: We do not accept vuln reports for experimental features
Daniel Stenberg [Mon, 27 Jul 2026 21:56:44 +0000 (23:56 +0200)] 
EXPERIMENTAL.md: We do not accept vuln reports for experimental features

Closes #22411

2 days agospnego: block NTLM fallback in SPNEGO negotiation
Matthew John Cheetham [Mon, 13 Apr 2026 11:58:52 +0000 (12:58 +0100)] 
spnego: block NTLM fallback in SPNEGO negotiation

- Switch the Windows SSPI identity struct to SEC_WINNT_AUTH_IDENTITY_EX
  to use !ntlm in PackageList to prevent NTLM from being offered.

- For GSS filter out NTLMSSP OID, and restrict via gss_set_neg_mechs()
  to prevent NTLM from being offered.

- Extend the GSS-API debug stub layer to support the NTLM blocking logic
  without a real Kerberos environment.

- Update test 2057 to check that negotiate auth is silently skipped with
  no Authorization header when only NTLM stub credentials are available.

- Add SPNEGO NTLM blocking test 2093 which verifies that Kerberos
  credentials still succeed when NTLM is blocked within SPNEGO.

- Suppress tests valgrind leak for MIT krb5 gss_display_status, since
  the leak is in the library and not in curl.

To suppress the tests valgrind leak, the wildcard '...' bridges over an
anonymous frame inside libgssapi_krb5.so that valgrind reports as '???'.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Aided-by: Johannes Schindelin
Closes https://github.com/curl/curl/pull/21315
Closes https://github.com/curl/curl/pull/22410

2 days agoconncache: conn upkeep/alive: move and enhance
Stefan Eissing [Mon, 27 Jul 2026 07:49:33 +0000 (09:49 +0200)] 
conncache: conn upkeep/alive: move and enhance

- move `Curl_conn_seems_dead()` into conncache.c
- move `Curl_conn_upkeep()` into conncache.c
- when upkeep gives an error on a connection not in use,
  terminate it

Closes #21806

2 days agotypecheck-gcc: allow passing `char[]` as callback data
Viktor Szakats [Mon, 27 Jul 2026 11:17:56 +0000 (13:17 +0200)] 
typecheck-gcc: allow passing `char[]` as callback data

E.g. `TEST_DATA_STRING` in test 655.

Cherry-picked from #22406

Closes #22409

2 days agovquic: use ngtcp2 v1.25.0 new close2 callback
Stefan Eissing [Mon, 20 Jul 2026 12:37:13 +0000 (14:37 +0200)] 
vquic: use ngtcp2 v1.25.0 new close2 callback

Forward only the app error code from the receiving side to the h3 layer.

This only takes effect when building against ngtcp2 v1.25.0 or higher.

Fixes #22270

Closes #22356

2 days agoGHA: update dependency ngtcp2/ngtcp2 to v1.25.0
renovate[bot] [Mon, 27 Jul 2026 08:20:01 +0000 (08:20 +0000)] 
GHA: update dependency ngtcp2/ngtcp2 to v1.25.0

Closes #22398

2 days agocf-ngtcp2-cmn: de-duplicate `ngtcp2_conn_client_new()` call code
Viktor Szakats [Sun, 26 Jul 2026 18:48:02 +0000 (20:48 +0200)] 
cf-ngtcp2-cmn: de-duplicate `ngtcp2_conn_client_new()` call code

Closes #22401

2 days agocmake: verify if options are listed in `INSTALL-CMAKE.md`
Viktor Szakats [Mon, 27 Jul 2026 00:42:09 +0000 (02:42 +0200)] 
cmake: verify if options are listed in `INSTALL-CMAKE.md`

Also:
- add one debug option to pass the test.

Ref: https://github.com/curl/curl/discussions/14885#discussioncomment-10632311

Closes #22404

2 days agopytest: update two H3 tests for nghttp3 1.18.0+
Viktor Szakats [Sun, 26 Jul 2026 19:15:33 +0000 (21:15 +0200)] 
pytest: update two H3 tests for nghttp3 1.18.0+

Fixing:
```
FAILED ../../tests/http/test_02_download.py::TestDownload::test_02_36_looong_urls[65536-h3] -
  AssertionError: expected exit code 0, got 56
FAILED ../../tests/http/test_14_auth.py::TestAuth::test_14_05_basic_large_pw[h3] -
  AssertionError: expected exit code 0, got 56
```
Ref: https://github.com/curl/curl/actions/runs/30207198835/job/89807247058?pr=22400

Refs:
https://github.com/ngtcp2/nghttp3/pull/539
https://github.com/ngtcp2/nghttp3/commit/a5872645446cdc07e897fea33b61a3c665563da9

Bug: https://github.com/curl/curl/pull/22397#issuecomment-5084927935

Closes #22402

2 days agovquic: silence `-Wmissing-field-initializers` for nghttp3/ngtcp2 callback tables
Viktor Szakats [Sun, 26 Jul 2026 14:57:51 +0000 (16:57 +0200)] 
vquic: silence `-Wmissing-field-initializers` for nghttp3/ngtcp2 callback tables

To avoid a breakage in CI and curl-for-win builds on upstream updates
extending the callback lists. Each such breakage needed patching curl,
rolling these patches into curl-for-win, and doing it in near real-time,
to keep CI and builds working (and still causing some red CI jobs).

Bring calmness here by suppressing the warnings and allowing time to
extend the callback tables as/if needed and at a convenient moment.

Closes #22400

2 days agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 27 Jul 2026 07:40:05 +0000 (09:40 +0200)] 
RELEASE-NOTES: synced

2 days agoGHA/windows: bump stunnel to 5.79
Viktor Szakats [Sun, 26 Jul 2026 23:41:07 +0000 (01:41 +0200)] 
GHA/windows: bump stunnel to 5.79

Closes #22403

3 days agoruntests: fix `mode="warn"` tests passing unconditionally, fix test 1752
Viktor Szakats [Sat, 25 Jul 2026 11:43:33 +0000 (13:43 +0200)] 
runtests: fix `mode="warn"` tests passing unconditionally, fix test 1752

Fix test 1712 to pass curl C by setting `COLUMNS` to the highest
accepted value, and adjust expected results. To avoid envs with varying
lengths of `LOGDIR` affect the outcome.

Apply the same fix to test 459, though it wasn't affected in curl CI.

Also sync up test 433 `COLUMNS` value with these two tests for
consistency.

Ref: #22381
Follow-up to 8e3a2a64d103a46508e17cde76595993de96ea6c #20666

Closes #22388

3 days agohttp: fix httpsig with auth-redir
Daniel Stenberg [Sat, 25 Jul 2026 21:48:07 +0000 (23:48 +0200)] 
http: fix httpsig with auth-redir

Do not let unrelated credentials from a redirected URL bypass the
cross-host auth boundary

Verified by test 5023 to 5025

Follow-up to a55731050e8c3dbea0

Closes #22395

3 days agoGHA/http3-linux: update dependency ngtcp2/nghttp3 to v1.18.0
renovate[bot] [Sun, 26 Jul 2026 10:13:55 +0000 (10:13 +0000)] 
GHA/http3-linux: update dependency ngtcp2/nghttp3 to v1.18.0

Closes #22397

3 days agovquic: initialize new callback slot for nghttp3 v1.18.0+
Viktor Szakats [Sun, 26 Jul 2026 14:27:34 +0000 (16:27 +0200)] 
vquic: initialize new callback slot for nghttp3 v1.18.0+

Closes #22399

3 days agoruntests: allow comments in `setenv` section, merge sections in test433
Viktor Szakats [Sat, 25 Jul 2026 12:18:07 +0000 (14:18 +0200)] 
runtests: allow comments in `setenv` section, merge sections in test433

Closes #22389

3 days agobuild: tidy up httpsig options
Viktor Szakats [Sat, 25 Jul 2026 14:58:54 +0000 (16:58 +0200)] 
build: tidy up httpsig options

- say 'experimental'.
- cmake: add to documentation.
- cmake: alpha-sort.

Follow-up to a55731050e8c3dbea0b96205cf916443118f6acb #22386

Closes #22391

4 days agotool_getparam: clear the --httpsig-key argument
Daniel Stenberg [Sat, 25 Jul 2026 21:06:29 +0000 (23:06 +0200)] 
tool_getparam: clear the --httpsig-key argument

To hide it somewhat from process listings.

Closes #22394

4 days agocd2nroff: fix backslashes for 4-space indent lines
Daniel Stenberg [Sat, 25 Jul 2026 20:22:21 +0000 (22:22 +0200)] 
cd2nroff: fix backslashes for 4-space indent lines

They were previously only properly escaped for ~~~ quotes. Spotted for
the CURLOPT_HTTPSIG_KEY man page.

Closes #22393

4 days agocurl: make --httpsig-key take a key OR a file name for key
Daniel Stenberg [Sat, 25 Jul 2026 15:03:22 +0000 (17:03 +0200)] 
curl: make --httpsig-key take a key OR a file name for key

Verified by test 5022

Closes #22392

4 days agohttpsig: add RFC 9421 HTTP Message Signatures support
Sameeh Jubran [Fri, 24 Jul 2026 20:49:52 +0000 (22:49 +0200)] 
httpsig: add RFC 9421 HTTP Message Signatures support

Add support for signing outgoing HTTP requests per RFC 9421 using
Ed25519 or HMAC-SHA256 algorithms.

New libcurl options:
 - CURLOPT_HTTPSIG: signing algorithm ("ed25519" or "hmac-sha256")
 - CURLOPT_HTTPSIG_KEY: path to hex-encoded key file
 - CURLOPT_HTTPSIG_KEYID: key identifier for Signature-Input
 - CURLOPT_HTTPSIG_HEADERS: space-separated components to sign

New CLI flags: --httpsig, --httpsig-key, --httpsig-keyid,
--httpsig-headers

The crypto layer follows the sha256.c multi-backend pattern with
implementations for OpenSSL (EVP_DigestSign) and wolfSSL
(wc_ed25519_sign_msg). HMAC-SHA256 uses the existing Curl_hmacit()
infrastructure which works on all backends.

Verified by test 5000 to 5021

Assisted-by: Daniel Stenberg
Signed-off-by: Sameeh Jubran <sameeh@wolfssl.com>
Closes #22386
Closes #21239

4 days agotidy-up: drop redundant includes
Viktor Szakats [Sun, 28 Jun 2026 11:10:38 +0000 (13:10 +0200)] 
tidy-up: drop redundant includes

`sys/types.h` and `sys/socket.h` (non-Win32). They are included via
`curl/curl.h` and `curl_setup.h`.

This drops `HAVE_SYS_TYPES_H` guards from the codebase. It's safe
because `sys/types.h` (POSIX) is already required unconditionally by
`curl/curl.h`. It remains used in feature checks by both autotools and
cmake; to be reviewed in a future step.

Closes #22374

4 days agospacecheck: cap number of lines per file
Viktor Szakats [Fri, 24 Jul 2026 18:26:01 +0000 (20:26 +0200)] 
spacecheck: cap number of lines per file

To prevent merging large text files by accident.

Set the cap at 10k lines. The current line number top list is:
```
    5577 configure.ac
    5561 lib/vtls/openssl.c
    5077 lib/http.c
    4517 lib/ftp.c
    4284 lib/multi.c
```

Closes #22387

5 days agoconnect: connection close tweaks
Stefan Eissing [Thu, 23 Jul 2026 12:17:13 +0000 (14:17 +0200)] 
connect: connection close tweaks

- connclose/streamclose/connkeep() remove description string that was
  never used anywhere. Add trace statements where reasons for closing
  were not already traced and maybe not obvious.
- multi_remove_handle: only lookup former connection in pool when
  transfer is set to connect only
- test1554: adapt expectations now that pool is less often locked

Closes #22379

5 days agohttpsrr: DoH with HTTPS, fix response handling
Stefan Eissing [Thu, 23 Jul 2026 09:20:19 +0000 (11:20 +0200)] 
httpsrr: DoH with HTTPS, fix response handling

Fix handling of DoH response that only asks for HTTPS records.

Add test 2117 for checking that a HTTPS-RR resolve is processed,
even though the actual answer is invalid.

Closes #22372

5 days agoapi-guard: check lock on session cache
Stefan Eissing [Wed, 22 Jul 2026 09:06:39 +0000 (11:06 +0200)] 
api-guard: check lock on session cache

Add a property to easy/multi API calls that prohibit calling
the function when the involved SSL session cache is under lock
by the current thread.

Checks are only in effect when pthreads/Windows threads are
available.

Closes #22367

5 days agoterminal: Enhance terminal size detection for multiple outputs 22276/head
AlanKingPL [Wed, 8 Jul 2026 11:13:40 +0000 (13:13 +0200)] 
terminal: Enhance terminal size detection for multiple outputs

- Get the terminal size from STDOUT or STDERR when the terminal size of
  STDIN is not available.

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

5 days agohttp: fix non-tunneling proxy hostname use
Stefan Eissing [Fri, 24 Jul 2026 12:20:58 +0000 (14:20 +0200)] 
http: fix non-tunneling proxy hostname use

Make sure hostname used in URL to proxy is IDN decoded form, but keep
the original hostname in case it was ipv6.

Fixes #22382
Reported-by: RMMoreton on github
Closes #22385

5 days agotests: fix the FTP check for unexpected RST
Graham Campbell [Sun, 12 Jul 2026 17:47:32 +0000 (18:47 +0100)] 
tests: fix the FTP check for unexpected RST

- In vsftpd ignore unrelated RST by matching tcpdump RSTs to the data
  connection port pair.

Prior to this change an unrelated RST on a recycled ephemeral port
could cause test failure.

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

6 days agoasyn-thrdd: retry link-local ipv6 if missing scope id
Stefan Eissing [Tue, 21 Jul 2026 11:28:59 +0000 (13:28 +0200)] 
asyn-thrdd: retry link-local ipv6 if missing scope id

When the threaded resolver gets AAAA results that carry a link-local
address without scope-id, it now re-queues a query with AF_UNSPEC and
strips ipv4 addresses from that result. Whatever the resulting addresses
and scope-ids are, this becomes the result of the resolve.

Fixes #22330
Reported-by: Bartel Sielski
Closes #22368

6 days agoctype: exclude control bytes from ISPRINT and ISGRAPH
Alhuda Khan [Thu, 23 Jul 2026 06:39:04 +0000 (12:09 +0530)] 
ctype: exclude control bytes from ISPRINT and ISGRAPH

Closes #22371

6 days agoconfigure: only check in the watt library if WATT_ROOT is set
Ross Burton [Thu, 23 Jul 2026 12:09:13 +0000 (13:09 +0100)] 
configure: only check in the watt library if WATT_ROOT is set

Only look for gethostbyname in libwatt in $WATT_ROOT/lib if WATT_ROOT
has actually been set. This avoids configure trying to search in /lib,
which won't every succeed and can cause problems in cross builds which
check that host paths are not being searched.

Closes #22380

6 days agotidy-up: miscellaneous
Viktor Szakats [Fri, 10 Jul 2026 22:44:25 +0000 (00:44 +0200)] 
tidy-up: miscellaneous

- CMake/CurlTests.c: sync indent with rest of file and most of code.
- cmake: sync term in `_CURL_PREFILL` description with rest of code.
- curl_setup.h: document function relying on `_CRT_SECURE_NO_WARNINGS`.
- tests/http/scorecard.py: typo in message.
- 'Quiche' -> 'quiche'.
- fix comment and formatting nits.

Closes #22378

6 days agomd5: replace magic numbers with `MD5_DIGEST_LEN`
Viktor Szakats [Sun, 28 Jun 2026 18:32:50 +0000 (20:32 +0200)] 
md5: replace magic numbers with `MD5_DIGEST_LEN`

Closes #22377

6 days agotidy-up: fix Perl syntax and formatting nits
Viktor Szakats [Mon, 29 Jun 2026 17:01:04 +0000 (19:01 +0200)] 
tidy-up: fix Perl syntax and formatting nits

Closes #22376

6 days agovms: fix symbol typo and missing closing quotes in `config_h.com`
Viktor Szakats [Mon, 29 Jun 2026 09:27:38 +0000 (11:27 +0200)] 
vms: fix symbol typo and missing closing quotes in `config_h.com`

Closes #22375

6 days agotidy-up: fix comment indentation
Viktor Szakats [Sun, 28 Jun 2026 20:38:51 +0000 (22:38 +0200)] 
tidy-up: fix comment indentation

Closes #22373

7 days agongtcp2: clean up after ngtcp2 in `curl_global_cleanup`
Pavel Sobolev [Tue, 21 Jul 2026 18:47:33 +0000 (21:47 +0300)] 
ngtcp2: clean up after ngtcp2 in `curl_global_cleanup`

Frees the memory allocated by `ngtcp2_crypto_ossl_init`, thus making
Valgrind happy. Works for versions of ngtcp2 >= 1.24.0.

Ref: https://github.com/ngtcp2/ngtcp2/issues/2207

Closes #22363

7 days agodnscache: avoid double unlock
Daniel Stenberg [Tue, 21 Jul 2026 22:05:27 +0000 (00:05 +0200)] 
dnscache: avoid double unlock

Follow-up to 7ad33fe56f25424fb51a1040

Pointed out by Zeropath

Closes #22364

7 days agoscripts: replace/extend `--` with `--end-of-options` in git commands
Viktor Szakats [Wed, 22 Jul 2026 10:22:18 +0000 (12:22 +0200)] 
scripts: replace/extend `--` with `--end-of-options` in git commands

It makes these scripts require Git 2.24.0+ (2019-11-04).

Refs:
https://git-scm.com/docs/gitcli
https://nesbitt.io/2026/07/21/end-of-options.html
https://github.com/git/git/commit/19e8789b236dfe33667747d5523d6689bb59b5ef

Closes #22369

7 days agotool_xattr: add support for Windows alternate data stream
Viktor Szakats [Mon, 20 Jul 2026 08:29:41 +0000 (10:29 +0200)] 
tool_xattr: add support for Windows alternate data stream

Requires a supported filesystem, i.e. NTFS.

Example:
```console
> curl.exe https://curl.se/index.html --output test.txt --xattr --referer https://curl.se/
> cat < test.txt:Zone.Identifier

[ZoneTransfer]
HostUrl=https://curl.se/index.html
ReferrerUrl=https://curl.se/
```

Where newlines are CLRF, `ReferrerUrl` is set when using `--referer`
option.

Also:
- test688: make it test `--referer`.
- document `user.xdg.referrer.url` in `--xattr` man page.

Refs:
https://en.wikipedia.org/wiki/Mark_of_the_Web
https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)
https://learn.microsoft.com/en-us/windows/win32/fileio/file-streams
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/c54dec26-1551-4d3a-a0ea-4fa40f848eb3

Ref: #22345

Closes #22354

8 days agotool_doswin: add stdin relay auth
11soda11 [Tue, 28 Apr 2026 22:13:15 +0000 (00:13 +0200)] 
tool_doswin: add stdin relay auth

Verify the peer with a random number in the background thread.

Closes #21467

8 days agoRELEASE-NOTES: synced
Daniel Stenberg [Tue, 21 Jul 2026 21:55:11 +0000 (23:55 +0200)] 
RELEASE-NOTES: synced

8 days agotest: adjust test_06_13 for 0100::/64 being blackholed
Stefan Eissing [Mon, 20 Jul 2026 11:50:34 +0000 (13:50 +0200)] 
test: adjust test_06_13 for 0100::/64 being blackholed

Fixes #22344
Reported-by: Carlos Henrique Lima Melara
Closes #22355

8 days agourlapi: preserve empty markers in relative URLs
Alb3e3 [Fri, 10 Jul 2026 21:22:11 +0000 (23:22 +0200)] 
urlapi: preserve empty markers in relative URLs

Verified in test 1560

Closes #22298

8 days agothrdpool: retry failed thread starts while items wait
Graham Campbell [Sun, 12 Jul 2026 02:58:19 +0000 (03:58 +0100)] 
thrdpool: retry failed thread starts while items wait

Verified in test 3306

Closes #22303

8 days agohardening: add API guards
Stefan Eissing [Mon, 6 Jul 2026 10:59:45 +0000 (12:59 +0200)] 
hardening: add API guards

Add call stacks to easy and multi instances. Record ongoing API calls
and callback invocations there to detect recursion and not allowed
invocations.

Define enums for easy, multi and callbacks in `api.h`. In `api.c` define
properties for these functions:

- can they recurse
- is the easy/multi handle destroyed during the call or should it be
  good afterwards
- is the call allowed when a multi event callback is ongoing
- is the call allowed when a notification callback is ongoing

Entering a guard
- checks that passed CURL*/CURLM* are GOOD on entering
- checks that easy handle's `mid` is correct and it is known
  for it in the multi.
- checks that call properties are obeyed (recursion, callback checks)
- checks that passed CURL*/CURLM* are GOOD on leaving, unless call is
  known to kill it

Checks for ongoing callbacks inspect the whole call stack and catches
nested invocations (which our current flags can not).

Call stacks in easy/multi handle are fixed size and will deny recursion
when the limit is reached. The current limits are 7 for easy and 15 for
multi now.

Removes:
- multi->in_callback, check is done via call stack
- multi->in_ntfy_cb, check is done via call stack

The overhead in my tests seems minimal, if noticeable at all.

Closes #22237

8 days agolib: reader/writer fixes
Stefan Eissing [Tue, 21 Jul 2026 08:30:42 +0000 (10:30 +0200)] 
lib: reader/writer fixes

- clear writer paused bit when destroying writer stack
- remove the reader paused bit that turned out not to be a good idea

follow-up to b41c28e70af47e1

Closes #22361

8 days agocf-dns: resolve on filter demand
Stefan Eissing [Wed, 15 Jul 2026 15:21:04 +0000 (17:21 +0200)] 
cf-dns: resolve on filter demand

Use separate dns cache entries for addresses (A+AAAA) and HTTPS-RR
results. That makes also "negative" results independent of each other.
Dns cache entries, once in use, can no longer be modified safely, as
concurrent use would require each access then to be done under lock. By
using separate entries, we can update a HTTPS entry without needing to
duplicate an existing address entry for the same host+port.

Connection filters can now ask for DNS resolves. This works at any time
during connection setup and while connect is going on.
`Curl_conn_dns_add_addr_resolve()` and
`Curl_conn_dns_add_https_resolve()` are used for that. They check if the
resolve is already ongoing, can be added to a resolve not started yet
or, as last resort, create a new filter instance and add it to the
connection (it's easier to add more filters than making the same filter
handle multiple resolves. Since DNS filters are removed once the
connection is established, there is no later penalty).

HTTPS-RR queries are added by the `HTTPS-CONNECT`, `SSL` and `QUIC`
filters. The latter will only do that when ECH is configured and
supported. That means we trigger HTTPS-RR queries only when the results
matter.

Add test_22_06 for ALPN influenced via HTTPS-RR when tunneling through a
proxy. This did not work before.

Adjust test2100 to use https: as the previous http: URL no longer
triggers HTTPS-RR resolves.

Closes #22216

9 days agouint-spbset: reused empty chunks
Stefan Eissing [Fri, 17 Jul 2026 12:10:03 +0000 (14:10 +0200)] 
uint-spbset: reused empty chunks

Fix chunk allocations by reusing existing empty chunks when a new offset
is needed. Before this fix, spbsets would only ever grow with added
numbers outside the range of existing chunks.

Closes #22340

9 days agohttp: stop dropping large custom headers
Graham Campbell [Thu, 16 Jul 2026 12:29:44 +0000 (13:29 +0100)] 
http: stop dropping large custom headers

Closes #22336

9 days agohttp: avoid length underflow in Curl_compareheader
Graham Campbell [Thu, 16 Jul 2026 15:30:19 +0000 (16:30 +0100)] 
http: avoid length underflow in Curl_compareheader

Closes #22338

9 days agolib: client writer tweaks
Stefan Eissing [Thu, 16 Jul 2026 09:26:33 +0000 (11:26 +0200)] 
lib: client writer tweaks

- keep pause state at request
- keep presense of content decoding writers at request
- only add cw-pause writer when content decoding happens
- define macro for passing data down the writer chain

scorecard: add option to test with h2o server

Closes #22335

9 days agocf-quiche.c: minor tidy-ups
Daniel Stenberg [Mon, 20 Jul 2026 21:44:38 +0000 (23:44 +0200)] 
cf-quiche.c: minor tidy-ups

Pointed out by the GitHub AI thing

Closes #22360

9 days agolib: add multi_wakeup_internal
Stefan Eissing [Wed, 8 Jul 2026 08:34:51 +0000 (10:34 +0200)] 
lib: add multi_wakeup_internal

For threaded resolving, added an additional socket/eventfd pair to the
multi handle for notifications from threads. The original "double use"
of the standard wakeup pair did lead to regressions for apps.

The API definition of curl_multi_poll/wait/wakeup is pretty tight
regarding what effects what and adding notifications on top of that
broke what apps perceived to be the contract.

Fixes #22272
Reported-by: Sergei Zimmerman
Closes #22274

9 days agovtls_scache: allocate absolute filename on heap (Windows)
Viktor Szakats [Mon, 20 Jul 2026 15:34:20 +0000 (17:34 +0200)] 
vtls_scache: allocate absolute filename on heap (Windows)

To allow any full path lengths, beyond the 260 characters allowed by
`_MAX_PATH`.

Follow-up to fa0ccd9f1fbbbd77bf50b26e3ba231ea6c729474 #15774

Closes #22357

9 days agotests: fix type promotion on 32-bit arches in http test code
Keng-Yu Lin [Sun, 28 Jun 2026 20:43:01 +0000 (17:43 -0300)] 
tests: fix type promotion on 32-bit arches in http test code

As reported in the bug:

> On a 32-bit architecture (i386):
> 1. `chunks * chunk_size` evaluates to `unsigned int` (32-bit
>    unsigned).
> 2. Due to Usual Arithmetic Conversions in C, the signed `-1` (int)
>    operand of the ternary operator is promoted to `unsigned int`,
>    yielding `4294967295` (0xFFFFFFFF).
> 3. The ternary operator returns `4294967295` as an `unsigned int`.
> 4. This unsigned value is then assigned to `r->clength` (apr_off_t,
>    64-bit signed). Since the source is unsigned, it is zero-extended,
>    resulting in `r->clength` becoming `+4294967295`.
> 5. The subsequently executed check `if(r->clength >= 0)` evaluates to
>    true.
> 6. Inside the block, `apr_ltoa(r->pool, (long)r->clength)` casts it to
>    a 32-bit signed `long` (on 32-bit platforms), which truncates it
>    back to `-1`, formatting it as "-1" and sending the
>    "Content-Length: -1" header.
>
> On a 64-bit architecture (amd64), `size_t` is 64-bit, and `-1` (32-bit
> int) is promoted to `unsigned long` (64-bit), yielding
> `18446744073709551615`. When assigned to `r->clength` (64-bit signed),
> it wraps back to `-1`, which correctly skips the Content-Length
> generation.
>
> This type promotion mismatch can be safely fixed by avoiding the
> signed/unsigned mixture in the ternary operator.

Origin: debian, https://bugs.debian.org/1140793
Bug-Debian: https://bugs.debian.org/1140793

These are standard Debian patches' trailers, I can get rid of then if you prefer.

I've tested the fix using [debusine on i386 runner](https://debusine.debian.net/debian/developers/artifact/4083252/raw/log):

> 782s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[http/1.0] PASSED [ 17%]
> 782s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[http/1.1] PASSED [ 18%]
> 782s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[h2] PASSED [ 18%]

Versus the [i386 run in Debian's infrastructure](https://debusine.debian.net/debian/developers/artifact/4084220/raw/log):

> 2690s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[http/1.0] FAILED [ 17%]
> 2690s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[http/1.1] PASSED [ 18%]
> 2690s tests/http/test_05_errors.py::TestErrors::test_05_04_unclean_tls_shutdown[h2] PASSED [ 18%]

Closes #22210

11 days agotimeval: rename timer frequency variable
Viktor Szakats [Sat, 18 Jul 2026 01:18:11 +0000 (03:18 +0200)] 
timeval: rename timer frequency variable

It's no longer a global variable.

Follow-up to 1027d07704836c8d642abbed34ab98535de47433 #22346

Closes #22347

11 days agotimeval: make `Curl_freq` variable static (Windows)
Viktor Szakats [Sat, 18 Jul 2026 00:42:39 +0000 (02:42 +0200)] 
timeval: make `Curl_freq` variable static (Windows)

Follow-up to 64d4f5c4b660be112a02be104e7314e8bf264caa #20852

Closes #22346

12 days agocfilters: fix event-based connection shutdown
Graham Campbell [Sun, 12 Jul 2026 16:52:16 +0000 (17:52 +0100)] 
cfilters: fix event-based connection shutdown

- Adjust pollset during connection shutdown.

- Separate the FIRSTSOCKET and SECONDSOCKET check so that one being in
  connect or shutdown no longer adds poll events for the other.

- Fix shutdown state evaluation (as detailed below).

- Add a unit test for Curl_conn_adjust_pollset.

- Add a client for event testing.

- Test that shutdown sockets stay with the socket callback until done.

The pollset predicate now reads the connection's own shutdown state
rather than going through data->conn, and the EXPIRE_SHUTDOWN arming in
cshutdn_perform() works again: next_expire_ms started at 0 and could
never be set, so a peer that never sends a close_notify would still park
its connection forever, timeout or not.

Reported-by: pszemus@users.noreply.github.com
Fixes https://github.com/curl/curl/issues/22282
Closes https://github.com/curl/curl/pull/22304

13 days agourlapi: allow URLs to not have userauth (hostname)
Daniel Stenberg [Mon, 13 Jul 2026 17:13:45 +0000 (19:13 +0200)] 
urlapi: allow URLs to not have userauth (hostname)

Verified in test 1560

Fixes #22279
Reported-by: Bill Mill
Closes #22313

13 days agotool_cb_prg: avoid integer overflows
Daniel Stenberg [Tue, 14 Jul 2026 20:49:38 +0000 (22:49 +0200)] 
tool_cb_prg: avoid integer overflows

Verify in test 2093

Fixes #22316
Reported-by: xmoezzz on github
Closes #22328

13 days agolib1560: test CURLU_DEFAULT_PORT more
Daniel Stenberg [Mon, 13 Jul 2026 19:52:53 +0000 (21:52 +0200)] 
lib1560: test CURLU_DEFAULT_PORT more

Closes #22314