]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
5 months agomulti_ev: use `mid` instead of `id` for transfer hashes
Stefan Eissing [Mon, 3 Mar 2025 13:39:47 +0000 (14:39 +0100)] 
multi_ev: use `mid` instead of `id` for transfer hashes

`data->id` is unique in the same connection pool, but a multi may
involved more than one pool. `data->mid` is unique inside the multi and
since multi_ev lives inside one multi, the `mid` is the right thing to
use.

Closes #16545

5 months agocurl.h: convert CURLUSESSL* names to defines
Daniel Stenberg [Mon, 3 Mar 2025 10:42:15 +0000 (11:42 +0100)] 
curl.h: convert CURLUSESSL* names to defines

So that we can use L suffix.

Follow-up to 2ec00372a1fc7f27cd3a6c43e29007400acfe2b6

Closes #16539

5 months agolib: add CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY
Daniel Stenberg [Mon, 3 Mar 2025 10:35:48 +0000 (11:35 +0100)] 
lib: add CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY

With this change, the argument passed to the CURLOPT_FOLLOWLOCATION
option is now instead a "mode" instead of just a boolean. Documentation
is extended to describe the two new modes.

Test 1571 to 1581 verify.

Closes #16473

5 months agolib: replace while(ISBLANK()) loops with Curl_str_passblanks()
Daniel Stenberg [Thu, 27 Feb 2025 22:26:54 +0000 (23:26 +0100)] 
lib: replace while(ISBLANK()) loops with Curl_str_passblanks()

- replace several ISSPACE() with ISBLANK(), since the former also skips
  CR and LF which in most cases should not occur where this macro is
  used

- after this commit, there is no ISSPACE() user left in libcurl code, but
  unfortunately tool and test code use the macro so it cannot be removed.

Closes #16520

5 months agohttp2: enhance error messages on Curl_dyn* upon receiving headers
Peng-Yu Chen [Sun, 2 Mar 2025 17:15:21 +0000 (17:15 +0000)] 
http2: enhance error messages on Curl_dyn* upon receiving headers

This is a partial fix of #16535. The error message format is borrowed
from the existing code[1].

Sample message before:
    curl: (56) process_pending_input: nghttp2_session_mem_recv() returned -902:The user callback function failed

Sample message after:
    curl: (56) Error receiving HTTP2 header: 100(A value or data field grew larger than allowed)

[1]: https://github.com/curl/curl/blob/df672695e5992ad9b99819e9950de682e243cb48/lib/http2.c#L1999-L2000

Closes #16536

5 months agoOpenSSL/quictls: add support for TLSv1.3 early data
Stefan Eissing [Tue, 25 Feb 2025 14:07:19 +0000 (15:07 +0100)] 
OpenSSL/quictls: add support for TLSv1.3 early data

based on #16450

Adds support for TLSv1.3 early data for TCP and QUIC via ngtcp2.

Closes #16477

5 months agoGHA: update dependency nghttp2/nghttp2 to v1.65.0
renovate[bot] [Sun, 2 Mar 2025 08:05:16 +0000 (08:05 +0000)] 
GHA: update dependency nghttp2/nghttp2 to v1.65.0

Tweaked-by: Viktor Szakats
Closes #16534

5 months agoGHA: update actions/cache digest to d4323d4
renovate[bot] [Thu, 27 Feb 2025 16:21:03 +0000 (16:21 +0000)] 
GHA: update actions/cache digest to d4323d4

Closes #16510

5 months agoGHA: update actions/download-artifact digest to cc20338
renovate[bot] [Wed, 26 Feb 2025 15:22:11 +0000 (15:22 +0000)] 
GHA: update actions/download-artifact digest to cc20338

Closes #16500

5 months agodocker: update debian:bookworm-slim Docker digest to ceac69a
renovate[bot] [Tue, 25 Feb 2025 07:01:14 +0000 (07:01 +0000)] 
docker: update debian:bookworm-slim Docker digest to ceac69a

Closes #16471

5 months agoGHA: update actions/upload-artifact digest to 4cec3d8
renovate[bot] [Fri, 21 Feb 2025 19:55:07 +0000 (19:55 +0000)] 
GHA: update actions/upload-artifact digest to 4cec3d8

Closes #16431

5 months agoshutdowns: split shutdown handling from connection pool
Stefan Eissing [Thu, 27 Feb 2025 14:47:30 +0000 (15:47 +0100)] 
shutdowns: split shutdown handling from connection pool

Further testing with timeouts in event based processing revealed that
our current shutdown handling in the connection pool was not clear
enough. Graceful shutdowns can only happen inside a multi handle and it
was confusing to track in the code which situation actually applies. It
seems better to split the shutdown handling off and have that code
always be part of a multi handle.

Add `cshutdn.[ch]` with its own struct to maintain connections being
shut down. A `cshutdn` always belongs to a multi handle and uses that
for socket/timeout monitoring.

The `cpool`, which can be part of a multi or share, either passes
connections to a `cshutdn` or terminates them with a one-time, best
effort.

Add an `admin` easy handle to each multi and share. This is used to
perform all maintenance operations where no "real" easy handle is
available. This solves the problem that the multi admin handle requires
some additional initialisation (e.g. timeout list).

The share needs its admin handle as it is often cleaned up when no other
transfer or multi handle exists any more. But we need a `data` in almost
every call.

Fix file:// handling of errors when adding a new connection to the pool.

Changes in `curl` itself:

- for parallel transfers, do not set a connection pool in the share,
  rely on the multi's connection pool instead. While not a requirement
  for the new `cshutdn` to work, this is

  a) helpful in testing to trigger graceful shutdowns
  b) a broader code coverage of libcurl via the curl tool

- on test_event with uv, cleanup the multi handle before returning from
  parallel_event(). The uv struct is on the stack, cleanup of the multi
  later will crash when it tries to register sockets. This is a "eat
  your own dogfood" related fix.

Closes #16508

5 months agoGHA: update dependency awslabs/aws-lc to v1.47.0
renovate[bot] [Sat, 1 Mar 2025 01:05:37 +0000 (01:05 +0000)] 
GHA: update dependency awslabs/aws-lc to v1.47.0

Closes #16530

5 months agoasyn: bring back port to the Curl_async struct
Daniel Stenberg [Sat, 1 Mar 2025 17:22:59 +0000 (18:22 +0100)] 
asyn: bring back port to the Curl_async struct

To make sure we store and use the correct port used for this particular
lookup.

Partial revert of 8ded8e5f3f

Fixes #16531
Reported-by: Jay Satiro
Closes #16532

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Sat, 1 Mar 2025 17:44:56 +0000 (18:44 +0100)] 
RELEASE-NOTES: synced

5 months agohash_offt: standalone hash for curl_off_t
Stefan Eissing [Sun, 23 Feb 2025 11:20:17 +0000 (12:20 +0100)] 
hash_offt: standalone hash for curl_off_t

Add a standalong hash table for curl_offt_t as key. This allows a
smaller memory footprint and faster lookups as we do not need to deal
with variable key lengths.

Use in all places we had the standard hash for this purpose.

Closes #16442

5 months agopytest: test negotiate with http proxy
Stefan Eissing [Fri, 31 Jan 2025 10:25:15 +0000 (11:25 +0100)] 
pytest: test negotiate with http proxy

Fixes #14973
Reported-by: stevenpackardblp on github
When curl negotiated with a http: proxy for a https: request, it
wrongly believed there must be an SSL filter present, which during
CONNECT, there is not.

25b445e fixed this. This PR adds a pytest case for the setup.

Closes #16136

5 months agoexamples: prefer `return` over `exit()` (cont.)
Viktor Szakats [Fri, 28 Feb 2025 16:44:55 +0000 (17:44 +0100)] 
examples: prefer `return` over `exit()` (cont.)

Some of these calls were not in callbacks. These examples may leak
handles.

Also fix some whitespace.

Follow-up to 08c7c937dc0dbd1f92f73360e5d8b2bb2ee6afa8 #16507
Closes #16524

5 months agowinbuild: reduce command-line length by dropping whitespace
Viktor Szakats [Fri, 28 Feb 2025 22:56:01 +0000 (23:56 +0100)] 
winbuild: reduce command-line length by dropping whitespace

Keep the `@for %%i in [...]` lines within limits by stripping whitespace
from the input `.c` source lists read from `Makefile.inc`. To avoid this
error after adding a new `.c` source:
```
configuration name: libcurl-vc14-x64-release-dll-ssl-dll-ipv6-sspi
NMAKE : fatal error U1095: expanded command line 'for %i in (altsvc.obj            amigaos.obj
           asyn-ares.obj         asyn-thread.obj       base64.obj            bufq.obj
              bufref.obj            cf-h1-proxy.obj       cf-h2-proxy.obj       cf-haproxy.obj [...]
  vssh/wolfssh.obj) do @echo ..\builds\libcurl-vc14-x64-release-dll-ssl-dll-ipv6-sspi-obj-lib/%i \
                   ' too long
Stop.
Command exited with code 2
```
Ref: https://ci.appveyor.com/project/curlorg/curl/builds/51605338/job/dqg6qtebtscb279g#L44

Reported-by: Stefan Eissing
Bug: https://github.com/curl/curl/pull/16508#issuecomment-2690443409
Fixes #16521
Closes #16528

5 months agodocs: vulnerabilities in debug code are not eligible for a bounty
Dan Fandrich [Fri, 28 Feb 2025 20:36:14 +0000 (12:36 -0800)] 
docs: vulnerabilities in debug code are not eligible for a bounty

This is code that is off by default and is therefore treated as a
regular bug.

Ref: #16526
Closes #16527

5 months agoGHA/macos: use quictls in some jobs, other small improvements
Viktor Szakats [Fri, 28 Feb 2025 02:50:29 +0000 (03:50 +0100)] 
GHA/macos: use quictls in some jobs, other small improvements

- enable quictls in autotools and cmake jobs. autotools requires
  a workaround due to wrong libpath in the quictls pkg-config.
  nghttp3 is offered by Homebrew, but not ngtcp2, to enable H3.

- install `libnghttp2` rather than `nghttp2`.
  `libnghttp2` is preinstalled and smaller. It also avoids detecting
  `nghttpx`, which confuses `pytest`.

- limit `brew unlink openssl` to libressl/quictls jobs.

Closes #16517

5 months agotests: fix comment in lib533
Zhaoming Luo [Fri, 28 Feb 2025 13:06:34 +0000 (21:06 +0800)] 
tests: fix comment in lib533

Closes #16523

5 months agognutls: fix use of pkcs11 urls for keys/certs
Stefan Eissing [Tue, 25 Feb 2025 09:31:43 +0000 (10:31 +0100)] 
gnutls: fix use of pkcs11 urls for keys/certs

Fixes #16249
Forwarded-to-us-by: Carlos Henrique Lima Melara
Always use `gnutls_certificate_set_x509_key_file2()` for loading keys
and certificates, even without a password, since this function support
pkcs11 urls.

Thanks to @tatsuhiro-t for finding this out.
Help-by: Tatsuhiro Tsujikawa
Closes #16472

5 months agocmake: allow `CURL_STATIC_CRT` with shared libcurl and no curl exe
Viktor Szakats [Fri, 28 Feb 2025 03:56:12 +0000 (04:56 +0100)] 
cmake: allow `CURL_STATIC_CRT` with shared libcurl and no curl exe

Follow-up to edfa537100d6b5d2ac1b829c66757880afe59407 #16456

Closes #16516

5 months agotidy-up: prefer `return` over `exit()`, fix fallouts
Viktor Szakats [Thu, 27 Feb 2025 10:32:43 +0000 (11:32 +0100)] 
tidy-up: prefer `return` over `exit()`, fix fallouts

To avoid breaking the control flow and align to majority of code
already using `return`.

`exit()` has the side-effect of suppressing leak detection in cases.
Fix fallouts detected after switching to `return`.

- configure:
  - fix `getaddrinfo` run test to call `freeaddrinfo()` to pacify ASAN,
    and call `WSACleanup()` to deinit winsock2.
  - fix `getifaddrs` run test to call `freeifaddrs()` to pacify ASAN.
- tests/server:
  - setup `atexit(win32_cleanup)` via `win32_init()`.
  - return 2 instead of 1 on winsock2 init failures.
  - sws: goto cleanup instead of `exit()` in `http_connect()`.
    Follow-up to 02dfe7193704817184b522888ffa926e6b73f648 #7235
- tests/client/http:
  - cleanup memory to pacify ASAN in `h2-upgrade-extreme`,
    `tls-session-reuse`.
- examples:
  - block_ip: fix memory leak reported by CI.
  - http2-upload: avoid handle leaks.

Untouched `exit()` calls, made from callbacks:
- docs/examples: ephiperfifo.c, ghiper.c, hiperfifo.c
- tests/libtest: lib582.c, lib655.c, lib670.c
- tests/server: tftpd.c

Closes #16507

5 months agotest488: set --output-dir
Stefan Eissing [Fri, 28 Feb 2025 08:54:21 +0000 (09:54 +0100)] 
test488: set --output-dir

Otherwise the downloaded files land in the `tests` directory and
show up in git status.

Closes #16519

5 months agocmake: drop `HAVE_C_FLAG_Wno_long_double` logic for ancient Apple gcc
Viktor Szakats [Thu, 27 Feb 2025 22:54:47 +0000 (23:54 +0100)] 
cmake: drop `HAVE_C_FLAG_Wno_long_double` logic for ancient Apple gcc

The initial curl CMake commit introduced it in 2009-04-02 via
4c5307b45655ba75ab066564afdc0c111a8b9291. Suppressing a stray
`-Wlong-double` warning in `mprintf.c`. This was before Apple switched
to clang, and likely affected the Apple distributed GCC, version 4.2.1
at the time. It applied the workaround to CMake builds only, though
the issue seems build-tool agnostic. Yet, it was not suppressed or
reported for autotools builds.

For these reasons this logic seems obsolete and this patch drops it with
no replacement. It saves a feature detection for GCC builds for macOS.

In PR sub-commits I added (and reverted) in-source suppression. In case
it becomes necessary, that should fix it for all build tools.

Closes #16513

5 months agocmake: improve httpd detection for pytest
Viktor Szakats [Thu, 27 Feb 2025 19:22:35 +0000 (20:22 +0100)] 
cmake: improve httpd detection for pytest

Look for `httpd` in addition to `apache2`, like `./configure` does.
It fixes detection with macOS Homebrew for example.

Closes #16515

5 months agoGHA/linux: improve 'test configs' step, don't set `TFLAGS` for pytest
Viktor Szakats [Thu, 27 Feb 2025 17:58:18 +0000 (18:58 +0100)] 
GHA/linux: improve 'test configs' step, don't set `TFLAGS` for pytest

- omit comments from th config dump, show filenames for each line.
- `TFLAGS` is not used by pytest, don't set it.

Closes #16514

5 months agoasyn-ares: use the correct port number
Daniel Stenberg [Thu, 27 Feb 2025 20:54:14 +0000 (21:54 +0100)] 
asyn-ares: use the correct port number

Only triggers with old c-ares versions.

Follow-up to 8ded8e5f3f4b6586

Closes #16511

5 months agoGHA/linux: merge two package install steps
Viktor Szakats [Thu, 27 Feb 2025 16:01:17 +0000 (17:01 +0100)] 
GHA/linux: merge two package install steps

Merge pytest prereq package install step into the main package install
step, to save install time.

Closes #16509

5 months agourldata: remove 'hostname' from struct Curl_async
Daniel Stenberg [Mon, 24 Feb 2025 12:58:38 +0000 (13:58 +0100)] 
urldata: remove 'hostname' from struct Curl_async

It is unnecessary duplicated information, as the host name being
resolved is already present in conn->host.

Closes #16451

5 months agoGHA: spellcheck curl symbols better
Daniel Stenberg [Thu, 27 Feb 2025 10:17:42 +0000 (11:17 +0100)] 
GHA: spellcheck curl symbols better

This now makes sure to trim off exact matches for curl symbols and long
curl commanad line options instead of using pattern matching as before.
This should catch typoed names (that still follow the pattern) better.

The cleanspell.pl script is no longer used. cleancmd.pl is used for all
markdown files.

Closes #16504

5 months agodocs: minor edits to please the new spellchecker regime
Daniel Stenberg [Thu, 27 Feb 2025 10:20:03 +0000 (11:20 +0100)] 
docs: minor edits to please the new spellchecker regime

5 months agoruntests: accept `CURL_DIRSUFFIX` without ending slash
Viktor Szakats [Thu, 27 Feb 2025 01:38:07 +0000 (02:38 +0100)] 
runtests: accept `CURL_DIRSUFFIX` without ending slash

Follow-up to 3585796049aa5c8cc2ef4e4fa3ac289b0d5ed85c #16452
Closes #16506

5 months agoappveyor: run VS2008 job with old CMake 3.12.2
Viktor Szakats [Wed, 26 Feb 2025 21:35:09 +0000 (22:35 +0100)] 
appveyor: run VS2008 job with old CMake 3.12.2

Switch VS2008 job the oldest runner machine. It adds the oldest CMake to
the Windows mix, from 2018-11-30. Not a beauty, missing support for `-B`
and Unity, but it's a version curl supports. It's newer than Old Linux.
The previous oldest was 3.16.2. It remains used with VS2010-VS2017.

Also:
- fix VS2008 job to actually build examples.
- switch VS2019 job to OpenSSL 1.1.0 that wasn't tested before.
  Migrate OpenSSL 1.0.2 to the VS2008 job.
- measure run time of individual build steps.

Follow-up to 01c25e3b008085a7944f3eea4971f5eb469a6c49 #16458
Closes #16505

5 months agoGHA: tidy up parallel options, improve performance for some jobs
Viktor Szakats [Wed, 26 Feb 2025 20:40:59 +0000 (21:40 +0100)] 
GHA: tidy up parallel options, improve performance for some jobs

- replace `--parallel <n>` and `-j<n>` for individual commands with
  `MAKEFLAGS`, for jobs not yet doing it.
  This enables parallel builds in distcheck / maketgz-and-verify-in-tree,
  where `-j` option was missing.
- add `--parallel` for iOS Xcode job for improved performance.
- drop redundant `-j5` for Android jobs.
- drop stray `cmake --config` options from single-target jobs (cygwin,
  msys/mingw, dl-mingw, non-native). Drop redundant
  `CMAKE_RUNTIME_OUTPUT_DIRECTORY_*` settings too.
- GHA/windows: add timeout for package install steps where missing.
- GHA/non-native: specify target type explicitly for iOS cmake jobs.
  Xcode default was already Debug, single-target default was generic,
  now it's Release, with unity batch to keep it fast.

`MAKEFLAGS` is necessary for autotools jobs and CMake jobs using
the default (GNU Make) generator. It's ignored by Ninja and other tools.
`cmake --parallel` is still necessary for jobs with Visual Studio or
Xcode generators. Parallelism is 5 for GHA Linux and Windows runners,
4 for macOS, 3 for VMs, 2 for AppVeyor.

Closes #16502

5 months agourlapi: fix redirect from file:// with query, and simplify
Daniel Stenberg [Wed, 26 Feb 2025 10:13:36 +0000 (11:13 +0100)] 
urlapi: fix redirect from file:// with query, and simplify

- fix redirect from file:// URL with query part
- find_host_sep() simplify
- urlencode_str() simplify
- redirect_url() simplify
- made more const char *
- add more redirect URL test cases to test 1560

Closes #16498

5 months agobuild: set `-O3` and tune WinCE in CI, fix `getpart`, `vtls_scache` fallouts
Viktor Szakats [Tue, 25 Feb 2025 13:38:41 +0000 (14:38 +0100)] 
build: set `-O3` and tune WinCE in CI, fix `getpart`, `vtls_scache` fallouts

- GHA/windows/WinCE:
  - set `-O3 -DNDEBUG` C flags manually for the CMake mingw32ce build.
    CMake doesn't recognize the platform and fails to add them. To match
    autotools (using `-O2`), and hit similar compiler warnings.
  - enable parallel builds for cmake.
  - tune parallelism for cmake using unity batches.
  - tune parallelism for autotools.

  Follow-up to 2a292c39846107228201674d686be5b3ed96674d #15975

- tests: fix potentially uninitialized value in `readline()` in
  `getpart.c`. Detected by gcc 4.4.0 `-O2` (Windows CE) jobs:
  ```
  tests/server/getpart.c: In function 'getpart':
  tests/server/getpart.c:298: error: 'datalen' may be used uninitialized in this function
  ```
  Ref: https://github.com/curl/curl/actions/runs/13522595237/job/37785147505?pr=16476#step:11:25
  Follow-up to 592880a3caf0b6f48b1dda6fbcf6a734237fcd43

- vtls_scache: rework returning pointer to avoid compiler warning seen
  with `-O3` gcc 4.4.0 builds (Windows CE/schannel):
  ```
  lib/vtls/schannel.c: In function 'schannel_connect_step1':
  lib/vtls/vtls_scache.c:975: error: dereferencing pointer 'old_cred.4474' does break strict-aliasing rules
  lib/vtls/vtls_scache.c:985: error: dereferencing pointer 'old_cred.4474' does break strict-aliasing rules
  lib/vtls/schannel.c:959: note: initialized from here
  ```
  Ref: https://github.com/curl/curl/actions/runs/13523868335/job/37789610845#step:9:25
  Follow-up to fa0ccd9f1fbbbd77bf50b26e3ba231ea6c729474 #15774

Closes #16476

5 months agoGHA/windows: move UWP vcpkg job up top
Viktor Szakats [Wed, 26 Feb 2025 14:48:35 +0000 (15:48 +0100)] 
GHA/windows: move UWP vcpkg job up top

To bring it closer to WinCE and make the vcpkg jobs with tests form
a continuous group.

Closes #16499

5 months agovtls: move common early data code into vtls.c
Stefan Eissing [Mon, 24 Feb 2025 12:35:20 +0000 (13:35 +0100)] 
vtls: move common early data code into vtls.c

With now 2 backends implementing early data, it makes sense to have the
common handling in a single place.

Closes #16450

5 months agotest1167: catch #defines with extra whitespace
Viktor Szakats [Wed, 26 Feb 2025 11:13:43 +0000 (12:13 +0100)] 
test1167: catch #defines with extra whitespace

Before this patch, it missed this in `curl/curl.h`:
```c
#  define __has_declspec_attribute(x) 0
```
After this patch:
```
test 1167...[Verify curl prefix of public symbols in header files]
/usr/bin/perl -I. -I.  returned 1, when expecting 0
 1167: exit FAILED
== Contents of files in the log/14/ dir after test 1167
=== Start of file server.cmd
 Testnum 1167
=== End of file server.cmd
=== Start of file stdout1167
 Bad symbols in public header files:
   __has_declspec_attribute(x)
=== End of file stdout1167
FAIL 1167: 'Verify curl prefix of public symbols in header files' source analysis
TESTFAIL: These test cases failed: 1167
```

Ref: #16491
Closes #16496

5 months agotests: make sure gdb gets the right path for -x
Daniel Stenberg [Wed, 26 Feb 2025 09:48:40 +0000 (10:48 +0100)] 
tests: make sure gdb gets the right path for -x

Regression from #16452

Closes #16495

5 months agocurl.h: stop defining non-curl `__has_declspec_attribute`
Viktor Szakats [Wed, 26 Feb 2025 00:00:43 +0000 (01:00 +0100)] 
curl.h: stop defining non-curl `__has_declspec_attribute`

Public curl headers are best not to define 3rd-party or system macros.
Introduce `CURL_HAS_DECLSPEC_ATTRIBUTE` to cover this system macro and
use it.

Detected by test1167 after dropping the indentation:
```
test 1167...[Verify curl prefix of public symbols in header files]

/usr/bin/perl -I. -I.  returned 1, when expecting 0
 1167: exit FAILED
== Contents of files in the log/10/ dir after test 1167
=== Start of file server.cmd
 Testnum 1167
=== End of file server.cmd
=== Start of file stdout1167
 Bad symbols in public header files:
   __has_declspec_attribute(x)
=== End of file stdout1167
```
Ref: https://github.com/curl/curl/actions/runs/13533200900/job/37819784405?pr=16490#step:42:2087

Ref: https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute
Follow-up to 50482b8c0a2cf5315e66d182998c8fc4901ffb2d #3616
Ref: #16496 (fixing test1167)
Closes #16491

5 months agobuild: silence mingw32ce C99 format warnings, simplify CI
Viktor Szakats [Wed, 26 Feb 2025 00:33:49 +0000 (01:33 +0100)] 
build: silence mingw32ce C99 format warnings, simplify CI

`./configure` mingw32ce builds enable C99 mode automatically, that
triggers compiler warnings in gcc 4.4.0. We initially worked it around
in CI by suppressing the detection of C99 with `ac_cv_prog_cc_c99=no`.

Replace it with automatically silencing the bogus warnings in C99 mode,
for all build systems:
```
lib/ftp.c: In function 'Curl_GetFTPResponse':
lib/ftp.c:726: error: format '%zd' expects type 'signed size_t', but argument 4 has type 'ssize_t'
lib/ws.c: In function 'ws_dec_pass_payload':
lib/ws.c:304: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'ssize_t'
lib/ws.c: In function 'ws_enc_write_head':
lib/ws.c:581: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'long int'
lib/vtls/schannel.c: In function 'schannel_connect_step1':
lib/vtls/schannel.c:1122: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'ssize_t'
lib/vtls/schannel.c: In function 'schannel_connect_step2':
lib/vtls/schannel.c:1311: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'ssize_t'
lib/vtls/schannel.c: In function 'schannel_send':
lib/vtls/schannel.c:1793: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'ssize_t'
lib/vtls/schannel.c:1810: error: format '%zd' expects type 'signed size_t', but argument 3 has type 'ssize_t'
lib/vtls/schannel.c: In function 'schannel_shutdown':
lib/vtls/schannel.c:2286: error: format '%zd' expects type 'signed size_t', but argument 4 has type 'ssize_t'
lib/vtls/vtls.c: In function 'ssl_cf_recv':
lib/vtls/vtls.c:1422: error: format '%zd' expects type 'signed size_t', but argument 5 has type 'ssize_t'
```
Ref: https://github.com/curl/curl/actions/runs/13533841306/job/37821720902?pr=16492#step:9:20

Also: simplify Windows CE job configuration in GHA/windows.

Follow-up to 2a292c39846107228201674d686be5b3ed96674d #15975
Closes #16492

5 months agocmake: warn for OpenSSL versions missing TLS 1.3 support (revert)
Viktor Szakats [Tue, 25 Feb 2025 23:49:25 +0000 (00:49 +0100)] 
cmake: warn for OpenSSL versions missing TLS 1.3 support (revert)

We decided not to show warnings for this issue.

Also this:
```
CMake Warning at CMakeLists.txt:783 (message):
  OpenSSL does not support TLS 1.3.
```
as seen in #16483 with CMake 3.12.4, `OPENSSL_VERSION` is empty.
Perhaps detection isn't reliable? I haven't seen this so far with
mainline OpenSSL. An `if(OPENSSL_VERSION AND ...)` can fix it, if we
opt for this warning in the future.

Follow-up to #16122
This reverts commit 34c1c653fc475efb828658f900979596905c688e #16120
Closes #16485

5 months agoGHA/http3-linux: build out-of-tree, make test2502 support it
Viktor Szakats [Tue, 25 Feb 2025 16:35:18 +0000 (17:35 +0100)] 
GHA/http3-linux: build out-of-tree, make test2502 support it

To sync with the rest of core workflows.

Also fixup test2502 failing for out-of-tree builds due to:
```
== Info: error reading ca cert file ./certs/EdelCurlRoot-ca.cacert (Error while reading file.)
```
Ref: https://github.com/curl/curl/actions/runs/13525575035/job/37795171282?pr=16480#step:23:3608

Cherry-picked from #16480
Closes #16481

5 months agoGHA/linux: build out-of-tree, make autotools `tidy` target support it
Viktor Szakats [Tue, 25 Feb 2025 15:49:04 +0000 (16:49 +0100)] 
GHA/linux: build out-of-tree, make autotools `tidy` target support it

To sync with the rest of core workflows.

Also fix the `tidy` (clang-tidy) target in autotools to support
out-of-tree builds:
```
clang-tidy slist_wc.c terminal.c tool_bname.c [...] var.c tool_hugehelp.c tool_ca_embed.c
  -quiet --warnings-as-errors=* -checks=-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-optin.performance.Padding,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,-clang-analyzer-valist.Uninitialized --
  -I../../include -I../lib -I../src -I../../lib -I../../src
  -DBUILDING_CURL -DUSE_MANUAL -D_GNU_SOURCE -DHAVE_CONFIG_H
[1/45] Processing file /home/runner/work/curl/curl/bld/src/slist_wc.c.
Error while processing /home/runner/work/curl/curl/bld/src/slist_wc.c.
[2/45] Processing file /home/runner/work/curl/curl/bld/src/terminal.c.
Error while processing /home/runner/work/curl/curl/bld/src/terminal.c.
[3/45] Processing file /home/runner/work/curl/curl/bld/src/tool_bname.c.
Error while processing /home/runner/work/curl/curl/bld/src/tool_bname.c.
[...]
```
Ref: https://github.com/curl/curl/actions/runs/13525337357/job/37794388404?pr=16480#step:36:561

Closes #16480

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 26 Feb 2025 09:31:16 +0000 (10:31 +0100)] 
RELEASE-NOTES: synced

5 months agowolfssl: warn if CA native import option is ignored
Jay Satiro [Fri, 21 Feb 2025 08:50:15 +0000 (03:50 -0500)] 
wolfssl: warn if CA native import option is ignored

- Show verbose message if the CA native import option is set but
  the wolfSSL build does not support it.

wolfSSL has to be built with WOLFSSL_SYS_CA_CERTS to import native
CA certificates and that may not be common.

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

5 months agoaltsvc: rewrite parser using strparse
Daniel Stenberg [Mon, 24 Feb 2025 14:29:13 +0000 (15:29 +0100)] 
altsvc: rewrite parser using strparse

Extend test 1654.

Closes #16454

5 months agocookie: do prefix matching case-sensitively
Daniel Stenberg [Wed, 26 Feb 2025 06:54:15 +0000 (07:54 +0100)] 
cookie: do prefix matching case-sensitively

According to section 4.1.3.1 and 4.1.3.2 of
draft-ietf-httpbis-rfc6265bis-19

Ref: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-19#section-4.1.3.1

Closes #16494

5 months agourldata: move the ech struct field to the "right place"
Daniel Stenberg [Tue, 25 Feb 2025 22:53:41 +0000 (23:53 +0100)] 
urldata: move the ech struct field to the "right place"

We keep the struct field ordered in a rough size order, big to small.

Closes #16489

5 months agoGHA: enable the RTSP tests on macOS gcc-12
Daniel Stenberg [Tue, 25 Feb 2025 22:22:29 +0000 (23:22 +0100)] 
GHA: enable the RTSP tests on macOS gcc-12

5 months agocurl.h: change some enums to defines with L suffix
Daniel Stenberg [Tue, 25 Feb 2025 16:33:17 +0000 (17:33 +0100)] 
curl.h: change some enums to defines with L suffix

To help applications do the right thing easier, change some enum values
into defines with L suffixes so that they get the corect type (long)
easier when used with curl_easy_setopt(). This also fixes a few of our
own libtests.

To reduce the risk that this change breaks the compile for any existing
users, the previously provided enums are still provided, but the values
to use are not defined by the enums.

This change "magically" fixes a few RTSP test failures we have had on
64-bit platforms because those options were not see using longs
properly.

Closes #16482

5 months agolibtest/libprereq.c: set CURLOPT_FOLLOWLOCATION with a long
Daniel Stenberg [Tue, 25 Feb 2025 22:13:49 +0000 (23:13 +0100)] 
libtest/libprereq.c: set CURLOPT_FOLLOWLOCATION with a long

Previously this used '1', which as an int. The option needs a long.

Closes #16487

5 months agoCURLOPT_HTTPHEADER.md: add comments to the example
Daniel Stenberg [Tue, 25 Feb 2025 22:16:50 +0000 (23:16 +0100)] 
CURLOPT_HTTPHEADER.md: add comments to the example

Ref: https://mastodon.social/@jpmens/114065709635360064
Closes #16488

5 months agocmake: sync cutoff version with autotools for picky option `-ftree-vrp`
Viktor Szakats [Tue, 25 Feb 2025 13:54:08 +0000 (14:54 +0100)] 
cmake: sync cutoff version with autotools for picky option `-ftree-vrp`

Sync cutoff version for `-ftree-vrp` with autotools, which enables it
for gcc 4.3+ (cmake builds enabled it for 5.0+, before this patch).

Cherry-picked from #16476
Closes #16478

5 months agocmake: pre-fill known type sizes for Windows OSes
Viktor Szakats [Mon, 24 Feb 2025 23:01:35 +0000 (00:01 +0100)] 
cmake: pre-fill known type sizes for Windows OSes

To save configuration time.

After this patch, for mingw-w64 and MSVC curl's CMake builds pre-fill
almost all type sizes without auto-detection. In most cases this leaves
3 type size auto-detections. Those depend on 64/32-bitness, and `time_t`
also depends on CRT and custom options. Old mingw-w64 versions require
some extra detections. We recommend v3.0 or newer to avoid them.

For Windows CE, this patch pre-fills all type sizes.

If this is causing any issue, please report it and disable pre-filling
with `-D_CURL_PREFILL=OFF` in the meantime.

Cherry-picked from #16394
Closes #16464

5 months agoINSTALL-CMAKE.md: CMake usage updates
Derek Huang [Fri, 14 Feb 2025 07:28:27 +0000 (02:28 -0500)] 
INSTALL-CMAKE.md: CMake usage updates

This PR updates the CMake build/install docs in `docs/INSTALL-CMAKE.md`,
in particular focusing on the use of libcurl from CMake using
`find_package` as well as the newly added features/protocols support via
using `COMPONENTS` or `OPTIONAL_COMPONENTS` with `find_package`.
See #15854 for initial discussion and the corresponding PR #15858 that
was merged.

Some additional best-practices notes are added, for example:

* Encouraging building out-of-source
* Using `--config` with `cmake --build` for multi-config CMake
  generators, not `CMAKE_BUILD_TYPE`

We also add a CURL CMake-specific tip on using `CMAKE_INSTALL_PREFIX`
during configure time to set the install prefix, not using `--prefix`
when running `cmake --install` so `curl-config` output is consistent.

Closes #16329

5 months agoruntests: drop recognizing 'winssl' as Schannel
Viktor Szakats [Tue, 25 Feb 2025 01:50:40 +0000 (02:50 +0100)] 
runtests: drop recognizing 'winssl' as Schannel

Follow-up to 180501cb0220c8451a38dc8ae04b6c58743025a8 #3504
Closes #16467

5 months agoruntests: recognize AWS-LC as OpenSSL
Viktor Szakats [Tue, 25 Feb 2025 00:31:58 +0000 (01:31 +0100)] 
runtests: recognize AWS-LC as OpenSSL

Fixes (GHA/linux, AWS-LC jobs):
```
test 0307 SKIPPED: curl lacks OpenSSL support
test 0308 SKIPPED: curl lacks OpenSSL support
[...]
```
Ref: https://github.com/curl/curl/actions/runs/13511134270/job/37751473424#step:42:104

Follow-up to 34ef4fab22d93cf7ef1d6c2954a0bad19f323ea9 #10320
Closes #16466

5 months agotool_getparam: make --url support a file with URLs
Daniel Stenberg [Sat, 22 Feb 2025 09:36:10 +0000 (10:36 +0100)] 
tool_getparam: make --url support a file with URLs

It implies -O used for each URL.

Mention in the --url documentation.

Test 488 and 489 verify.

Closes #16099

5 months agoopenssl: check return value of X509_get0_pubkey
Tianyi Song [Tue, 25 Feb 2025 05:35:03 +0000 (13:35 +0800)] 
openssl: check return value of X509_get0_pubkey

Fixes #16468
Closes #16469

5 months agorustls: add support for CERTINFO
Yedaya Katsman [Mon, 24 Feb 2025 19:40:19 +0000 (21:40 +0200)] 
rustls: add support for CERTINFO

This allows you to use the `certs` and `num_certs` writeout variables in
the curl tool, and getting information about the server certificates
using CURLINFO_CERTINFO.

Closes #16459

5 months agobuild: drop unused `getpart` tool
Viktor Szakats [Mon, 24 Feb 2025 04:27:02 +0000 (05:27 +0100)] 
build: drop unused `getpart` tool

Drop the `getpart` test tool from standard builds. This tool was not
used by tests.

Also:
- make it easier to build it standalone for testing `getpart.c` on
  the command-line.
- reduce local var scopes in source.

Closes #16460

5 months agoCURLOPT_HTTPHEADER.md: rephrases
Daniel Stenberg [Mon, 24 Feb 2025 21:03:38 +0000 (22:03 +0100)] 
CURLOPT_HTTPHEADER.md: rephrases

An attempt to use better language

Closes #16461

5 months agocurl_trc: fix build with CURL_DISABLE_VERBOSE_STRINGS
Daniel Stenberg [Mon, 24 Feb 2025 21:52:27 +0000 (22:52 +0100)] 
curl_trc: fix build with CURL_DISABLE_VERBOSE_STRINGS

Fixes #16462
Closes #16463

5 months agoruntests: drop ref to unused external function [ci skip]
Viktor Szakats [Mon, 24 Feb 2025 22:07:25 +0000 (23:07 +0100)] 
runtests: drop ref to unused external function [ci skip]

Follow-up to 3585796049aa5c8cc2ef4e4fa3ac289b0d5ed85c #16452

5 months agoCI: misc improvements, restore VS2008 job
Viktor Szakats [Mon, 24 Feb 2025 18:59:23 +0000 (19:59 +0100)] 
CI: misc improvements, restore VS2008 job

- appveyor: restore VS2008 job, after fixing its issues.
  Enable OpenSSL in it. It takes 1 minute.
  Follow-up to 9b0467b169e08b70077f09313975d4eac14a9930 #16453
  Follow-up to edfa537100d6b5d2ac1b829c66757880afe59407 #16456
- appveyor: make a copy of OpenSSL DLLs to have them picked up as an
  artifact (disabled by default) to aid local tests.
- appveyor: dump CMake configuration logs on failure.
- appveyor: tidy up job parameter defaults.
- GHA/windows: add pre-fill check option for dl-mingw jobs.
- GHA/windows: fix pre-fill check option for MSYS jobs by installing
  `diffutils`.
  Follow-up to e7adf3e83747c2915c671f2e560cde6f3d4a4905 #15841
- GHA/windows: de-duplicate to `PATH` commands for Cygwin.
- GHA/windows: drop `$SYSTEMROOT/System32` from `PATH` for Cygwin
  configure. It's not needed.
  Follow-up to 36fd2dd6ee874726c628e67fcf6415a2e52bfe29 #13599
- list `.pdb` files in curl version step for MSVC.
  Ref: #16439

Cherry-picked from #16394
Closes #16458

5 months agodocs: bump `rustls` to 0.14.1
Laurențiu Nicola [Mon, 24 Feb 2025 09:51:06 +0000 (11:51 +0200)] 
docs: bump `rustls` to 0.14.1

Closes #16446

5 months agoINSTALL-CMAKE.md: mention `ZLIB_USE_STATIC_LIBS`
Viktor Szakats [Mon, 24 Feb 2025 17:23:47 +0000 (18:23 +0100)] 
INSTALL-CMAKE.md: mention `ZLIB_USE_STATIC_LIBS`

Cherry-picked from #16394
Closes #16457

5 months agocmake: restrict static CRT builds to static curl exe, test in CI
Viktor Szakats [Mon, 24 Feb 2025 16:27:57 +0000 (17:27 +0100)] 
cmake: restrict static CRT builds to static curl exe, test in CI

Static CRT crashes MSVCR* MSVC builds (in VS2008, VS2010, VS2012,
VS2013) according to CI and local tests. The reproducible crash happens
in `curl_mfprintf() -> fputc(s, stderr)` when trying to display the
warning message in `curl -V`. `stderr` is non-NULL and resolves to `2`.
This reproducer needs a debug-enabled build, but it's unrelated to debug
features or curl's memory tracker. It happens regardless of unity build,
CPU architecture or `DllMain()` use. Example from VS2013:

```
+ _bld/src/Debug/curl.exe --disable --version
./appveyor.sh: line 124:   203 Segmentation fault      "${curl}" --disable --version
```
Ref: https://ci.appveyor.com/project/curlorg/curl/builds/51570451/job/ojpdqrsm1hmpmq6a#L210

Another crash happened in an UCRT build (VS2017) with a couple of
`printf()`s added to curl's `main()` function:

```
Microsoft Visual C++ Runtime Library
Debug Assertion Failed!
Program: C:/projects/curl/bld/src/Debug/curl.exe
File: minkernel/crts/ucrt/src/appcrt/heap/debug_heap.cpp
Line: 996
Expression: _act_first_block == header
```
(it hangs the job in CI due to the GUI popup)
Ref: https://github.com/curl/curl/pull/16394#issuecomment-2677181716

To avoid actual and potential issues, this patch issues a warning on
the shared-libcurl + static-CRT combination and falls back to the
default, shared CRT. IOW a static CRT build now requires a static curl
exe when using the `CURL_STATIC_CRT=ON` option.

Follow-up to 4fc6ebe18a607764194ee23e5aa898a027fe3c60 #1621
Cherry-picked from #16394 (with more details there)

Closes #16456

5 months agocmake: hide empty `MINGW64_VERSION` output for mingw32ce
Viktor Szakats [Mon, 24 Feb 2025 16:24:33 +0000 (17:24 +0100)] 
cmake: hide empty `MINGW64_VERSION` output for mingw32ce

Follow-up to e49797abc24b8e0ac652d7aa0ceec7d252f9a019 #16022
Follow-up to 2a292c39846107228201674d686be5b3ed96674d #15975
Cherry-picked from #16394

Closes #16455

5 months agowindows: drop code and curl manifest targeting W2K and older
Viktor Szakats [Mon, 24 Feb 2025 15:25:38 +0000 (16:25 +0100)] 
windows: drop code and curl manifest targeting W2K and older

curl requires Windows XP since 2023. Drop version detection code using
`GetVersionEx()` aimed to support earlier Windows versions. With that
call deleted, the embedded manifest in `curl.rc` becomes unnecessary.
Delete it too, along with the enabler logic in build systems.

This allows to stop forcing `/MANIFEST:NO` for MSVC builds. Dropping it
fixes VS2008 shared builds, that require an auto-generated SxS
(side-by-side assembly) manifest to find their CRT DLLs. This was the
issue that prevented VS2008 `curl.exe` launching on AppVeyor CI:
```
src/curl.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
```
Ref: https://ci.appveyor.com/project/curlorg/curl/builds/51577006/job/eitypvwlb1rxr11d#L261

FWIW the `curl.rc` embedded manifest wasn't ever enabled for VS2008 CI
builds either, because CMake did not pass our custom macro via
`CMAKE_RC_FLAGS` to `rc.exe`. For reasons I could not figure out.

After this patch the curl build no longer inject its own manifest, and
lets the default be applied by linkers and toolchains. It fixes VS2008
shared builds. curl continues to detect the real Windows version via
`RtlVerifyVersionInfo()` from `ntdll`.

Follow-up to 960d601481eed46d7b46391380c4869bcf0d9f19 #12225
Follow-up to 5044909ca251d3d190d8c5cc45243a04d244eaed #7810
Follow-up to ebd213270a017a6830928ee2e1f4a9cabc799898 #1221
Ref: #15972
Cherry-picked from #16394

Closes #16453

5 months agoruntests: support multi-target cmake, drop workarounds from CI
Viktor Szakats [Mon, 24 Feb 2025 14:27:35 +0000 (15:27 +0100)] 
runtests: support multi-target cmake, drop workarounds from CI

Support multi-target cmake builds via `CURL_DIRSUFFIX` env. For example:
`export CURL_DIRSUFFIX=Debug/`.

Multi-target generators place their output to `src/<subdir>/`,
`lib/<subdir>/`, `tests/server/<subdir>`, `tests/libtest/<subdir>` and
`tests/unit/<subdir>/` by default. Before this patch, `runtests.pl`
couldn't run on such builds because it expected the binaries under the
their `<subdir>`-less directories. This patch allows to set such subdir
and make `runtests.pl` find the binaries. In CI we use multi-target
builds with tests for MSVC. It also helps Xcode-generator builds, though
in CI we don't have such job running tests.

There may be better solutions to configure this, but passing a custom
value to `runtests.pl` including its subprocesses is somewhat tricky.
The reason the configuration value expects the slash at the end is
because MSYS is automagically expanding the env to a (wrong) absolute
path if the slash is in the front.

Also:
- drop the `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_*=` workaround from CI.
- replace `resolve` references in tests with a new `%RESOLVE` variable.
  It didn't use a filename extension before. After this patch it uses
  `exe_ext('TOOL')`. I'm not sure if this is the correct choice vs.
  `exe_ext('SRV')`.
- fix `-c` option format in manual.
- fix some whitespace.

Note, in CI we still tweak `CMAKE_RUNTIME_OUTPUT_DIRECTORY_*` in jobs
which share steps between `./configure` and cmake. It's easier that way.

Ref: #15000
Cherry-picked from #16394

Closes #16452

5 months agodelta: get contributors without changing THANKS
Daniel Stenberg [Mon, 24 Feb 2025 12:17:38 +0000 (13:17 +0100)] 
delta: get contributors without changing THANKS

Give contrithanks.sh the option to send the list of names to stdout so
that delta can use it appropriately for counting.

Closes #16449

5 months agoci: use stable rust toolchain for rustls and skip installing the docs
Laurențiu Nicola [Mon, 24 Feb 2025 09:58:22 +0000 (11:58 +0200)] 
ci: use stable rust toolchain for rustls and skip installing the docs

Closes #16447

5 months agocontrithanks.sh: update docs/THANKS in place
Daniel Stenberg [Mon, 24 Feb 2025 10:04:30 +0000 (11:04 +0100)] 
contrithanks.sh: update docs/THANKS in place

Now using 'sort' for sorting the names. This has the small side-effect
that it sorts slightly different than the previously used sort function
(emacs).

I think this is a better sort and over all it makes it more convenient
to use the script as it removes a manual step.

Closes #16448

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 24 Feb 2025 09:13:06 +0000 (10:13 +0100)] 
RELEASE-NOTES: synced

5 months agohttp: convert parsers to strparse
Daniel Stenberg [Thu, 20 Feb 2025 15:55:13 +0000 (16:55 +0100)] 
http: convert parsers to strparse

Closes #16436

5 months agowolfssl: tls early data support
Stefan Eissing [Tue, 4 Feb 2025 14:24:00 +0000 (15:24 +0100)] 
wolfssl: tls early data support

Enable TLS Early Data for wolfSSL:

- merge WOLFSSL_CTX and WOLFSSL setup from ngtcp2 with the general
  implemenation in wolfssl.c
- enable for QUIC via ngtcp2
- give Curl_vquic_tls_init() a `struct alpn_spec` like used for the TCP
  case. Adapt gnutls and other users.
- enable pytest test cases for early data with wolfSSL

and while this messes up wolfssl.c anyway, do

- rename all struct/functions with prefix 'wolfssl_' to 'wssl_' to not
  pollute that name prefix
- rename `ctx/handle` to `ssl_ctx/ssl`, as used in openssl case

Closes #16167

5 months agocontributors.sh: lowercase 'github' for consistency
Daniel Stenberg [Sun, 23 Feb 2025 23:08:32 +0000 (00:08 +0100)] 
contributors.sh: lowercase 'github' for consistency

also fix contrithanks and THANKS-filter

Ref: #16438
Closes #16443

5 months agoRELEASE-NOTES: fix github casing
Timo Tijhof [Sun, 23 Feb 2025 00:18:56 +0000 (00:18 +0000)] 
RELEASE-NOTES: fix github casing

Follows-up b22f9066a5, which added a new contributor with a different
casing for "github" than the others.

Closes #16438

5 months agoCURLMOPT_SOCKETFUNCTION.md: add advice for socket callback invocation times
Stefan Eissing [Sun, 23 Feb 2025 09:05:41 +0000 (10:05 +0100)] 
CURLMOPT_SOCKETFUNCTION.md: add advice for socket callback invocation times

Explain when a registered socket callback may get invoked to make user
better aware on how to handle it.

Closes #16441

5 months agotool_operate: fail SSH transfers without server auth
Daniel Stenberg [Sat, 22 Feb 2025 12:05:17 +0000 (13:05 +0100)] 
tool_operate: fail SSH transfers without server auth

This now insists on using a server auth option unless --insecure is
provided. As an added bonus, it now also only checks for the knownhosts
file once (if found).

Ref: #16197
Closes #16205

5 months agohttp: make the RTSP version check stricter
Daniel Stenberg [Fri, 21 Feb 2025 22:48:51 +0000 (23:48 +0100)] 
http: make the RTSP version check stricter

- make it only accept version 1.0, as that is the version curl supports
- convert the parser to use strparse
- the status code max is now 999, but it does allow != 3 digits

Closes #16435

5 months agomulti: event based rework
Stefan Eissing [Sat, 22 Feb 2025 11:46:42 +0000 (12:46 +0100)] 
multi: event based rework

Rework the event based handling of transfers and connections to
be "localized" into a single source file with clearer dependencies.

- add multi_ev.c and multi_ev.h
- add docs/internal/MULTI-EV.md to explain the overall workings
- only do event handling book keeping when the socket callback
  is set
- add handling for "connection only" event tracking, when internal
  easy handles are used that are not really tied to a connection.
  Used in connection pool.
- remove transfer member "last_poll" and connections "shutdown_poll"
  and keep all that internal to multi_ev.c
- add CURL_TRC_M() for tracing of "multi" related things, including
  event handling and connection pool operations. Add new trace
  feature "multi" for trace config.
  multi traces will show exactly what is going on in regard to
  event handling.
- multi: trace transfers "mstate" in every CURL_TRC_M() call
- make internal trace buffer 2048 bytes and end the silliness
  with +n here -m there. Adjust test 1652 expectations of resulting
  length and input edge cases.
- add trace feature "lib-ids" to perfix libcurl traces with transfer
  and connection ids. Useful for debugging libcurl applications.

Closes #16308

5 months agotest76: add test with comma-separated list of WWW-Auth methods
Daniel Stenberg [Fri, 21 Feb 2025 15:24:01 +0000 (16:24 +0100)] 
test76: add test with comma-separated list of WWW-Auth methods

The support for this is not 100% but at least this works.

Closes #16425

5 months agosetopt: remove unnecesary void pointer typecasts
Daniel Stenberg [Fri, 21 Feb 2025 15:52:34 +0000 (16:52 +0100)] 
setopt: remove unnecesary void pointer typecasts

Closes #16426

5 months agocmake: disable HTTPS-proxy as a feature if proxy is disabled
Daniel Stenberg [Sat, 22 Feb 2025 09:08:07 +0000 (10:08 +0100)] 
cmake: disable HTTPS-proxy as a feature if proxy is disabled

Co-authored-by: Viktor Szakats
Closes #16434

5 months agovar: add a '64dec' function that can base64 decode a string
Daniel Stenberg [Sat, 22 Feb 2025 09:49:19 +0000 (10:49 +0100)] 
var: add a '64dec' function that can base64 decode a string

Verified in test 455 and 487.

If the provided string cannot be base64-decoded, it will instead use
"[64dec-fail]" (without the quotes).

Documented

Ref: #16288
Closes #16330

5 months agocurl: add write-out variable 'tls_earlydata'
Stefan Eissing [Thu, 9 Jan 2025 14:28:22 +0000 (15:28 +0100)] 
curl: add write-out variable 'tls_earlydata'

Add the write-out variable 'tls_earlydata' to inspect the amount of
TLSv1.3 early data that had been sent.

Closes #15956

5 months agognutls: fix connection state check on handshake
Stefan Eissing [Fri, 21 Feb 2025 13:42:26 +0000 (14:42 +0100)] 
gnutls: fix connection state check on handshake

When running curl event based, connect attempts stalled as the 'done'
check was using the wrong state in gnutls.

Add event based pytest runs to all http3 jobs and the openssl and
mbedtls ones on linux.

Closes #16423

5 months agocmake: avoid `-Wnonnull` warning in `HAVE_FSETXATTR_5` detection
Viktor Szakats [Fri, 21 Feb 2025 16:30:46 +0000 (17:30 +0100)] 
cmake: avoid `-Wnonnull` warning in `HAVE_FSETXATTR_5` detection

Seen in Android 21/35 CI jobs:
```
curl/CMake/CurlTests.c:315:16: warning: null passed to a callee that requires a non-null argument [-Wnonnull]
   315 |   fsetxattr(0, 0, 0, 0, 0);
       |                ^
 1 warning generated.
```
Ref: https://github.com/curl/curl/actions/runs/13460225795/job/37613494183#step:9:5978

Follow-up to bd9f9b085aa242a5e93be0b2da96ce498d7813c4 #16377
Closes #16427

5 months agoGHA/windows: replace GfW with MSYS2 runtime downgrade
Viktor Szakats [Fri, 21 Feb 2025 15:15:49 +0000 (16:15 +0100)] 
GHA/windows: replace GfW with MSYS2 runtime downgrade

We recently switched to a known good version of Git for Windows to avoid
the MSYS2/Cygwin runtime performance regression.

MSYS2 is closer to the source of the MSYS2/Cygwin projects. Its known
good version is newer. Installing the downgrade is faster and safer. It
also allows to restore the scripts to their original iteration, making
the workaround easier to drop once the perf issue is fixed upstream.

Therefore, switch back to using MSYS2, and install the runtime downgrade
before running curl tests.

Also disable `pacman`'s `CheckSpace` for best performance.

Jeremy identified to the root cause of the perf regression in this
Cygwin commit (from 2024-09-17):
https://cygwin.com/git/?p=newlib-cygwin.git;a=commit;h=c7fe29f5cb85242ae2607945762f7e0b9af02513

Co-authored-by: Jeremy Drake
Patch: https://github.com/jeremyd2019/curl/commit/95a404e19ae03ba8d35089e66d9690e3a4f11b7c
Ref: https://github.com/curl/curl/pull/16217#issuecomment-2673158597
Ref: https://github.com/curl/curl/pull/16217#issuecomment-2673461330

Follow-up to 116950a25066257f86461f9d1dfa5f787f55e73c #16265
Follow-up to 1bf774df57e873d08f0c6e525e6ec3a0f6e62bce #16217
Follow-up to 5f9411f953f35ca84645b5a6824fb9fef20887ed #15380

Closes #16424

5 months agoasyn-ares: renamed define
Daniel Stenberg [Fri, 21 Feb 2025 13:56:21 +0000 (14:56 +0100)] 
asyn-ares: renamed define

It has the same name as the one used in asyn-thread, but for a slightly
different purpose. This not only caused unity build problems, but would
also be confusing and error-prone.

5 months agoGHA: add a build with c-ares + HTTP-RR on Alpine
Daniel Stenberg [Fri, 21 Feb 2025 07:19:18 +0000 (08:19 +0100)] 
GHA: add a build with c-ares + HTTP-RR on Alpine

Closes #16413

5 months agohttp: split Curl_http_input_auth into sub functions
Daniel Stenberg [Fri, 21 Feb 2025 08:07:41 +0000 (09:07 +0100)] 
http: split Curl_http_input_auth into sub functions

Simplifies things. Increases readability a lot.

Fixes #16412
Reported-by: Viktor Szakats
Closes #16416

5 months agoc-ares: error out for unsupported versions, drop unused macros
Viktor Szakats [Thu, 20 Feb 2025 16:08:38 +0000 (17:08 +0100)] 
c-ares: error out for unsupported versions, drop unused macros

Stop compilation with a clear error when build with versions older than
decribed in `docs/INTERNALS.md` and `docs/HTTPSRR.md` docs.

Also drop an unused macro and another one that's no longer used with
the required minimum c-ares version.

Closes #16407