]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
3 months agotidy-up: merge root `packages` directory into `projects`
Viktor Szakats [Mon, 12 Jan 2026 18:44:14 +0000 (19:44 +0100)] 
tidy-up: merge root `packages` directory into `projects`

To simplify the directory layout.

- OS400 and vms support move from `packages` to `projects`.

- Windows README and `generate.bat` files move from `projects`
  to `projects/Windows`.

Closes #20271

3 months agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 12 Jan 2026 22:18:48 +0000 (23:18 +0100)] 
RELEASE-NOTES: synced

3 months agospacecheck: show line numbers of duplicate empty lines
Viktor Szakats [Mon, 12 Jan 2026 16:21:42 +0000 (17:21 +0100)] 
spacecheck: show line numbers of duplicate empty lines

Also:
- drop separate check for 3 or more consecutive empty lines.

Ref: https://github.com/curl/curl/pull/20266#issuecomment-3738955165

Closes #20269

3 months agoMakefile.am: drop stray VC project files from dist
Viktor Szakats [Mon, 12 Jan 2026 20:38:21 +0000 (21:38 +0100)] 
Makefile.am: drop stray VC project files from dist

Most files were removed 2 years ago, the remaining two do not work
without those.

Follow-up to 3d93d18dede1d0f7fa54c6aa57300f9de12c5476 #12288

Closes #20272

3 months agoMakefile.am: delete RPM targets referencing non-existent files
Viktor Szakats [Mon, 12 Jan 2026 18:57:06 +0000 (19:57 +0100)] 
Makefile.am: delete RPM targets referencing non-existent files

Follow-up to bae0d473f5912d38fc8da1f9850a70b015b53c9e #3331

Closes #20270

3 months agotool_cb_hdr: suppress header output when --out-null
Jay Satiro [Sun, 11 Jan 2026 19:56:24 +0000 (14:56 -0500)] 
tool_cb_hdr: suppress header output when --out-null

This change brings --out-null more in line with the documentation which
says --out-null is expected to behave like a portable -o /dev/null.

Prior to this change curl did not suppress the header output from --head
when --out-null was used to suppress output.

Assisted-by: Daniel Stenberg
Reported-by: Andrew Kvalheim
Ref: https://curl.se/docs/manpage.html#--out-null

Fixes https://github.com/curl/curl/discussions/20235
Closes https://github.com/curl/curl/pull/20256

3 months agobuild: add `curl-lint`/`lint` targets, `CURL_LINT` cmake option
Viktor Szakats [Sat, 3 Jan 2026 16:08:18 +0000 (17:08 +0100)] 
build: add `curl-lint`/`lint` targets, `CURL_LINT` cmake option

To run checksrc and spacecheck on the source tree. Also for cmake
to sync up with autotools' `checksrc` target.

- cmake: `curl-lint`
  With `-DCURL_LINT=ON`, checks run automatically for all targets.
- autotools: `lint`

Closes #20175

3 months agoGHA/checkdocs: drop duplicate spacecheck job
Viktor Szakats [Mon, 12 Jan 2026 15:19:14 +0000 (16:19 +0100)] 
GHA/checkdocs: drop duplicate spacecheck job

No longer necessary after making GHA/checksrc also run on `*.md` file
changes.

Reported-by: Daniel Stenberg
Bug: https://github.com/curl/curl/pull/20266#issuecomment-3738955165
Follow-up to 3800a26582af8b355e96cf80135ba7642e816ed6 #18935
Follow-up to 9acecc923df9ea8675f026ab173e8f2a6051822e #15423
Closes #20268

3 months agotool_filetime: sync dummy macro signature with function prototype
Patrick Monnerat [Sun, 11 Jan 2026 13:04:14 +0000 (14:04 +0100)] 
tool_filetime: sync dummy macro signature with function prototype

Closes #20265

3 months agortsp: match connection_check procedure with required signature
Patrick Monnerat [Sun, 11 Jan 2026 13:00:14 +0000 (14:00 +0100)] 
rtsp: match connection_check procedure with required signature

Follow-up to e3691612ea1acb2

Closes #20265

3 months agoGHA/non-native: disable FreeBSD arm CI jobs (upstream breakage)
Viktor Szakats [Mon, 12 Jan 2026 14:51:45 +0000 (15:51 +0100)] 
GHA/non-native: disable FreeBSD arm CI jobs (upstream breakage)

Package manager is not finding packages.

FreeBSD 15, moving to cmake, dropping impacket, stunnel, ldap, kerberos,
could not fix it.

Closes #20267

3 months agomimepost: allocate main struct on-demand
Daniel Stenberg [Mon, 12 Jan 2026 08:30:25 +0000 (09:30 +0100)] 
mimepost: allocate main struct on-demand

This makes the easy handle 432 bytes smaller (totally 5352 bytes on my
rather maximized Linux 64 bit build). The 440 byte mimepost struct is
now allocated only when needed.

Closes #20260

3 months agourldata: change 'keep_post' into three distinct bitfields
Daniel Stenberg [Mon, 12 Jan 2026 10:07:01 +0000 (11:07 +0100)] 
urldata: change 'keep_post' into three distinct bitfields

Closes #20262

3 months agoaltsvc: only accept 17 byte dates from files
Daniel Stenberg [Mon, 12 Jan 2026 07:05:49 +0000 (08:05 +0100)] 
altsvc: only accept 17 byte dates from files

Since the date format is fixed there is no need to accept more data.

Update test355 to verify reject of too long date in alt-svc file

This test case was originally supposed to verify alt-svc loading from a
file but never did because it was done incorrectly.

Now it verifies that a too long date in the input file makes curl
disregard the entry.

Closes #20259

3 months agotool_operate: split single_transfer into sub functions
Daniel Stenberg [Sun, 11 Jan 2026 16:47:49 +0000 (17:47 +0100)] 
tool_operate: split single_transfer into sub functions

To make it more manageable and less complex

Closes #20258

3 months agolibssh: simplify myssh_statemach_act()
Daniel Stenberg [Sun, 11 Jan 2026 10:15:00 +0000 (11:15 +0100)] 
libssh: simplify myssh_statemach_act()

Reduce complexity by splitting out sub functions.

Made myssh_quote_error() to reduce code duplication.

Closes #20252

3 months agoGHA: delete disable-man-db hack, runners doing it by default now
Viktor Szakats [Sun, 11 Jan 2026 14:28:14 +0000 (15:28 +0100)] 
GHA: delete disable-man-db hack, runners doing it by default now

Refs:
https://github.com/actions/runner-images/commit/1f107542aed3879d2565b59d48cb3cb7776b342f
https://github.com/actions/runner-images/pull/13268
https://github.com/actions/runner-images/issues/13213

Follow-up to 5acba8bc367c0248e3cacb05e60aba209c0821c9 #17181

Closes #20254

3 months agoGHA: delete new apt sources adding the flaky distro source
Viktor Szakats [Sun, 11 Jan 2026 13:53:41 +0000 (14:53 +0100)] 
GHA: delete new apt sources adding the flaky distro source

CI workflows deleted apt package source `microsoft-prod.list` due to
flakiness seen in the past with those sources. Sources are still flaky
and they are now also used from `azure-cli.sources` which is included
by default by the runner images. Add it to the delete list.

Also: remove another new, unnecessary (for curl CI) package source seen
on the `ubuntu-24.04-arm` runner, for good measure, and performance.

Fixing:
```
Reading package lists...
E: Failed to fetch https://packages.microsoft.com/repos/azure-cli/dists/noble/InRelease  403  Forbidden [IP: 13.107.246.66 443]
E: The repository 'https://packages.microsoft.com/repos/azure-cli noble InRelease' is no longer signed.
Error: Process completed with exit code 100.
```
Ref: https://github.com/curl/curl/actions/runs/20896127602/job/60034941964?pr=20142#step:2:79

Follow-up to 303bb8785c45fcad879c9c1c86e9c7e09ff68097 #13473

Closes #20253

3 months agowolfssl: fix build without USE_BIO_CHAIN
Daniel Stenberg [Sun, 11 Jan 2026 09:50:19 +0000 (10:50 +0100)] 
wolfssl: fix build without USE_BIO_CHAIN

Reported-by: Megamouse on github
Fixes #20250
Closes #20251

3 months agoaltsvc: move logic from setopt into Curl_altsvc_ctrl()
Daniel Stenberg [Sat, 10 Jan 2026 22:17:58 +0000 (23:17 +0100)] 
altsvc: move logic from setopt into Curl_altsvc_ctrl()

To keep it all in one place.

Closes #20247

3 months agoGHA: include runner CPU arch in cache keys (revert)
Viktor Szakats [Sun, 11 Jan 2026 00:07:43 +0000 (01:07 +0100)] 
GHA: include runner CPU arch in cache keys (revert)

Turns out in practice the internal cache name contains the arch where it
matters (arm or dual-arch local builds), which is part of the cache key
string. Drop `runner.arch` to avoid two arch strings in the key.

Cache keys without an explicit arch designator mean intel.

Revert ff78af5752fdf580e5beef743f932cc1625228c3 #20234

Closes #20249

3 months agoGHA/linux: fix 'mbedtls' internal name confusion
Viktor Szakats [Sat, 10 Jan 2026 23:05:43 +0000 (00:05 +0100)] 
GHA/linux: fix 'mbedtls' internal name confusion

`mbedtls-arm` and `mbedtls-prev` were matching `contains()` expressions
looking for `mbedtls`. It caused an unnecessary cache restore and an
redundant mbedtls build on bumps, and made the build flavors require
different local directory names to avoid this accidental collision.

Also drop `-threadsafe` from internal names. All local builds are.

Follow-up to 88060353440df4e1b7167c180b39074fd2ab457a #20240
Follow-up to 3a305831d1a9d10b2bfd4fa3939ed41275fee7f7 #19077

Closes #20248

3 months agoGHA/linux: move 6 jobs with locally built dependencies to arm
Viktor Szakats [Sat, 10 Jan 2026 21:47:41 +0000 (22:47 +0100)] 
GHA/linux: move 6 jobs with locally built dependencies to arm

All libresll jobs, wolfssl-all, and one mbedtls job.

As noted earlier, arm jobs run faster than intel ones, especially
valgrind steps that run almost twice as fast. Package install runs
slower, but this is offset by faster build and test steps, even in
non-valgrind jobs.

Follow-up to ff78af5752fdf580e5beef743f932cc1625228c3 #20234
Follow-up to 2b0d8dcc16c531d3154ab54347a3eaabf9bd2c7d #20231

Closes #20246

3 months agoGHA: include runner CPU arch in cache keys
Viktor Szakats [Fri, 9 Jan 2026 17:41:06 +0000 (18:41 +0100)] 
GHA: include runner CPU arch in cache keys

To clarify the arch for cache entries, also to allow building/caching
multiple archs in parallel if necessary.

Closes #20234

3 months agoplan9: drop special build and orphaned references
Viktor Szakats [Sat, 10 Jan 2026 13:42:19 +0000 (14:42 +0100)] 
plan9: drop special build and orphaned references

Would need 64-bit support.

Ref: https://github.com/curl/curl/pull/20233#issuecomment-3732556015
Follow-up to 0159100f4f782432fa3d27998dbea7b827ffba2d #20233

Closes #20243

3 months agourldata: restore bitfield to unsigned int
Daniel Stenberg [Sat, 10 Jan 2026 21:22:27 +0000 (22:22 +0100)] 
urldata: restore bitfield to unsigned int

Bug: https://github.com/curl/curl/pull/20209#pullrequestreview-3647160739

Reported-by: Patrick Monnerat
Follow-up to e3691612ea1acb2
Closes #20244

3 months agocmake: drop unused `LONG_LONG` reference from Windows prefills
Viktor Szakats [Sat, 10 Jan 2026 12:29:02 +0000 (13:29 +0100)] 
cmake: drop unused `LONG_LONG` reference from Windows prefills

It's no longer used in curl.

Follow-up to 0159100f4f782432fa3d27998dbea7b827ffba2d #20233

Closes #20241

3 months agotool: improve error/warning messages when output filename sanitization fails
Viktor Szakats [Tue, 30 Dec 2025 10:21:05 +0000 (11:21 +0100)] 
tool: improve error/warning messages when output filename sanitization fails

On MS-DOS (OOM and bad filename) and Windows (OOM only).

Given the rarity of both platform and error, we make a compromise and
return an unrelated libcurl error (43) in case of a bad output filename
on MS-DOS.

After:
```
$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/ --output out.txt
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output filename
curl: (43) A libcurl function was given a bad argument

$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: bad output filename
curl: (43) A libcurl function was given a bad argument
```

Before:
```
$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output glob
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output glob
curl: (3) URL using bad/illegal format or missing URL

$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: Failed to extract a filename from the URL to use for storage
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: Failed to extract a filename from the URL to use for storage
curl: (3) URL using bad/illegal format or missing URL
```

Ref: #20116 (simpler reboot of)
Ref: #20113 #20121
Ref: 40c1748af503cf54443e17db5f537b548faa9328 #20198
Ref: eb7f5b71e5b3fe1e73f6065c78ad0143ff580916 #20143
Ref: 8c02407bef55baaee8d721a7e5f7f0ba8d91dd47 #20125
Fixes #20044
Closes #20199

3 months agoKNOWN_BUGS.md: absolute Unix domain filename for SOCKS on Windows
Daniel Stenberg [Fri, 9 Jan 2026 22:20:11 +0000 (23:20 +0100)] 
KNOWN_BUGS.md: absolute Unix domain filename for SOCKS on Windows

Closes #20236
Closes #19825

3 months agoGHA: update awslabs/aws-lc to v1.66.2
renovate[bot] [Sat, 10 Jan 2026 01:08:30 +0000 (01:08 +0000)] 
GHA: update awslabs/aws-lc to v1.66.2

Closes #20238

3 months agolib: use (u)int64_t instead of long long
Daniel Stenberg [Fri, 9 Jan 2026 16:49:26 +0000 (17:49 +0100)] 
lib: use (u)int64_t instead of long long

Remove config-plan9.h because it does not support 64 bit, meaning it has
not been working for years.

Closes #20233

3 months agoGHA/linux: fix 'libressl' internal name confusion
Viktor Szakats [Sat, 10 Jan 2026 10:47:56 +0000 (11:47 +0100)] 
GHA/linux: fix 'libressl' internal name confusion

`libressl-filc` was matching `contains()` expressions looking for
`libressl`, causing build confusion and failure in specific cases.

Rename `libressl` to `libressl-c` to avoid this. Also rename the cache
id for consistency, though not necessary for the fix.

Bug: https://github.com/curl/curl/actions/runs/20860412340/job/59938315276
Follow-up to c2624818739916652a041164939afaba5bb5ee73 #19407
Cherry-picked from #20234

Closes #20240

3 months agocmake: reference OpenSSL and ZLIB imported targets only when enabled
Joshua VandaĆ«le [Wed, 7 Jan 2026 23:55:45 +0000 (00:55 +0100)] 
cmake: reference OpenSSL and ZLIB imported targets only when enabled

This otherwise broke building on a parent with a static library which is
available but disabled (e.g. CURL_ZLIB is set to OFF but ZLIB::ZLIB
exists)

Closes #20217

3 months agoGHA: switch 12 Linux jobs to arm64
Viktor Szakats [Fri, 9 Jan 2026 14:51:04 +0000 (15:51 +0100)] 
GHA: switch 12 Linux jobs to arm64

More cost-effective and seems as fast or faster than Intel.

In particular, valgrind seems to be almost 2x fast. So fast the job pair
could fit under 10 minutes if merged again (but would be the longest in
GHA/Linux.)

Installing packages is slightly slower. The package repo is Ubuntu's
which is slower than the Azure mirror used on Intel (unless Azure is
broken, which happened a lot last year).

To add to more jobs, the locally built deps also need to be migrated.

Also:
- add workaround for failing sshd server on Linux arm runners, caused by
  world-writable `HOME` directory.

Closes #20231

3 months agocmake: silence useless compiler warnings triggered by the FASTBuild generator
Viktor Szakats [Thu, 8 Jan 2026 13:28:02 +0000 (14:28 +0100)] 
cmake: silence useless compiler warnings triggered by the FASTBuild generator

Silencing all of these:
```
11>/tmp/_fbuild.tmp/0x0752c383/core_2/70816E19/krb5_sspi.c:1:5: error: this style of line directive is a GNU extension [-Werror,-Wgnu-line-marker]
    1 | # 1 "<built-in>"
      |     ^
/path/to/curl/lib/vauth/krb5_sspi.c:29:6: error: this style of line directive is a GNU extension [-Werror,-Wgnu-line-marker]
   29 | # 26 "/path/to/curl/lib/vauth/krb5_sspi.c"
      |      ^
[...]
```

FASTBuild is slightly faster than Ninja in basic (single-machine, build
from scratch) cases (and can be more faster in other build cases). It
doesn't support unity builds. Maybe it can bring slightly better
performance to non-unity cmake CI jobs, in jobs having an 'install
prereq' phase already, and installing the fastbuild package being faster
than this gain. It overall seems marginal if any in curl CI. At least
for now. But it doesn't hurt if it works, and may be useful for some.

Requires CMake 4.2+.

That said this workaround may have a better place within CMake.

Refs:
https://www.kitware.com/cmake-fastbuild-distributed-cached-and-fast/
https://cmake.org/cmake/help/latest/generator/FASTBuild.html
https://github.com/fastbuild/fastbuild
https://fastbuild.org/docs/home.html

Closes #20230

3 months agoGHA: update dependency cloudflare/quiche to v0.24.7
renovate[bot] [Fri, 9 Jan 2026 14:49:46 +0000 (14:49 +0000)] 
GHA: update dependency cloudflare/quiche to v0.24.7

Closes #20224

3 months agopytest: bump quiche version check update
Stefan Eissing [Fri, 9 Jan 2026 14:23:36 +0000 (15:23 +0100)] 
pytest: bump quiche version check update

Since the Lazy Lucas did not manage to get the fix merged in 0.24.7,
increase the pytest version check number in the hope that it will happen
in the next release.

Closes #20229

3 months agobuild: detect and include `inttypes.h` again (revert)
Viktor Szakats [Thu, 8 Jan 2026 14:54:17 +0000 (15:54 +0100)] 
build: detect and include `inttypes.h` again (revert)

Since not using `PRI*` macros, it isn't needed.

Follow-up to 13c1a934144e98d06214a043ff4538791c7d9583 #20215
Revert 4c9e4e99c107b8d0bda5b204c5b69a50425567b9 #20208

Closes #20225

3 months agourldata: convert 'long' fields to fixed variable types
Daniel Stenberg [Thu, 8 Jan 2026 22:57:58 +0000 (23:57 +0100)] 
urldata: convert 'long' fields to fixed variable types

Makes sure they work identically cross-platform, as long varies in size
between Windows vs non-Windows. Makes Curl_easy 16 bytes smaller on 64
bit Linux.

This reduces support for the RTSP cseq counters to 32 bit (down from 63
bit previously on 64 bit non-Windows), but it is probably safe.
Implementations probably rarely support anything above 32 bits anyway
and this is how curl has worked on Windows since always.

There is now only one 'long' left in urldata.h (in the ssl_config_data
struct). That field, certverifyresult, is used to store the response
code from TLS backend code and in the OpenSSL case that function returns
an actual 'long'.

Closes #20227

3 months agospacecheck: exclude `RELEASE-NOTES` from a check
Viktor Szakats [Fri, 9 Jan 2026 08:45:30 +0000 (09:45 +0100)] 
spacecheck: exclude `RELEASE-NOTES` from a check

3 months agocurl: limit Windows-specific code to Windows builds, other tidy-ups
Viktor Szakats [Wed, 7 Jan 2026 19:26:28 +0000 (20:26 +0100)] 
curl: limit Windows-specific code to Windows builds, other tidy-ups

Prior to this patch, some Windows logic, including a Windows-specific
warning message was compiled in for all platforms.

Also:
- fix double space in warning message on UWP.
- formatting.

Follow-up to 9a2663322c330ff11275abafd612e9c99407a94a #17572

Closes #20213

3 months agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 9 Jan 2026 06:54:36 +0000 (07:54 +0100)] 
RELEASE-NOTES: synced

Bump to 8.18.1 tentatively

3 months agoCOPYING: bump copyright year range to 1996 - 2026
Daniel Stenberg [Thu, 8 Jan 2026 22:19:44 +0000 (23:19 +0100)] 
COPYING: bump copyright year range to 1996 - 2026

3 months agongtcp2: stabilize recv
Stefan Eissing [Thu, 8 Jan 2026 10:19:39 +0000 (11:19 +0100)] 
ngtcp2: stabilize recv

When receiving on a stream that already failed or has already been closed,
return the matching error code without touching the connection. In case
the connection shows errors, e.g. the server closed, those errors should
not have impact on an already failed/closed stream.

This might mitigate flakiness in pytest 07_13 where unexpected errors
occur after a successful upload.

Closes #20220

3 months agourldata: switch to uint* types more widely
Daniel Stenberg [Wed, 7 Jan 2026 13:58:17 +0000 (14:58 +0100)] 
urldata: switch to uint* types more widely

In particular, it turns 'unsigned long' into 'uint32_t' since the code
needs to build and run just as fine on Windows which has 32 bit longs,
so we know the code works with 32 bit field versions.

This makes Curl_easy 56 bytes smaller on my 64 bit Linux (maximized
build).

Closes #20209

3 months agocurl: rename a struct OutStruct field to 'regular_file'
Daniel Stenberg [Thu, 8 Jan 2026 17:23:26 +0000 (18:23 +0100)] 
curl: rename a struct OutStruct field to 'regular_file'

From 's_isreg'. It explains better in plain English what it is for.

Closes #20222

3 months agotool_operate: remove 'else' for VMS
Daniel Stenberg [Thu, 8 Jan 2026 17:09:04 +0000 (18:09 +0100)] 
tool_operate: remove 'else' for VMS

It seems malplaced as it then avoids the following logic when invoked
from a VMS shell and that seems unlikely to be desired.

Based on code review. I have no system to try this on.

Follow-up to f1261bcdd7f
Closes #20221

3 months agourldata.h: remove two forward-declared structs not used
Daniel Stenberg [Wed, 7 Jan 2026 13:44:15 +0000 (14:44 +0100)] 
urldata.h: remove two forward-declared structs not used

Closes #20206

3 months agolib: remove uses of PRIu32 by adding "hack" for DJGPP
Daniel Stenberg [Wed, 7 Jan 2026 21:21:40 +0000 (22:21 +0100)] 
lib: remove uses of PRIu32 by adding "hack" for DJGPP

Avoid using PRIu32 and PRId32 in product source code. We don't need it.
It reduces readability. It is also inconsistent since unsigned int has
the same size and does not require the define.

DJGPP warns about using %u for uint32_t by default because it seems to
typedef it to unsigned long instead of unsigned int. Which even that is
annoying since long and int are both 32 bit on this platform.

We use our own *printf() implementation and we know this is safe.

This work-around defines uint32_t for DJGPP into unsigned int to avoid
the warnings and thus the need to use PRIu32 and PRId32.

Closes #20215

3 months agodocs: explicitly call out Slowloris as not a security flaw
JimFuller-RedHat [Thu, 8 Jan 2026 08:55:42 +0000 (09:55 +0100)] 
docs: explicitly call out Slowloris as not a security flaw

Closes #20219

3 months agomprintf: drop old sprintf fallback
Daniel Stenberg [Thu, 8 Jan 2026 08:10:38 +0000 (09:10 +0100)] 
mprintf: drop old sprintf fallback

1. No modern systems lack snprintf()

2. If there actually exist any such systems, they get to manage without
   floating point output.

Closes #20218

3 months agotool_dirhie: drop superfluous `F_OK` fallback (Windows)
Viktor Szakats [Wed, 7 Jan 2026 21:11:58 +0000 (22:11 +0100)] 
tool_dirhie: drop superfluous `F_OK` fallback (Windows)

Follow-up to cb5ba675a73e7ef9e8ea0ce913bf15ba63f87d1f

Closes #20214

3 months agoGHA/macos: switch one H3 pytest job to cmake
Viktor Szakats [Wed, 7 Jan 2026 16:10:20 +0000 (17:10 +0100)] 
GHA/macos: switch one H3 pytest job to cmake

To:
- see if build tool makes a difference for flaky 8x pytest slowdowns.
- to make this job finished faster.

`curl -V`, number of runtests (1793) and pytests (568/159) verified
to remain the same.

Closes #20211

3 months agoGHA/non-native: restore MS-DOS jobs
Viktor Szakats [Wed, 7 Jan 2026 11:54:35 +0000 (12:54 +0100)] 
GHA/non-native: restore MS-DOS jobs

In `!ssl` variant.

It's useful to catch `uint32_t` mismatches with `unsigned int` or its
printf mask.

Also add Renovate version bump rule.

It takes about 1m (autotools) + 30s (cmake) in CI.

Bug: https://github.com/curl/curl/pull/20199#discussion_r2666363334
Follow-up to 8881a52ab0bc7f8cdaad3161e189570d69f0cd3c #20210
Follow-up to e70436a88a7ba16f6a49237054dde41f181fd9c4 #20200
Follow-up to 0630e66cb4044892ec137c3357852fe025746f35 #18338

Closes #20204

3 months agotests: fix to use `uint32_t` where necessary
Viktor Szakats [Wed, 7 Jan 2026 15:45:48 +0000 (16:45 +0100)] 
tests: fix to use `uint32_t` where necessary

Fixes MS-DOS DJGPP buidls, possibly others.

Follow-up to e70436a88a7ba16f6a49237054dde41f181fd9c4 #20200
Follow-up to 4701a6d2ae9f0b66a0feac4061868e944353449b #19695

Closes #20210

3 months agolib: sync printf masks with `uint32_t` types
Viktor Szakats [Tue, 6 Jan 2026 22:50:48 +0000 (23:50 +0100)] 
lib: sync printf masks with `uint32_t` types

Also adjust a printf mask for signedness.

Fixing with MS-DOS DJGPP gcc 12.2.0:
```
lib/conncache.c:612:22: error: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:394:22: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:520:20: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:520:20: error: format '%u' expects argument of type 'unsigned int', but argument 5 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:611:20: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:614:22: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:887:20: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:887:20: error: format '%u' expects argument of type 'unsigned int', but argument 5 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:2719:26: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:2725:30: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:2729:28: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:3126:34: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:3348:34: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi.c:3991:28: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ev.c:343:24: error: format '%u' expects argument of type 'unsigned int', but argument 6 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ev.c:413:24: error: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ev.c:584:36: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ntfy.c:113:34: error: format '%d' expects argument of type 'int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ntfy.c:113:34: error: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'}
lib/multi_ntfy.c:171:22: error: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'}
lib/url.c:883:22: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
lib/url.c:889:22: error: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'}
```

Bug: https://github.com/curl/curl/pull/20199#discussion_r2666363334
Follow-up to 4c9e4e99c107b8d0bda5b204c5b69a50425567b9 #20208

Closes #20200

3 months agobuild: detect and include `inttypes.h` again
Viktor Szakats [Tue, 6 Jan 2026 22:50:48 +0000 (23:50 +0100)] 
build: detect and include `inttypes.h` again

For `PRI*` printf masks for fixed-size C99 types.

Also:
- add simple fallback for `PRIu32`, `PRIx32`, if `inttypes.h` is
  missing.

Cherry-picked from #20200
Ref: #20207
Follow-up to 4701a6d2ae9f0b66a0feac4061868e944353449b #19695
Ref: 60359ad5049c42f333ac179a58cda87d6e4143a0 #12275
Closes #20208

3 months agourlapi: split parts of parseurl() into sub functions
Daniel Stenberg [Wed, 7 Jan 2026 08:26:14 +0000 (09:26 +0100)] 
urlapi: split parts of parseurl() into sub functions

- parse_file
- parse_scheme
- guess_scheme
- handle_fragment
- handle_query
- handle_path

Closes #20205

3 months agohttp/3: add description for known server error codes
Stefan Eissing [Wed, 7 Jan 2026 11:12:29 +0000 (12:12 +0100)] 
http/3: add description for known server error codes

When a server resets a stream with an error code, list that code
and its known name in the failure message of the transfer.

Ref: #20195
Closes #20202

3 months agoGHA/macos: merge two autotools `!ssl` jobs into others, switch one to cmake
Viktor Szakats [Wed, 7 Jan 2026 11:25:53 +0000 (12:25 +0100)] 
GHA/macos: merge two autotools `!ssl` jobs into others, switch one to cmake

Number of jobs down to 34 (from 56 at end of last year.)
Out of them 7 autotools (was 24 at end of last year.)

Also:
- stop install brew packages preinstalled.
- make some dependency options explicit.

Closes #20203

3 months agoconfig-plan9: set `HAVE_STDINT_H` again
Viktor Szakats [Wed, 7 Jan 2026 09:28:02 +0000 (10:28 +0100)] 
config-plan9: set `HAVE_STDINT_H` again

Follow-up to 1ecf2f11136f967deff6d2c124127250d2756c48 #16585 #15907
Follow-up to 60359ad5049c42f333ac179a58cda87d6e4143a0 #12275

Closes #20201

3 months agoRELEASE-NOTES: synced curl-8_18_0
Daniel Stenberg [Wed, 7 Jan 2026 06:56:22 +0000 (07:56 +0100)] 
RELEASE-NOTES: synced

curl 8.18.0 release

3 months agoTHANKS: add contributors from 8.18.0
Daniel Stenberg [Wed, 7 Jan 2026 06:56:22 +0000 (07:56 +0100)] 
THANKS: add contributors from 8.18.0

3 months agoVERSIONS.md: add date for 8.18.0, mention 8.19.0 is pending
Daniel Stenberg [Wed, 7 Jan 2026 06:56:22 +0000 (07:56 +0100)] 
VERSIONS.md: add date for 8.18.0, mention 8.19.0 is pending

3 months agotool_urlglob: fix propagating OOM error from `sanitize_file_name()`
Viktor Szakats [Tue, 6 Jan 2026 18:34:53 +0000 (19:34 +0100)] 
tool_urlglob: fix propagating OOM error from `sanitize_file_name()`

Make sure to convert a low-level OOM error code a libcurl one, to make
the curl tool to display an accurate error code and messages. On Windows
and MS-DOS.

Improving:
```
$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/ --output out.txt
[...]
curl: (3) URL using bad/illegal format or missing URL
```
to:
```
[...]
curl: (27) Out of memory
```

Cherry-picked from #20116
Closes #20198

3 months agocurlx_win32_fopen: use `_fsopen()`/`_wfsopen()` with `_SH_DENYNO`
Viktor Szakats [Mon, 5 Jan 2026 10:04:10 +0000 (11:04 +0100)] 
curlx_win32_fopen: use `_fsopen()`/`_wfsopen()` with `_SH_DENYNO`

Replacing `fopen_s()`/`_wfopen_s()`, to allow customizing share mode,
and keep the sharing mode as was with `fopen()`/`_wopen()` earlier and
as used in `_sopen_s()`/`_wsopen_s()`.

The replaced functions used `_SH_SECURE` internally. Otherwise they are
identical to the replacements.

Ref: https://learn.microsoft.com/cpp/c-runtime-library/reference/fsopen-wfsopen

Reported-by: Jay Satiro
Fixes #20155
Ref: #20156
Follow-up to 1e7d0bafc6d25d98ec72ff419df65fda3cf147a7 #19643
Closes #20186

3 months agoldap: fix LDAP version display on IBMi
Andrew [Tue, 6 Jan 2026 10:08:20 +0000 (10:08 +0000)] 
ldap: fix LDAP version display on IBMi

Fixes #20196
Closes #20197

3 months agowcurl: import v2026.01.05
Samuel Henrique [Tue, 6 Jan 2026 05:48:10 +0000 (21:48 -0800)] 
wcurl: import v2026.01.05

Closes #20194

3 months agoGHA/macos: switch 5 jobs from autotools to cmake
Viktor Szakats [Tue, 6 Jan 2026 01:53:04 +0000 (02:53 +0100)] 
GHA/macos: switch 5 jobs from autotools to cmake

To save 0.5 to 3 minutes per job.

There remain 7 main autotools jobs, plus 1 in combinations and 1 more
for iOS.

Also:
- fix to disable MQTT, WebSockets, IPFS in HTTP-only job.

Closes #20193

3 months agoconfig2setopts: add space in cookie header with multiple -b
pojomi [Sun, 4 Jan 2026 20:50:27 +0000 (15:50 -0500)] 
config2setopts: add space in cookie header with multiple -b

Closes #20184

3 months agoGHA: reduce total timeouts for Linux and macOS jobs
Viktor Szakats [Mon, 5 Jan 2026 19:17:55 +0000 (20:17 +0100)] 
GHA: reduce total timeouts for Linux and macOS jobs

- Linux: 25 -> 15 minutes.
- Linux H3: 45 -> 10 minutes.
- macOS: 25 -> 15 minutes.

On macOS this may catch flaky slowness seen sometimes in pytests:
https://github.com/curl/curl/pull/20187#issuecomment-3711753097

Closes #20192

3 months agomulti: fix to build on IBMi
Andrew [Mon, 5 Jan 2026 18:26:27 +0000 (18:26 +0000)] 
multi: fix to build on IBMi

Sync function declaration with definition. Update related local vars.

Follow-up to 4701a6d2ae9f0b66a0feac4061868e944353449b #19695
Fixes #20190
Closes #20191

3 months agoldap: fix `Curl_ldap_version()` for IBMi/OS400
Andrew [Mon, 5 Jan 2026 18:00:20 +0000 (18:00 +0000)] 
ldap: fix `Curl_ldap_version()` for IBMi/OS400

- `LDAP_OPT_SUCCESS` (== 0) is missing from some LDAP implementations
  and documented to use `LDAP_SUCCESS` (== 0) instead. Use literal zero
  to avoid macro name differences.

- fix freeing `LDAP_OPT_API_INFO` buffers:
  - docs suggest `ldapai_vendor_name` on IBMi is `const char *`.
    Nothing in docs says it need to be freed.
  - `ldapai_extensions` need to be freed, according to docs.
    However, on IBMi there is `ldap_value_free()` function for it.
  Ref: https://www.ibm.com/docs/en/svd/10.0.3?topic=settings-ldap-opt-api-info

Fixing, on OS400 (V7R4M0):
```
CZM1003:  LDAP__819.c, 1028.56: CZM0045(30) Undeclared identifier LDAP_OPT_SUCCESS.
CZM1003:  LDAP__819.c, 1036.21: CZM0280(30) Function argument assignment between types "char*" and "const char*" is not allowed.
CZM1001:  LDAP__819.c, 1037.5: CZM0304(10) No function prototype given for "ber_memvfree".
...
CZS0601:  Module LDAP is not created because statement errors occurred.
```

Follow-up to 859ce48de12986f5bf846c2800dacab893ff12c1 #19832
Fixes #20188
Closes #20189

3 months agoGHA/macos: drop compiler matrix for macos jobs
Viktor Szakats [Mon, 5 Jan 2026 13:08:58 +0000 (14:08 +0100)] 
GHA/macos: drop compiler matrix for macos jobs

To reduce the number of jobs, and the time spent running macos runners.
The curl codebase has just a few Apple-specific parts, and they remain
well-covered after this patch.

Makes the number of jobs 24, down from 32.

Perhaps more jobs could be merged or dropped, and CPU use reduced by
moving some to cmake. Unique, but not Apple-specific jobs may also be
moved to Linux.

Follow-up to b869932392512d1c3a4d5396361f9acdd110ba4b #20178

Closes #20187

3 months agoGHA/macos: enable Apple IDN and SecTrust for combination jobs
Viktor Szakats [Mon, 5 Jan 2026 08:57:19 +0000 (09:57 +0100)] 
GHA/macos: enable Apple IDN and SecTrust for combination jobs

Closes #20185

3 months agomk-lib1521: make the test set each string option again
Daniel Stenberg [Sun, 4 Jan 2026 11:24:41 +0000 (12:24 +0100)] 
mk-lib1521: make the test set each string option again

In an attempt to make sure that setting it again does not leak memory.

The second string is set to `""`, which is done so that this now finds
the problem reported in #20179.

Ref: #20179
Closes #20181

3 months agoprogress: narrower time display, multiple fixes
Daniel Stenberg [Sat, 3 Jan 2026 11:16:06 +0000 (12:16 +0100)] 
progress: narrower time display, multiple fixes

- Each time field is now 7 characters wide, so that the total width
  never exceeds 79 columns so that it works correctly also in Windows
  terminals. The title lines are adjusted accordingly.

  This is accomplished by using h:mm:ss style up to 10 hours, and for
  longer periods switch to "nnX nnY" style output. For hours, days,
  months and years.

  For less than one hour, the hour field is now dropped.

  When no time info is provided, the field is now space-only. No more
  `-:--:--`.

  Also fixed the output for really long times which previously was
  completely broken. The largest time now shows as ">99999y". (Becase
  I can't figure out a better way).

- For sizes, the widths are now properly fixed to 6 characters. When
  displaying a unit with less than 3 digits, it shows two decimal
  precision like "16777215 => 15.99M" and one decmal otherwise: "262143
  => 255.9k"

  Also fixes the decimal math. 131071 is 127.9k, which it previously did
  not show.

- The time and size field outputs are now properly verified in test
  1636.

Fixes #20122
Closes #20173

fixup use only space when no time exists

Drop the hour from the display when zero

3 months agosetopt: free the previous STRING_ENCODING before storing the new
Daniel Stenberg [Sun, 4 Jan 2026 10:54:18 +0000 (11:54 +0100)] 
setopt: free the previous STRING_ENCODING before storing the new

Follow-up to 6b9c75e219cdcfd3e17e7858

Fixes #20179
Reported-by: correctmost on github
Closes #20180

3 months agotool_doswin: remove the max length check
Daniel Stenberg [Thu, 1 Jan 2026 17:23:39 +0000 (18:23 +0100)] 
tool_doswin: remove the max length check

A too long name is likely to cause a problem later anyway and get
reported there. We don't enforce file name lengths for any other
systems.

Assisted-by: Jay Satiro
Assisted-by: Viktor Szakats
Closes #20143

3 months agoGHA/macos: reduce number of combination jobs
Viktor Szakats [Sun, 4 Jan 2026 00:15:50 +0000 (01:15 +0100)] 
GHA/macos: reduce number of combination jobs

- drop autotools (except one) from combination jobs.
  They seem to add little value over cmake ones, yet take a lot of time
  even after restricting them to shared libs.

  20-25s to install autotools via Homebrew, for each 11 jobs. autoreconf
  taking 10s, configure 25s, build 30-35s. A total of 1m30s to 1m45s per
  job. Sometimes jumping up to 2-4 minutes.

  Compare this to 20-25s total job times with cmake.

  Keep one job with an indentical cmake pair to help detecting
  build-tool-specific fallouts.

- drop more combination jobs.
  To avoid overlap with main build jobs.

Reducing number of jobs to 9, from 22 (-13),
total job time to 5.5 minutes, from 25 (-20m).

Before: https://github.com/curl/curl/actions/runs/20637652089
After: https://github.com/curl/curl/actions/runs/20686390641?pr=20178

Considering the small amount of Apple-specific code in curl since
dropping Secure Transport, and that most combination issue were in
the toolchains, not curl, there is likely more room to avoid wasting
cycles (at 41 macOS + 3 iOS jobs after this patch).

Follow-up to d057b705fdb44b2df99ce6fc6ffb8f2a3530755a #20167

Closes #20178

3 months agotool_progress: fix large time outputs and decimal size display
Daniel Stenberg [Sat, 3 Jan 2026 16:50:26 +0000 (17:50 +0100)] 
tool_progress: fix large time outputs and decimal size display

Time output:

- was broken for really large times

- now uses spaces instead of --:--:--

- >99999y is now the largest shown time

- show HH:MM:SS as long as hours are fewer than 100

Size:

- made the decimal output always only use a single decimal

Test:

- Add test 1622 to verify these functions

Closes #20177

3 months agodocs: add a note about --compressed to note about binary output
Tobias Zimmermann [Fri, 2 Jan 2026 17:12:03 +0000 (18:12 +0100)] 
docs: add a note about --compressed to note about binary output

Closes #20168

3 months agotool_getparam: use UNITTEST not, ifdef
Daniel Stenberg [Sat, 3 Jan 2026 16:28:25 +0000 (17:28 +0100)] 
tool_getparam: use UNITTEST not, ifdef

Closes #20174

3 months agoservers.pm: say the protocol when http server failed to start
Viktor Szakats [Sat, 3 Jan 2026 17:44:00 +0000 (18:44 +0100)] 
servers.pm: say the protocol when http server failed to start

To serve as possibly more signal to see when/why the http server fails
to start in some random cases (on Windows).

Seen it happen in the 'mingw, CM clang-x86_64 gnutls libss' CI job:
https://github.com/curl/curl/pull/20163#issuecomment-3705572750
https://github.com/curl/curl/pull/20163#issuecomment-3707231458

Closes #20176

3 months agopytest: test 16_01 stabilize
Stefan Eissing [Fri, 2 Jan 2026 13:08:21 +0000 (14:08 +0100)] 
pytest: test 16_01 stabilize

When checking the reported times of a transfer, do not exptect
the 'queue' time to be in any relation to others. 'queue' uses its own
start timestamp and the reported duration is thereofore independant.

Ref: #20112
Closes #20163

3 months agoGHA: restore `--shallow` value for some torture tests
Viktor Szakats [Fri, 2 Jan 2026 23:14:20 +0000 (00:14 +0100)] 
GHA: restore `--shallow` value for some torture tests

It also means that now all torture test-pairs use the same shallowness,
while earlier FTP used 20.

Also:
- This made macOS torture jobs slow enough to split them into 3 jobs.

Follow-up to 2cbcde90e7a5eb7144079dcacc21393322b1daf7 #20153

Closes #20172

3 months agopytest: test 07_22 stabilize
Stefan Eissing [Fri, 2 Jan 2026 13:23:21 +0000 (14:23 +0100)] 
pytest: test 07_22 stabilize

Do not generate a 400 response code, but use a 200 one. The upload needs
to fail on sending, not on seeing a 400 response. Seeing a 400 before
the sending fails (when CI timings shift) will expose the wrong error
code.

Ref: #20112
Closes #20164

3 months agopytest: test 07_70 stabilize (curl_ngtcp2)
Stefan Eissing [Fri, 2 Jan 2026 11:46:35 +0000 (12:46 +0100)] 
pytest: test 07_70 stabilize (curl_ngtcp2)

We recently allowed a larger send buffer in ngtcp2 streams. This allowed
curl to send more early data then previously when the server was slow in
performing the handshake. This led to flaky test failures when the
amount of early data was larger than expected.

Change test expectations to allow for varying amount of early data.

Ref: #20112
Closes #20161

3 months agopytest: test 03_02 stabilize (curl_ngtcp2)
Stefan Eissing [Fri, 2 Jan 2026 12:14:12 +0000 (13:14 +0100)] 
pytest: test 03_02 stabilize (curl_ngtcp2)

The special handling for draining server connections during a connect
attempt was only done on CURLE_RECV_ERROR. But it may also happen when
ngtcp2 errors on writing data. Check for CURLE_SEND_ERROR also.

Ref: #20112
Closes #20162

3 months agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 2 Jan 2026 22:53:33 +0000 (23:53 +0100)] 
RELEASE-NOTES: synced

3 months agoaltsvc: accept ma/persist per alternative entry
Daniel Stenberg [Thu, 1 Jan 2026 16:46:04 +0000 (17:46 +0100)] 
altsvc: accept ma/persist per alternative entry

The 'ma' and 'persist' keywords should be considered per list entry, not
once per header.

Expand test 1654 to verify such headers

Reported-by: Hunt Darlener
Closes #20160

3 months agoGHA/non-native: reduce workflow timeouts
Viktor Szakats [Fri, 2 Jan 2026 22:21:59 +0000 (23:21 +0100)] 
GHA/non-native: reduce workflow timeouts

Closes #20171

3 months agoGHA/windows: reduce workflow timeouts
Viktor Szakats [Fri, 2 Jan 2026 21:50:34 +0000 (22:50 +0100)] 
GHA/windows: reduce workflow timeouts

From 15 to 10 minutes.

To reduce the idle wait for hung jobs from 20 to 15 minutes (hopefully),
so that the failed just can be restarted manually eariler. It appears
that GitHub Actions notices a hung job 5 minutes past the workflow
timeout (reason undiscovered).

Also: Leave extra time for torture and arm64 jobs.

Closes #20170

3 months agoGHA: disable autotools static libcurl in many jobs
Viktor Szakats [Fri, 2 Jan 2026 16:45:09 +0000 (17:45 +0100)] 
GHA: disable autotools static libcurl in many jobs

To avoid building libcurl in both static and shared flavor by default.
It results in 1.5-2.x speed-up for the curl build step in most jobs.
Saving a total of 6-7 minutes. In the Cygwin job alone it saves 1-1.5m.

Also:
- enable static + shared in a Windows job to keep testing this combo.

Follow-up to ff958fc4b2c606d70de8dbfe083bee98896c0072 #20159

Closes #20167

3 months agoGHA/linux: simplify configuring mbedTLS in two jobs
Viktor Szakats [Fri, 2 Jan 2026 15:23:17 +0000 (16:23 +0100)] 
GHA/linux: simplify configuring mbedTLS in two jobs

Closes #20165

3 months agoGHA/linux: split valgrind jobs to job-pairs for parallelism, to finish in 10m
Viktor Szakats [Fri, 2 Jan 2026 02:13:32 +0000 (03:13 +0100)] 
GHA/linux: split valgrind jobs to job-pairs for parallelism, to finish in 10m

To make CI turnaround time shorter, by cutting the longest running jobs.
After this patch all jobs should finish around 10-11 minutes. Down from
15-16 minutes before this patch.

Suggested-by: Stefan Eissing
The fuzzing workflow is now the slowest (with a 7-minute startup time
needed to build deps from source on each run), followed by macOS
and Windows torture tests (both split in two now). Without fuzzing, it's
under 10 minutes.

Notes:
- an extra cost with job-pairs is installing prereqs,
  configuring/building curl and tests twice. GitHub doesn't support
  making a matrix job a prereq for another workflow that may fix this:
    https://github.com/orgs/community/discussions/42335
  This overhead is significant on Windows: 11m20 -> 9m20 + 8m40
- job-pairs are annoying to maintain and keep in sync.
- splitting tests into halves is a manual process and needs to be
  revisited from time to time. Possibly something to automate with
  a runtests option, e.g. with `1 of 50%` and `2 of 50%`?

Also:
- split torture tests in two equal pieces, replacing the `FTP` + `!FTP`
  split used earlier.

Related perf improvements from today:
- make scan-build 2x fast:
  ff958fc4b2c606d70de8dbfe083bee98896c0072 #20159
- drop build-only Testi386 fuzz workflow (from curl), saving 9m per run:
  https://github.com/curl/curl-fuzzer/commit/0106023c1f2f0b9ff3aa86e19402b4a03e4f925c
  https://github.com/curl/curl-fuzzer/pull/236

Closes #20153

3 months agoGHA/linux: switch scan-build jobs to cmake (for 2x perf)
Viktor Szakats [Fri, 2 Jan 2026 10:03:12 +0000 (11:03 +0100)] 
GHA/linux: switch scan-build jobs to cmake (for 2x perf)

Somewhat unexpectedly, switching autotools jobs to identical (non-unity,
non-debug, same options) cmake ones, makes them complete 2x faster.
Most of it comes from cmake building shared libcurl only, while autotools
was using defaults and building both, in two separate passes. Thers is
about a minute (per job) of gain due to other reasons.

Before:
MultiSSL: 10m30: https://github.com/curl/curl/actions/runs/20656775456/job/59311070197
H3: 9m14s: https://github.com/curl/curl/actions/runs/20656775456/job/59311070204

After:
MultiSSL: 4m52s: https://github.com/curl/curl/actions/runs/20658343323/job/59315501903
H3: 4m7s: https://github.com/curl/curl/actions/runs/20658343323/job/59315501918
H3: 5m4s: https://github.com/curl/curl/actions/runs/20659294959/job/59318215987 (autotools shared only, for comparison, not merged)

Also:
- drop building examples with scan-build in the second (shorter) job.
  This offers no extra coverage over the long job that has both GnuTLS
  and OpenSSL. Saving an extra ~30s.

Closes #20159

3 months agoVULN-DISCLOSURE-POLICY.md: CRLF in data
Daniel Stenberg [Fri, 2 Jan 2026 09:54:47 +0000 (10:54 +0100)] 
VULN-DISCLOSURE-POLICY.md: CRLF in data

we reject the idea of *CRLF injection* by the user itself as a general
security problem

Closes #20157

3 months agoprogress: make it one column narrower
Daniel Stenberg [Fri, 2 Jan 2026 10:44:33 +0000 (11:44 +0100)] 
progress: make it one column narrower

To make it fit 80 columns appropriately

Reported-by: Jay Satiro
Fixes #20122
Closes #20124

3 months agobadwords.pl: don't mention the whitelisted finds
Daniel Stenberg [Fri, 2 Jan 2026 09:59:43 +0000 (10:59 +0100)] 
badwords.pl: don't mention the whitelisted finds

They obscure the real finds

Closes #20158