Commit Graph

35972 Commits

Author SHA1 Message Date
Viktor Szakats
37913c01a5
libtests: update format strings to avoid casts, drop some macros
- bump format strings to show the full value, drop casts.
- drop redundant casts (enum -> `%d`).
- drop some single-use macros.
- replace `int` with `bool` in testtrace.

Closes #18106
2025-07-31 09:29:49 +02:00
Viktor Szakats
e5cf6223d7
CURLOPT: bump CURL_REDIR_* macros to long
This patch bumps the size of these macros from `int` to `long`, while
keeping their actual values the same. It may cause incompatibilities in
user code, requiring the bump of holder variables and/or adding casts:

- CURL_REDIR_GET_ALL
- CURL_REDIR_POST_301
- CURL_REDIR_POST_302
- CURL_REDIR_POST_303
- CURL_REDIR_POST_ALL

Also:
- keep existing cast within the documentation to make sure it applies
  to older curl versions as well.

Closes #18110
2025-07-31 09:29:49 +02:00
Viktor Szakats
5f99b45693
windows: document toolchain support for some macros (cont.)
Follow-up to 3bfcfe82b9 #18085

Closes #18113
2025-07-31 09:29:48 +02:00
Daniel Stenberg
4d025fd912
curl: make --retry-delay and --retry-max-time accept decimal seconds
Like other time options already do.

Reported-by: Alice Lee Poetics
Fixes #18109
Closes #18111
2025-07-31 08:55:58 +02:00
Viktor Szakats
3bfcfe82b9
windows: document toolchain support for some macros
The oldest MS SDK I checked is 6.0A (VS2008). Versions are approximate
beyond 7.1A. I only have two Win10 SDKs to verify:
10.0.16299.0 (VS2017-15.4) and 10.0.22621.0 (VS2022).

Ref: https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
Ref: https://developer.microsoft.com/windows/downloads/sdk-archive/index-legacy (recent versions mostly)

Closes #18085
2025-07-31 00:43:57 +02:00
Viktor Szakats
08acef2aab
schannel: assume CERT_CHAIN_REVOCATION_CHECK_CHAIN
Always available in supported mingw-w64 and MSVC compilers, except
in UWP mode. For mingw32ce this macro is defined later in the code.

Also available in OpenWatcom 2.
ce6c37eb29/bld/w32api/include/winerror.mh

Closes #18108
2025-07-31 00:41:36 +02:00
Viktor Szakats
25119fbaaa
GHA/distcheck: add more tarball builds
- add AM out-of-tree no perl job.
- add AM in-tree no perl job.
- make CM out-of-tree job use no perl.
- add CM in-tree no perl job.
- run `curl -V` after builds.
- show the number of `--manual` lines.
- set `--enable-werror` in autotools jobs.

Ref: https://github.com/curl/curl/issues/18088#issuecomment-3135112176

Closes #18104
2025-07-31 00:41:36 +02:00
Daniel Stenberg
f028667131
test757: MIME parts reused as a child part, using data_cb
An attempt to reproduce #18070. That turned out to not be a bug, but the
test is still a good one.

Based on test695

Closes #18101
2025-07-30 23:16:33 +02:00
Daniel Stenberg
98bcb885fe
curl: make the URL indexes 64 bit
Otherwise we could misbehave already at 2 billion URLs and we can't have
that. A few of the counters are already correctly using the right type.

Closes #18096
2025-07-30 23:13:45 +02:00
Viktor Szakats
d413ed2d40
windows: drop CRYPT_E_* macro fallbacks, limit one to mingw32ce
They are defined by all mingw-w64 versions and all supported MSVC
versions (VS2008 and up).

Also by OpenWatcom 2:
ce6c37eb29/bld/w32api/include/winerror.mh

mingw32ce misses `CRYPT_E_NOT_IN_REVOCATION_DATABASE`.

Closes #18092
2025-07-30 15:28:28 +02:00
Viktor Szakats
1140c8bc04
tests: fix perl warnings in http2-server, http3-server
AM libressl heimdal:
```
Global symbol "$verbose" requires explicit package name (did you forget to declare "my $verbose"?) at tests/http2-server.pl line 52.
Global symbol "$certfile" requires explicit package name (did you forget to declare "my $certfile"?) at tests/http2-server.pl line 109.
Global symbol "$keyfile" requires explicit package name (did you forget to declare "my $keyfile"?) at tests/http2-server.pl line 110.
Execution of tests/http2-server.pl aborted due to compilation errors.
[...]
```
Ref: https://github.com/curl/curl/actions/runs/16622030370/job/47028537336?pr=18099#step:39:3148

Follow-up to 2ec54556d4 #17877

Closes #18100
2025-07-30 14:21:17 +02:00
Viktor Szakats
801800aca2
tests: fix prechecks to call the bundle libtest tool
Some tests make a hard-coded call to the libtest binary in the precheck
step. With bundle builds the binary changed name and calling convention.
Before this patch these tests failed the pre-check and did not run for
the 5 affected tests: 518, 537, 678, 1517, 1960

Fixing, e.g.:
```
test 1517 SKIPPED: precheck command error
```
https://github.com/curl/curl/actions/runs/16611990422/job/46996698437?pr=18039#step:13:4832

It also fixes builds with a custom `CURL_DIRSUFFIX` set.

Follow-up to 2c27a67daa #17590
Follow-up to 71cf0d1fca #14772

Closes #18099
2025-07-30 14:21:17 +02:00
Viktor Szakats
e32a6dc510
schannel: drop fallbacks for 4 macros
They are defined by all mingw-w64 versions and all supported MSVC
versions (SDK 7.1A+).

Also by OpenWatcom 2:
ce6c37eb29/bld/w32api/include/wincrypt.mh

These aren't defined by mingw32ce. And likely defined by MS WinCE SDK,
but curl code doesn't use them in WinCE builds.

Closes #18093
2025-07-30 12:24:37 +02:00
Viktor Szakats
dfe3844c56
schannel: drop fallbacks for unused BCRYPT_* macros
In case they are used again in the future, the fallbacks are not
necessary for the supported mingw-w64 (v3+) and MSVC versions.

Follow-up to 6238888ca7 #15621

Closes #18091
2025-07-30 12:24:37 +02:00
Viktor Szakats
58906838c5
schannel: fix recent update for mingw32ce
Follow-up to 952c929bdf #18084
Closes #18097
2025-07-30 11:55:54 +02:00
Viktor Szakats
217ae24a94
build: fix mingw-w64 version guard for mingw32ce
Follow-up to a28f5f68b9 #18010
Closes #18095
2025-07-30 11:55:54 +02:00
Daniel Stenberg
8d00527e9e
schannel: use if(result) like the code style says
instead of comparing != CURLE_OK

Closes #18094
2025-07-30 11:26:04 +02:00
Stefan Eissing
83da4d9d3b
connectdata: remove primary+secondary ip_quadruple
Since the content varies during connection setup and while doing it
(eyeballing), remove these strcut from `connectdata` and replace use
with querying the connection filters. Those keep that information
already.

Change the info logging of established connections to also give the
local address and port.

Closes #17960
2025-07-30 10:56:19 +02:00
Dominik Tomecki
450c00f983
smtp: allow suffix behind a mail address for RFC 3461
Verified in test 3215

Closes #16643
2025-07-30 09:52:34 +02:00
Daniel Stenberg
3ccffad28d
RELEASE-NOTES: synced 2025-07-30 09:31:18 +02:00
Daniel Stenberg
4b1a5fe436
top-complexity: set cutoff level to 80
Closes #18080
2025-07-30 09:13:50 +02:00
Daniel Stenberg
d7918861d1
openssl: split cert_stuff into smaller sub functions
- rename it client_cert
- make it return CURLcode

Closes #18081
2025-07-30 09:12:10 +02:00
Daniel Stenberg
7ed349de4c
unit-tests: build the unitprotos.h from here
Make the bundle depend on the header in the lib dir and built it now if
not present.

Reported-by: Todd Gamblin
Fixes #18088
Closes #18089
2025-07-30 09:06:35 +02:00
Viktor Szakats
58e0ff809f
tidy-up: whitespace, indent, #if 0
Closes #18090
2025-07-30 03:46:21 +02:00
Viktor Szakats
daa5b044b8
cmake: defer building unitprotos.h till a test target needs it
Follow-up to c9bb9cd165 #17750
Ref: https://github.com/curl/curl/pull/17750#issuecomment-3133749477
Closes #18086
2025-07-30 02:38:14 +02:00
Viktor Szakats
00887aee8c
tests: merge clients into libtests, drop duplicate code
libtests and clients were built the same way after recent overhauls.
libtests are used by runtests, clients by pytests.

Merge clients into libtests, aligning their entry function signature,
dropping common utility functions, and simplifying the build.

Note: After this patch `CURLDEBUG` applies to cli tests, when enabled.

Also:
- lib552: drop local copy-paste debug callback in favor of testtrace.
- lib552: drop local copy-paste dump function in favor of testtrace.
- clients: use `long` for HTTP version, drop casts.
- clients: replace local dump function in favor of testrace clone.
- sync cli test entry function prototype with libtests'.
- h2_serverpush: replace local trace callback with testtrace.
- de-duplicate 3 websocket close, ping, ping, functions. Kept the pong
  iteration from `ws_pingpong`. Note: the pong clone in `lib2304` was
  returning an error when `curl_ws_recv()` returned non-zero and
  the payload matched the expected one anyway. After this patch, this
  case returns success, as it does in `ws_pingpong`.
  `lib2304` keeps passing, but I'm not sure if the previous behavior
  was intentional.
- display full value in websocket close, ping, pong, drop casts.

Closes #18079
2025-07-30 02:38:13 +02:00
Viktor Szakats
952c929bdf
schannel: drop old-mingw special case
mingw-w64 always defines `CERT_CHAIN_REVOCATION_CHECK_CHAIN`.

Also confirmed in CI.

Follow-up to 38029101e2 #11625
Ref: a28f5f68b9 #18010
Closes #18084
2025-07-29 22:35:06 +02:00
Viktor Szakats
1a27fcf22f
GHA/windows: enable HTTP/3 in an MSYS2 mingw-w64 OpenSSL job
Closes #18087
2025-07-29 22:31:29 +02:00
Daniel Stenberg
cc27bb07a8
config2setopts: set more options unconditionally
This function would set some options to NULL and some not. This change
now more consistently set the value, even if NULL/0/default.

Also removes the 'new in [version]' comments as they were not
consistently used and as they have moved around probably aren't correct
anymore.

Closes #18078
2025-07-29 16:18:58 +02:00
Daniel Stenberg
b2ccfbf2fb
tool_operate: simplify single_transfer
- let the caller do the cleanup on fail
- avoid gotos and use direct returns more
- use while() loop

Closes #18077
2025-07-29 16:15:05 +02:00
Stefan Eissing
6b70e8a838
pytest: use dante-server in CI
- add startup check for 'danted' to avoid fails on low cpu
- rename 'sockd' to 'danted' everywhere to clarify what we use
- add proper defaults for 'danted' for debian
- install 'dante-server' in pytest ci runs

Closes #18075
2025-07-29 15:02:30 +02:00
Viktor Szakats
cd586149d5
tests: constify command-line arguments
For libtests, tunits, units.

Also:
- lib3033: tidy up headers.
- lib/netrc: constify an arg in `Curl_parsenetrc()`.

Closes #18076
2025-07-29 13:44:50 +02:00
Daniel Stenberg
3407bee8c8
setopt: refactor out the booleans from setopt_long to setopt_bool
- add a message if a boolean is set to something not 1 or 0 (as it might be
  made to mean something else in a future)

- use 's->' in all setopt_* functions

Closes #17887
2025-07-29 13:07:22 +02:00
Stefan Eissing
55c045c863
multi: add CURLMOPT_NETWORK_CHANGED to signal network changed
New multi option CURLMOPT_NETWORK_CHANGED with a long bitmask value:

- CURLM_NWCOPT_CLEAR_CONNS: do not reuse existing connections, close all
  idle connections.

- CURLM_NWCOPT_CLEAR_DNS: clear the multi's DNS cache.

All other bits reserved for future extensions.

Fixes #17225
Reported-by: ウさん
Closes #17613
2025-07-29 11:18:26 +02:00
Daniel Stenberg
7b8594176d
delta: fix counters
Follow-up to b1df1d38af

Closes #18072
2025-07-29 09:45:07 +02:00
Daniel Stenberg
a7e6c78bfa
parallel-max: bump the max value to 65535
When doing HTTP/2 and HTTP/3, it is possible to achieve quite a massive
parallelism so limiting this to 300 seems restrictive.

With other protocols, going beyond 300-400 might not be recommended but
curl does not have to enforce the limit.

Closes #18068
2025-07-29 09:11:19 +02:00
Viktor Szakats
4cce314a39
build: allow libtests/clients to use libcurl dependencies directly
For libcurl API tests that need interacting directly with TLS-backends.

Partial revert of 58b9c6134b #17696 for
cmake, and implementing the same for autotools.

Ref: #18066
Closes #18069
2025-07-29 02:38:11 +02:00
Viktor Szakats
c4ed28aebb
windows: assume ADDRESS_FAMILY, drop feature checks
Early mingw-w64 releases missed it, but by requiring v3.0, this is no
longer an issue. Supported Visual Studio SDKs also offer it.

Follow-up to a28f5f68b9 #18010
Closes #18057
2025-07-29 02:06:35 +02:00
Viktor Szakats
3bdef96aba
servers: convert two macros to scoped static const strings
Closes #18067
2025-07-29 02:04:52 +02:00
Stefan Eissing
85e18a5b9a
multi: process pending, one by one
Before curl 8.14.0, when pending was a list, `process_pending_handles()`
move a single transfer to processing. In 8.14.0 we changed that to move
all pending transfers to processing. This lead to unwanted performance
drops as reported in #18017.

Restore the old behaviour.

While the old behviour is better, the overall handling of "pending"
transfers is not optimal, since we do not keep track of the "condition"
a pending transfer is waiting on. This means, when moving a single,
pending transfer, we might move one that still cannot be processed while
another that could is kept pending.

Since we trigger `process_pending_handles()` from various changes, the
stalled pending will eventually make it to the processing queue, but
this is not optimal.

Fixes #18017
Reported-by: rm-rmonaghan on github
Closes #18056
2025-07-28 22:57:42 +02:00
Daniel Stenberg
9d2075bdce
ws: avoid NULL pointer deref in curl_ws_recv
If a NULL easy handle is passed in.

Pointed out by Coverity

Follow-up to 960fb49245

Closes #18065
2025-07-28 22:37:59 +02:00
Eshan Kelkar
f7af8adadd
libssh: Use sftp_aio instead of sftp_async for sftp_recv
This commit replaces the usage of the old deprecated sftp_async API with
the new sftp_aio API for remote file reading.

Signed-off-by: Eshan Kelkar <eshankelkar@galorithm.com>

Closes #17440
2025-07-28 22:35:39 +02:00
Viktor Szakats
3bb5e58c10
memory: make function overrides work reliably in unity builds
Fixing:
- HTTPS-RR builds with c-ares and Linux MUSL.
- curl-for-win minimal builds with Linux MUSL.

It should fix all other kinds of entaglement between curl's redefintions
of system symbols and system (or 3rd-party) headers sensitive to that.

It also syncs memory override behavior between unity & non-unity builds,
thus reducing build variations.

The idea is to define and declare everything once in `curl_setup.h`,
without overriding any system symbols with curl ones yet. Then, like
before this patch, override them, if necessary, in each source file via
`curl_memory.h` and `memdebug.h`, after including system headers.
To ensure a clean slate with no overrides at the beginning of each
source file, reset all of them unconditionally at the end of
`curl_setup.h`, by including `curl_mem_undef.h`. (This assumes
`curl_setup.h` is always included first, which is already the case
throughout the codebase.)

`curl_mem_undef.h` can also be included explicitly wherever overrides
are causing problems. E.g. in tests which use unity-style builds and
a previously included `curl_memory.h`/`memdebug.h` can be spilling into
other source files.

The simplified role of the two override headers:
- `curl_memory.h`: overrides system memory allocator functions to
  libcurl ones, when memory tracing (aka `CURLDEBUG`) is disabled.
- `memdebug.h`: overrides system memory allocator and some other
  functions to curl debug functions, when memory tracing is enabled.

Changed made in this patch, step-by-step:
- curl_memory.h: move allocator typedefs and protos to `curl_setup.h`.
- memdebug.h: move `ALLOC_*` macros to `curl_setup.h`.
- memdebug.h: move allocator protos to `curl_setup.h`.
- memdebug.h: move `Curl_safefree()` macro to `curl_setup.h`.
  (it's a regular macro, with a one-time, global, definition.)
- curl_memory.h: move system symbol undefs to a new, separate header:
  `curl_mem_undef.h`.
- curl_setup.h: include `curl_mem_undef.h` at the end, unconditionally,
  to reset system symbol macros after each inclusion.
- handle `sclose()` and `fake_sclose()` in `curl_setup.h`. They are not
  system symbols, a one-time definition does the job.

Also:
- GHA/linux: enable unity mode for the HTTP-RR c-ares MUSL job.
  Follow-up to 17ab4d62e6 #16413

That said, I'd still find it better to avoid redefining system macros.
To communicate clearly the fact that they are not the original system
calls and they do behave differently. And, it would allow dropping the
undef/redef dance in each source file, and maintaining the logic with
it. The "last #include files should be in this order" comments in each
source would also become unnecessary. Also the trick of using
`(func)` (or interim macros) to call the non-overridden function where
required. This method works for printf and most everything else already.
For `_tcsdup`, socket and fopen functions this could work without
disturbing the codebase much.

Ref: #16428 (clean reboot of)

Closes #17827
2025-07-28 17:45:04 +02:00
Viktor Szakats
113f6aacd4
CURLOPT: bump CURLHEADER_* macros to long, drop casts
This patch bumps the size of these macros from `int` to `long`, while
keeping their actual values the same. It may cause incompatibilities in
user code, requiring the bump of holder variables and/or adding casts:

- CURLHEADER_SEPARATE
- CURLHEADER_UNIFIED

Also:
- keep existing cast within the documentation to make sure it applies
  to older curl versions as well.

Closes #18055
2025-07-28 17:31:33 +02:00
Viktor Szakats
1a12663d06
CURLOPT: bump CURLPROXY_* enums to long, drop casts
This patch bumps the size of these macros from `int` to `long`, while
keeping their actual values the same. It may cause incompatibilities in
user code, requiring the bump of holder variables and/or adding casts:

- CURLPROXY_HTTP
- CURLPROXY_HTTP_1_0
- CURLPROXY_HTTPS
- CURLPROXY_HTTPS2
- CURLPROXY_SOCKS4
- CURLPROXY_SOCKS4A
- CURLPROXY_SOCKS5
- CURLPROXY_SOCKS5_HOSTNAME

Also:
- keep existing cast within the documentation to make sure it applies
  to older curl versions as well.

Closes #18054
2025-07-28 17:30:46 +02:00
Viktor Szakats
d45b85d791
CURLOPT: bump CURLALTSVC_* macros to long
This patch bumps the size of these macros from `int` to `long`, while
keeping their actual values the same. It may cause incompatibilities in
user code, requiring the bump of holder variables and/or adding casts:

- CURLALTSVC_H1
- CURLALTSVC_H2
- CURLALTSVC_H3
- CURLALTSVC_READONLYFILE

Also:
- keep existing cast within the documentation to make sure it applies
  to older curl versions as well.

Closes #18063
2025-07-28 17:30:36 +02:00
Viktor Szakats
81f5991e14
lib1560: replace an int with bool
Follow-up to 7d1ca2e7e1 #17933

Closes #18064
2025-07-28 17:29:57 +02:00
Viktor Szakats
577ec09412
contrithanks: fix for BSD sed tool
Fixing on macOS, and possibly other BSDs:
```
sed: 83: ./docs/THANKS-filter: RE error: illegal byte sequence
```
Where line 83 contains `\xED`.

Switch to raw encoding to avoid `sed` evaluating the stream of bytes.

Ref: #18061

Closes #18062
2025-07-28 17:29:26 +02:00
Viktor Szakats
b1df1d38af
delta: fix warnings, fix for non-GNU date tool
It makes the script run on BSD-like envs.

Follow-up to f63bdea790 #18058
Follow-up to 2ec54556d4 #17877

Closes #18061
2025-07-28 17:29:26 +02:00
Viktor Szakats
975ab36531
lib517: use LL 64-bit literals & re-enable a test case (time_t)
Suffix two 64-bit `time_t` test literals with `LL` to make them compile
with mingw-w64 x86_64 in C89 (the default) mode. Possibly other old gcc
compilers are affected (e.g. mips gcc 4.9.4, power gcc 15.1.0), but
could not pinpoint the exact rules. This also fixes a compiler warning
and test failure with MSVC, allowing to re-enable a disabled test case.

`LL` is not C89, but used in the code before this patch, which tells
it's safe to use.

Also display expected / actual timestamp values as `curl_off_t` instead
of `long`, making them work with 64-bit timestamps.

This was triggered by this issue seen while testing mingw-w64 gcc 4.8.1:
```
tests/libtest/lib517.c:147:5: error: this decimal constant is unsigned only in ISO C90
     {"Sun, 06 Nov 2044 08:49:37 GMT", (time_t) 2362034977 },
     ^
```
Ref: https://github.com/curl/curl/actions/runs/16540378828/job/46780712313?pr=18010#step:12:32

Closes #18032
2025-07-28 17:29:26 +02:00