Commit Graph

35913 Commits

Author SHA1 Message Date
Viktor Szakats
63bf7a0898
openssl: drop redundant HAVE_OPENSSL_VERSION macro
It served as an extra guard over `OPENSSL_VERSION_STRING`.

Also, document that `OPENSSL_VERSION_STRING` is supported by OpenSSL 3+.

Closes #18367
2025-08-22 18:55:26 +02:00
Viktor Szakats
0be7f382dc
openssl: add and use HAVE_BORINGSSL_LIKE internal macro
To cover the common case of guarding for both BoringSSL and AWS-LC.

Cherry-picked from #18330
Closes #18358
2025-08-22 17:49:21 +02:00
Viktor Szakats
8c29a29add
openssl: add and use HAVE_OPENSSL3 internal macro
Cherry-picked from #18330
Closes #18360
2025-08-22 17:21:29 +02:00
Viktor Szakats
db08e86cfb
openssl: drop more legacy cruft
- drop `ALLOW_RENEG` undocumented (insecure) build-time option.
- drop unnecessary check for `OPENSSL_VERSION_NUMBER`.
  It's present in all supported OpenSSL versions and forks.

Follow-up to 80c10c5d5d #18351
Follow-up to 59311bd3df #3293 #3283

Closes #18359
2025-08-22 17:21:28 +02:00
Daniel Stenberg
bfbee798ca
tool_operate: use stricter curl_multi_setopt() arguments
To please the curl_multi_setopt() typechecker

- set multi callback protypes to match exactylu
- set CURLMOPT_MAX_HOST_CONNECTIONS as a long

Closes #18357
2025-08-22 17:13:07 +02:00
Daniel Stenberg
844c385812
typecheck-gcc: add type checks for curl_multi_setopt()
Test 745 verifies that all options are tested.

Closes #18357
2025-08-22 17:12:58 +02:00
Daniel Stenberg
b3570b36d7
runtests: show still running tests when nothing has happened for a while
... even if there are tests still pending. To help visualize tests that
might be hanging.

Attempts to set the limit at 10 seconds of silence.

Closes #18349
2025-08-22 16:28:03 +02:00
Stefan Eissing
a8d20cd223
asyn-thrdd: manage DEFERRED and locks better
- cancel thread waits until thread start is at least 5ms in the past
  to give it some time to get its cancellation setup in place
- cancel thread without holding the mutex. It's supposed to be an
  async operation, but better be safe
- set DEFERRED cancel state explicitly, should be default in a pthread,
  but better be safe

Closes #18350
2025-08-22 16:26:11 +02:00
Daniel Stenberg
f5ee566dbc
top-complexity: maximum accepted set to 72
Down from 80. Show all functions above 60.

Closes #18354
2025-08-22 16:22:36 +02:00
Daniel Stenberg
33572b851e
tool_urlglob: handle a zero length glob piece
Follow-up to 034612cd51

Add test 759 to verify

Reported-by: Stanislav Osipov
Fixes #18352
Closes #18353
2025-08-22 16:22:07 +02:00
Viktor Szakats
80c10c5d5d
openssl: remove legacy cruft, document macro guards
- assume:
  - `BIO_CTRL_EOF`
  - `SSL_CTRL_SET_MSG_CALLBACK`
  - `SSL_CTRL_SET_MSG_CALLBACK`
  - `SSL_CTRL_SET_TLSEXT_HOSTNAME`
  - `SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER`
  - `SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`
  - `SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG`
  - `SSL_OP_NO_COMPRESSION`
  - `SSL_OP_NO_TICKET`
  - `X509_V_FLAG_PARTIAL_CHAIN`
  - `X509_V_FLAG_TRUSTED_FIRST`
  They are present in all supported OpenSSL (and fork) versions.

- replace `SSL_ERROR_WANT_EARLY` with `SSL_ERROR_WANT_CLIENT_HELLO_CB`.
  The former appeared in OpenSSL 1.1.1-dev, but renamed before
  the stable release.

- document support for macros:
  - `ENGINE_CTRL_GET_CMD_FROM_NAME`
  - `SSL_ERROR_WANT_ASYNC_JOB`
  - `SSL_ERROR_WANT_ASYNC`
  - `SSL2_VERSION_MAJOR`
  - `TLS1_3_VERSION`

- drop legacy fallback for `CONF_MFLAGS_DEFAULT_SECTION`.
  It was there for OpenSSL 0.9.8 support.

- fix `SSL_CTRL_SET_MSG_CALLBACK` accidentally serving as a guard for
  OpenSSL (and forks) as a whole.

Tested OK with OpenSSL 1.0.2 and 1.1.0 in CI.

Closes #18351
2025-08-22 15:53:45 +02:00
Viktor Szakats
3298a43133
spelling: file system
Closes #18348
2025-08-22 15:53:41 +02:00
Viktor Szakats
a9705e9cfb
examples: make CURLPIPE_MULTIPLEX fallback long
Closes #18356
2025-08-22 14:16:45 +02:00
Viktor Szakats
f6c2907172
test1557: pass long type to multi_setopt()
A wrong type here has seen to manifest in CI failures with gcc-12 macOS.

Ref: https://github.com/curl/curl/pull/18348#issuecomment-3213881790
Ref: https://github.com/curl/curl/actions/runs/17153761944/job/48665734013?pr=18349

Follow-up to b63cce7fee #18339
Follow-up to 88fc6c491f #18263

Closes #18355
2025-08-22 14:16:45 +02:00
Stefan Eissing
cbd5d2507a
asyn-thrdd: fix --disable-socketpair builds
Regression from #18339

Reported-by: Marcel Raad
Closes #18347
2025-08-22 10:36:43 +02:00
Stefan Eissing
6b111f0a8c
ares: use ares_strerror() to retrieve error messages
Add optional detail to `Curl_resolver_error()` to add to failure message
where available. This makes, for c-ares, the reason for a failed
resource available to the user without extra trace config.

When "dns" tracing enabled, print the c-ares server config at the start
of a resolve.

Closes #18251
2025-08-22 10:01:58 +02:00
Stefan Eissing
8ebea37eb1
asyn-thrdd: remove condition variable
Add a flag `thrd_don` to assess if the resolving thread has finished and
only destroy the context when *both* ref_count reaches 0 and thrd_done
is true.

Closes #18345
2025-08-22 09:05:56 +02:00
Daniel Stenberg
c83fa990bd
Revert "asyn-thrdd: use condition var more carefully"
This reverts commit bd4622bfaf.

Not intended for merge!
2025-08-22 09:05:19 +02:00
Stefan Eissing
bd4622bfaf
asyn-thrdd: use condition var more carefully
When the thread started is too fast, the signal will come before the
wait. Add an additional check before the wait to catch the thread
having started or already ended.

Closes #18344
2025-08-22 08:40:40 +02:00
Jay Satiro
b6a5f67259 schannel: improve handshake procedure
- During handshake, do not require reading more data if unprocessed
  encrypted data that may be a complete TLS record is already available.

- During handshake, check that the socket is writeable before processing
  encrypted data that may require an immediate reply to the server.

These two fixes are for issues that were found during renegotiation
testing but could affect any handshake.

Prior to this change it was possible in some abnormal network conditions
for the Schannel TLS handshake procedure to erroneously wait or error.

Ref: https://github.com/curl/curl/pull/18125

Closes https://github.com/curl/curl/pull/18323
2025-08-22 01:50:28 -04:00
Viktor Szakats
7d5f535ca7
appveyor: drop testing with OpenSSL 1.1.0
Replace with 1.1.1.

Follow-up to 12a10ca77c #18337
Cherry-picked from #18330
Closes #18341
2025-08-21 18:30:40 +02:00
Viktor Szakats
7956a2a756
gnutls: fix building with older supported GnuTLS versions
Also:
- GHA/linux-old: switch jobs from OpenSSL 1.0.2 to GnuTLS 3.5.8.

Ref: https://gitlab.com/gnutls/gnutls/blob/master/NEWS
Follow-up to fa0ccd9f1f #15774
Follow-up to 68bd759c2b #15667
Cherry-picked from #18330
Closes #18335
2025-08-21 18:04:25 +02:00
Viktor Szakats
12a10ca77c
appveyor: drop testing with OpenSSL 1.0.2
Cherry-picked from #18330
Closes #18337
2025-08-21 17:04:29 +02:00
Stefan Eissing
b63cce7fee
asyn-thrdd: addressing stalls in ci
Disable pthread_cancel in pushed cleanup function. Close wakeup socket
when shutting down resolving, since we no longer want wakeups.

Closes #18339
2025-08-21 17:00:45 +02:00
Viktor Szakats
0630e66cb4
GHA/non-native: drop MS-DOS jobs, requires OpenSSL 1.0.2
Cherry-picked from #18330
Closes #18338
2025-08-21 16:58:55 +02:00
Viktor Szakats
b3167ef841
appveyor: test openssl with clang-cl
Cherry-picked from #18330
Closes #18334
2025-08-21 13:11:32 +02:00
Viktor Szakats
1d7fddde42
openssl: drop redundant version check
It had a typo, but it wasn't causing an issue, because `TLS1_3_VERSION`
is enough to detect this feature and the version check remained unused.

Follow-up to 0d3b5937b3 #16477
Cherry-picked from #18330
Closes #18333
2025-08-21 13:11:32 +02:00
Viktor Szakats
696150b752
runtests: replace --ci with --buidinfo, show OS/Perl version again
I figure OS/Perl version may be useful to see in local runs,
and also in CI runs where `--ci` was not set:
https://curl.se/dev/log.cgi?id=20250820041228-707387#prob1

Also, only show a message if the `diff` tool is missing.

Follow-up to 985f39c0ce #18147
Closes #18329
2025-08-21 13:11:32 +02:00
Viktor Szakats
8f9d73bcaf
tests: drop unused BLANK envs, unset CURL_NOT_SET
Closes #18328
2025-08-21 13:11:32 +02:00
Viktor Szakats
8fac255fc1
test: add cygwin feature and use it (test 1056, 1517)
To replace custom checks with the same effect.

Closes #18327
2025-08-21 13:11:32 +02:00
Viktor Szakats
29608d694e
GHA/http3-linux: test non-unity, and more cmake
Reshuffle HTTP/3 jobs to:
- test all backends with cmake too. Adding 4 jobs.
- build all backends in non-unity mode too.
  Either with autotools or cmake.
- run tests once for each backend
  Either with autotools or cmake, with a preference for cmake to finish
  faster.
- drop building examples. There is nothing HTTP/3-specific in examples,
  and they are already built in GHA/linux.
- de-dupe some shared settings.

Ref: https://github.com/curl/curl/issues/17857#issuecomment-3047999309
Ref: 8cef6b5e6e #18321 #18320
Ref: d79269166e #18211 #18212
Ref: 454395ba1e #17857 #17864
Ref: b270fec68d #17857 #17858

Closes #18325
2025-08-21 13:11:31 +02:00
Stefan Eissing
8515424df4
websocket example: cast print values to unsigned int
To have not compiler warnings on format checks.

Reported By: Gisle Vanem
Closes #18326
2025-08-21 09:29:59 +02:00
Stefan Eissing
88fc6c491f
threaded-resolver: fix shutdown
Changed strategy to start up and terminate resolver thread.

When starting up:

Start the thread with mutex acquired, wait for signal from thread that
it started and has incremented the ref counter. Thread set
pthread_cancel() to disabled before that and only enables cancelling
during resolving itself. This assure that the ref counter is correct and
the unlinking of the resolve context always happens.

When shutting down resolving:

If ref counting shows thread has finished, join it, free everything. If
thread has not finished, try pthread_cancel() (non Windows), but keep
the thread handle around.

When destroying resolving:

Shutdown first, then, if the thread is still there and 'quick_exit' is
not set, join it and free everything. This might occur a delay if
getaddrinfo() hangs and cannot be interrupted by pthread_cancel().

Destroying resolving happens when another resolve is started on an
easy handle or when the easy handle is closed.

Add test795 to check that connect timeout triggers correctly
when resolving is delayed. Add debug env var `CURL_DNS_DELAY_MS`
to simulate delays in resolving.

Fix test1557 to set `quick_exit` and use `xxx.invalid` as domain
instead of `nothing` that was leading to hangers in CI.

Closes #18263
2025-08-21 09:26:49 +02:00
Daniel Stenberg
f3488ee3a3
RELEASE-NOTES: synced 2025-08-21 09:10:41 +02:00
Gabriel Marin
9a37dd3494
easy: add 'poll_fds' function to reduce size of 'wait_or_timeout'
Closes #18313
2025-08-20 22:55:45 +02:00
Viktor Szakats
2b2d8b7756
tests: delete unused commands
`runtests.pl` defaults to `-` if a command is not set, since
c43ad0f972.

Also:
- drop a stray `</file>`.
- replace a `nothing` with a guaranteed invalid hostname.
  Ref: 4334033b43
- replace unused URLs with `-`.

Closes #18319
2025-08-20 15:31:22 +02:00
Karthik Das
8cef6b5e6e
vquic: add header for native-QUIC OpenSSL, non-unity builds
Follow-up to 7dafe10db2 #18196
Fixes #18320
Closes #18321
2025-08-20 11:31:04 +02:00
Daniel Stenberg
27e61f9767
vquic: change some curl_ prefixes
curl_ and Curl_ are reserved prefixes with special meaning so avoid
using them for file private symbols.

Follow-up to 7dafe10
Closes #18324
2025-08-20 11:01:21 +02:00
Daniel Stenberg
74432bbe6e
bufq: removed "Useless Assignment"
Pointed out by CodeSonar. Made a comment instead.

Closes #18322
2025-08-20 09:05:57 +02:00
Stefan Eissing
faa2db202b
ares: handle channel being destroyed early
We are destroying the ares channel already when we shutdown
resolving. Querying the pollset afterwards is still happening,
especially in event based processing and needs to work in the
absence of a channel.

Fixes #18317
Reported-by: Natris on github
Closes #18318
2025-08-19 17:43:33 +02:00
Viktor Szakats
52775a7fb4
GHA/windows: install Win32::Process* perl modules
To make the CI jobs use native Win32 API calls instead of calling
external tools to look up and kill PIDs of native Windows test server
processes.

Follow-up to 2388b0e587 #18308
Closes #18296
2025-08-19 10:07:25 +02:00
Viktor Szakats
b48997ba7b
GHA/non-native: delete OmniOS job
It's somewhat flaky, slow (6-8 minutes), needs maintenance, and did not
turn up real issues to justify keeping.

Notably it did not help catch a regression seen on Solaris OS: #16915

Follow-up to 90e644f944 #13583
Closes #18314
2025-08-19 09:47:33 +02:00
sunriseL
c294d0abc5
libssh2: fix sftp_statemachine busyloop when *block=true
Closes #18311
2025-08-19 08:07:33 +02:00
Daniel Stenberg
b9e3ea4edb
ftp: store dir components as start+len instead of memdup'ing
- Avoids allocating every path segment separately
- Improved directory handling in connection reuse

Closes #18312
2025-08-19 07:59:50 +02:00
Daniel Stenberg
79eb66f2a6
ftp: keep the "raw" URL decoded version of the path around
Instead of doing temporary decodes in three different places.

Closes #18312
2025-08-19 07:59:50 +02:00
Viktor Szakats
2388b0e587
processhelp.pm: use Win32::Process* perl modules if available
`Win32::Process::List` and `Win32::Process`.

To replace external calls to `tasklist.exe` and `taskkill.exe`.

The perl modules are wrappers/binding to Win32 API calls. They avoid
launching external processes with a command shell (including MSYS2),
the external tool, and creating command-lines and parsing tool output.

According to local tests and the CI, one test session calls
`tasklist.exe` 350-400 times. `taskkill.exe` is rarely called:
https://github.com/curl/curl/actions/runs/17012376726?pr=18296

It's hard to predict any possible side-effect of dynamically loading
the two necessary, module DLLs into the Perl process. The MSYS2 runtime
if prone to fail when doing this in fork operations, as seen earlier
with the Win32.DLL module. But, is looks like a symptom, not the root
cause for these failures, because the failures are present with or
without perl.exe loading the Win32.DLL.
Ref: be01b60ce5 #18287

Cherry-picked from #18296
Closes #18308
2025-08-18 23:46:56 +02:00
Marcel Raad
a559f94321
asyn-thrdd: silence unused parameter warning
Closes https://github.com/curl/curl/pull/18310
2025-08-18 20:04:53 +02:00
renovate[bot]
0ea1e50d00
GHA: update vmactions/omnios-vm digest to c31844c
Closes #18302
2025-08-18 16:02:40 +02:00
Viktor Szakats
a477789c43
GHA/windows: switch from MSBuild to Ninja for MSVC jobs running tests
This patch fixes flakiness caused by MSBuild scanning the runtests.pl
output for regex patterns. When finding a hit, it returns an error code
to cmake, making the build test CI step fail. This happens rarely after
an earlier mitigation tweaking outputs, but, as expected, it did not
resolve it completely.

MSBuild doesn't have an option to disable this behavior. To fix, this
patch migrates the two affected jobs from MSBuild to Ninja. To align
with existing multi-config logic, it uses the `Ninja Multi-Config`
generator, which hasn't been tested before in CI.

Switching to Ninja was not trivial. Visual Studio to this day relies on
an MS-DOS batch file stored at an unstable location (containing spaces
and parenthesis), to initialize its environment. Without this env,
`cl.exe` is unable to find its own components. GHA does not initialize
it (even if it did, it could only default to a single specific target).
CMake helps with this when using a Visual Studio generator, but doesn't
when using Ninja. (On local machines the VS installer adds a couple
of Start menu items for launching pre-configured command prompts.)

Ref: https://learn.microsoft.com/cpp/build/building-on-the-command-line

The MS-DOS batches don't integrate well with CI envs and even less so
with shell scripts. To avoid it, this patch uses manual configuration.
Also without using environment variables, to make it easy to use and
easy to debug and trace in logs. Configuring Visual Studio is relatively
stable across releases and hasn't changed a whole lot in the last 2
decades, but still may need more maintenance compared to llvm, or pretty
much any other toolchain out there. On the upside, it allows to manually
select compiler version, SDK version, cross-combinations, and allows
choosing clang-cl. The configuration aims to find the latest of these
automatically.

Some traps that had to be avoided:
- need to switch to MS-DOS short names to avoid spaces in the VS
  component paths.
- need to switch to forward slashes to avoid confusing downstream tools
  with backslashes.
- need to pass either MSYS2 for Windows-style path depending on setting.
- need to use a trick to retrieve the oddly named `ProgramFiles(x86)`
  Windows env from shell script.
- need to match VS version (2022) and edition (Enterprise), found on GHA
  runners.
- need to pass the CMake generator via env so that the space in the name
  doesn't trip the shell when passed via a variable.
- trash and unexpected dirs when detecting SDK/toolchain versions.
- need to pass `-external:W0` to the C compiler to avoid MSVC warning:
  `D9007: '/external:I' requires '/external:W'; option ignored`
- using cmake options only, to make it run without relying on envs and
  work out-of-the-box when running subsequent cmake sessions.
- some others discovered while making work clang-cl locally in
  cross-builds.

Ninja also improves performance in most cases (though wasn't a goal
here). After this patch configure is significantly faster (1.5-2x),
builds are a tiny bit faster, except examples which was twice as fast
with MSBuild. Disk space use is 10% lower.

MSBuild builds remain tested in AppVeyor CI and the UWP job.

Before: https://github.com/curl/curl/actions/runs/17025737223/job/48260856051
After: https://github.com/curl/curl/actions/runs/17027981486/job/48266133301

Fixes:
```
  === Start of file stderr1635
     % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed

     0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
   100     4  100     4    0     0    449      0 --:--:-- --:--:-- --:--:--   500
curl : (22) The requested URL returned error : 429 [D:\a\curl\curl\bld\tests\test-ci.vcxproj]
CUSTOMBUILD : warning : Problem : HTTP error. Will retry in 1 second. 1 retry left. [D:\a\curl\curl\bld\tests\test-ci.vcxproj]
[...]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(254,5): error MSB8066: Custom build for 'D:\a\curl\curl\bld\CMakeFiles\621f80ddbb0fa48179f056ca77842ff0\test-ci.rule;D:\a\curl\curl\tests\CMakeLists.txt' exited with code -1. [D:\a\curl\curl\bld\tests\test-ci.vcxproj]
Error: Process completed with exit code 1.
```
Ref: https://github.com/curl/curl/actions/runs/16966304797/job/48091058271?pr=18287#step:13:3471

Bug: https://github.com/curl/curl/discussions/14854#discussioncomment-14104166
Ref: a19bd43210 #18307
Follow-up to 9463769f2e #16583

Closes #18301
2025-08-18 13:56:35 +02:00
David Zhuang
7dafe10db2
ngtcp2: use custom mem funcs
Pass curl's memory functions to the nghttp3 and ngtcp2 functions that
allow them. This allows custom memory functions passed by the curl user
to be used in nghttp3 and ngtcp2.

Closes #18196
2025-08-18 13:25:52 +02:00