]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
5 months agoconn: fix connection reuse when SSL is optional
Stefan Eissing [Wed, 19 Feb 2025 09:52:34 +0000 (10:52 +0100)] 
conn: fix connection reuse when SSL is optional

In curl 8.12 I tried to improve the logic on how we handle connections
that "upgrade" to TLS later, e.g. with a STARTTLS. I found the existing
code hard to read in this regard. But of course, the "improvements" blew
up in my face.

We fixed issues with imap, opo3, smtp in 8.12.1, but ftp was no longer
reusing existing, upgraded control connections as before. This PR adds
checks in our pytest FTP tests that verify reuse is happening as
intended.

I rewrote the logic in url.c again, so that the new test checks now pass.

Reported-by: Zenju on github
Fixes #16384
Closes #16392

5 months agoclient writer: handle pause before deocding
Stefan Eissing [Mon, 10 Feb 2025 16:40:11 +0000 (17:40 +0100)] 
client writer: handle pause before deocding

Adds a "cw-pause" client writer in the PROTOCOL phase that buffers
output when the client paused the transfer. This prevents content
decoding from blowing the buffer in the "cw-out" writer.

Added test_02_35 that downloads 2 100MB gzip bombs in parallel and
pauses after 1MB of decoded 0's.

This is a solution to issue #16280, with some limitations:
- cw-out still needs buffering of its own, since it can be paused
  "in the middle" of a write that started with some KB of gzipped
  zeros and exploded into several MB of calls to cw-out.
- cw-pause will then start buffering on its own *after* the write
  that caused the pause. cw-pause has no buffer limits, but the
  data it buffers is still content-encoded.
  Protocols like http/1.1 stop receiving, h2/h3 have window sizes,
  so the cw-pause buffer should not grow out of control, at least
  for these protocols.
- the current limit on cw-out's buffer is ~75MB (for whatever
  historical reason). A potential content-encoding that blows 16KB
  (the common h2 chunk size) into > 75MB would still blow the buffer,
  making the transfer fail. A gzip of 0's makes 16KB into ~16MB, so
  that still works.

A better solution would be to allow CURLE_AGAIN handling in the client
writer chain and make all content encoders handle that. This would stop
explosion of encoding on a pause right away. But this is a large change
of the deocoder operations.

Reported-by: lf- on github
Fixes #16280
Closes #16296

5 months agohttp: negotiation and room for alt-svc/https rr to navigate
Stefan Eissing [Tue, 28 Jan 2025 13:11:59 +0000 (14:11 +0100)] 
http: negotiation and room for alt-svc/https rr to navigate

Add a 'wanted' major HTTP version bitmask next to the 'allowed' bitmask
in HTTP version negotiation. This will try connections as specified in
'wanted', but enabled Alt-Svc and HTTPS-RR to redirect to other major
HTTP versions, if those are 'allowed'.

Changes libcurl internal default to `CURL_HTTP_VERSION_NONE` and removes
the code in curl that sets `CURL_HTTP_VERSION_2TLS` if the command line
does not say anything else.

Closes #16117

5 months agocfilter: remove 'blocking' connect handling
Stefan Eissing [Wed, 19 Feb 2025 15:49:31 +0000 (16:49 +0100)] 
cfilter: remove 'blocking' connect handling

Remove `blocking` argument from cfilter's connect method.

Implement blocking behaviour in Curl_conn_connect() instead for all
filter chains.

Update filters implementations. Several of which did never use the
paramter (QUIC for example). Simplifies connect handling in TLS filters
that no longer need to loop

Fixed a blocking connect call in FTP when waiting on a socket accept()
which only worked because the filter did not implement it.

Closes #16397

5 months agotool_getparam: clear sensitive arguments better
Daniel Stenberg [Wed, 19 Feb 2025 22:55:31 +0000 (23:55 +0100)] 
tool_getparam: clear sensitive arguments better

curl attempts to clear some flags to hide them from snooping neighbors
(on platforms where it works). For example the credentials provided with
-u. Previously it would only do that if there was a space between the
option and the credentials as in "-u joe:s3cr3t" but not when done
without a separating space as in "-ujoe:s3cr3t".

This addresses that previous shortcoming.

Reported-by: kayrus on github
Fixes #16396
Closes #16401

5 months agohttpsrr: fix the HTTPS-RR threaded-resolver build combo
Daniel Stenberg [Thu, 20 Feb 2025 07:31:33 +0000 (08:31 +0100)] 
httpsrr: fix the HTTPS-RR threaded-resolver build combo

Reported-by: Viktor Szakats
Fixes #16399
Closes #16404

5 months agobuild: silence bogus `-Wconversion` warnings with gcc 5.1-5.4
Viktor Szakats [Wed, 19 Feb 2025 16:26:58 +0000 (17:26 +0100)] 
build: silence bogus `-Wconversion` warnings with gcc 5.1-5.4

It's fixed in gcc 5.5.0.

Example: https://godbolt.org/z/x6Th8q844

Seen in gcc 5.1.0, 5.4.0 (both 32/64-bit) with dl-mingw:
```
lib/rtsp.c: In function 'rtsp_parse_transport':
lib/rtsp.c:1025:36: error: conversion to 'unsigned char' from 'int' may alter its value [-Werror=conversion]
           rtp_channel_mask[idx] |= (unsigned char)(1 << off);
                                    ^
lib/mprintf.c: In function 'parsefmt':
lib/mprintf.c:526:31: error: conversion to 'unsigned char' from 'int' may alter its value [-Werror=conversion]
         usedinput[width/8] |= (unsigned char)(1 << (width&7));
                               ^
lib/mprintf.c:544:35: error: conversion to 'unsigned char' from 'int' may alter its value [-Werror=conversion]
         usedinput[precision/8] |= (unsigned char)(1 << (precision&7));
                                   ^
lib/mprintf.c:559:29: error: conversion to 'unsigned char' from 'int' may alter its value [-Werror=conversion]
       usedinput[param/8] |= (unsigned char)(1 << (param&7));
                             ^
lib/cfilters.c: In function 'Curl_pollset_change':
lib/cfilters.c:935:25: error: conversion to 'unsigned char' from 'int' may alter its value [-Werror=conversion]
       ps->actions[i] |= (unsigned char)add_flags;
                         ^
```
gcc 5.1.0: https://github.com/curl/curl/actions/runs/13413103492/job/37467698381#step:9:21
gcc 5.4.0: https://github.com/curl/curl/actions/runs/13413103492/job/37467694479#step:9:19

Closes #16398

5 months agostrparse: provide access functions
Daniel Stenberg [Wed, 19 Feb 2025 07:49:54 +0000 (08:49 +0100)] 
strparse: provide access functions

To access the string and the length without having to directly use the
struct field names. Gives more freedom, flexbility and keeps
implementation specifics out of users' code.

Closes #16386

5 months agocookie: convert to using strparse
Daniel Stenberg [Tue, 18 Feb 2025 22:03:09 +0000 (23:03 +0100)] 
cookie: convert to using strparse

- using strparse cleans up the code and makes it easier to read and follow
- remove ? handling never used - since the path is provided without queries nowadays
- simplify sanitize_cookie_path
- avoid the strdup in pathmatch()

Closes #16386

5 months agoschannel: enable ALPN with MinGW, fix ALPN for UWP builds
Viktor Szakats [Tue, 18 Feb 2025 22:30:54 +0000 (23:30 +0100)] 
schannel: enable ALPN with MinGW, fix ALPN for UWP builds

ALPN requires mingw-w64 9.0 or newer.

Also fix ALPN-enabled builds for UWP. This assumes that WINE doesn't
support UWP, which seems to be the case when writing this.

Closes #16385

5 months agoca-native.md: sync with CURLSSLOPT_NATIVE_CA
Jay Satiro [Mon, 17 Feb 2025 21:31:48 +0000 (16:31 -0500)] 
ca-native.md: sync with CURLSSLOPT_NATIVE_CA

- Add that the native CA store is used to verify certs in addition to
  the other certificate location settings.

Basically clarify that --ca-native does not override --cacert etc.

Prior to this change that behavior was only documented in
CURLSSLOPT_NATIVE_CA which is what --ca-native maps to.

Ref: https://github.com/curl/curl/pull/16181#issuecomment-2663998865

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

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 19 Feb 2025 07:11:43 +0000 (08:11 +0100)] 
RELEASE-NOTES: synced

5 months agoKNOWN_BUGS: fix typo
John Bampton [Tue, 18 Feb 2025 16:32:06 +0000 (02:32 +1000)] 
KNOWN_BUGS: fix typo

Closes #16383

5 months agossh: consider sftp quote commands case sensitive
Daniel Stenberg [Tue, 18 Feb 2025 15:39:25 +0000 (16:39 +0100)] 
ssh: consider sftp quote commands case sensitive

They have always been documented in lowercase. They have never been
claimed to be case insensitive. They mostly map to unix counterparts
that are always lowercase. Switch to case sensitive checks: lowercase.

Closes #16382

5 months agostrparse: speed up the hex parser somewhat
Daniel Stenberg [Mon, 17 Feb 2025 21:34:21 +0000 (22:34 +0100)] 
strparse: speed up the hex parser somewhat

Around 2.3x speed-up parsing many large hexadecimal numbers. The decimal and
octal parser get marginally faster.

Still very readable, compact and easy to follow code.

Tweaks

- combine the max and the overflow check, gains 3ns/num (use a separate
  check outside of the loop instead for max < base)
- one less indirection in the pointer, gains 3ns/num
- using the table lookup for hex nums, gains 5ns/num
- unfold the num_digit() macro, gains 3s/num
- use the hexasciitable unconditionally, gains 2ns/num
- use post-increment pointer in the table lookup, gains 1ns/num
- improved valid_digit() using the table for the hex case,
  gains 26 ns/num
- use "max char" in valid_digit(), gains 3ns/num

Behavior changes:

- no longer returns STRE_TOO_BIG - only STRE_OVERFLOW
- does not move the char ** on error, which is probably better

Updated and extended test 1664 (significantly).

Closes #16374

5 months agotidy-up: use `CURL_ARRAYSIZE()`
Viktor Szakats [Tue, 18 Feb 2025 13:48:18 +0000 (14:48 +0100)] 
tidy-up: use `CURL_ARRAYSIZE()`

Follow-up to 13b2ea68f0e08b2746669addfbc7b0ecd5f1bf0e #16111

Closes #16381

5 months agohttps-rr: implementation improvements
Stefan Eissing [Thu, 30 Jan 2025 14:31:16 +0000 (15:31 +0100)] 
https-rr: implementation improvements

- fold DoH and async HTTPS-RR handling into common code.
  have common cleanups, etc. Have a CURLcode result in async
  handling to allow HTTPS RR parsing to fail.
- keep target, ipv4hints, ipv6hints, port and echconfig also
  when resolving via cares. We need to know `target` and `port`
  when evaluating possible ALPN candidates to not go astray.
- add CURL_TRC_DNS for tracing DNS operations
- replace DoH specific tracing with DNS, use doh as alias
  for dns in curl_global_tracea()

Closes #16132

5 months agohttp: version negotiation
Stefan Eissing [Mon, 27 Jan 2025 14:39:13 +0000 (15:39 +0100)] 
http: version negotiation

Translate the `data->set.httpwant` which is one of the consts from the
public API (CURL_HTTP_VERSION_*) into a major version mask plus
additional flags for internal handling.

`Curl_http_neg_init()` does the translation and flags setting in http.c,
using new internal consts CURL_HTTP_V1x, CURL_HTTP_V2x and CURL_HTTP_V3x
for the major versions. The flags are

- only_10: when the application explicity asked fro HTTP/1.0
- h2_upgrade: when the application asks for upgrading 1.1 to 2.
- h2_prior_knowledge: when directly talking h2 without ALPN
- accept_09: when a HTTP/0.9 response is acceptable.

The Alt-Svc and HTTPS RR redirections from one ALPN to another obey the
allowed major versions. If a transfer has only h3 enabled, Alt-Svc
redirection to h2 is ignored.

This is the current implementation. It can be debated if Alt-Svc should
be able to override the allowed major versions. Added test_12_06 to
verify the current restriction.

Closes #16100

5 months agocmake: `SHARE_LIB_OBJECT=ON` requires CMake 3.12 or newer
Viktor Szakats [Tue, 18 Feb 2025 00:23:40 +0000 (01:23 +0100)] 
cmake: `SHARE_LIB_OBJECT=ON` requires CMake 3.12 or newer

This feature requires Object Libraries which is supported by CMake 3.12
or newer: https://cmake.org/cmake/help/latest/release/3.12.html

Keep it permanently disabled for older CMake versions.
Also document it in `docs/INSTALL-CMAKE.md`.

Ref: https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#object-libraries

Follow-up to fc9bfb14520712672b4784e8b48256fb29204011 #11627
Follow-up to 2ebc74c36a19a1700af394c16855ce144d9878e3 #11546

Reported-by: Mark Phillips
Fixes #16375
Closes #16376

5 months agohostip: make CURLOPT_RESOLVE support replacing IPv6 addresses 16358/head
Daniel Stenberg [Mon, 17 Feb 2025 07:33:52 +0000 (08:33 +0100)] 
hostip: make CURLOPT_RESOLVE support replacing IPv6 addresses

This also applies to --resolve of course.

Applied strparse functions on the function.

Fixes #16357
Reported-by: rmg-x on github
Closes #16358
Assisted-by: Jay Satiro
5 months agoGHA/windows: drop no-op `-DCMAKE_BUILD_TYPE=` from MSVC jobs
Viktor Szakats [Mon, 17 Feb 2025 21:25:32 +0000 (22:25 +0100)] 
GHA/windows: drop no-op `-DCMAKE_BUILD_TYPE=` from MSVC jobs

They use Visual Studio generators, which are multi-target.
The build command does the Release/Debug selection via `--config`.

Also:
- appveyor: drop unnecessary conditional for 3 options.
  To sync with GHA.
- appveyor: drop unused `-DCMAKE_INSTALL_PREFIX=`.
  To sync with GHA.
- sync cmake option order between GHA and appveyor.

Closes #16372

5 months agocmake: sync OpenSSL(-fork) feature checks with `./configure`
Viktor Szakats [Thu, 9 Jan 2025 10:43:42 +0000 (11:43 +0100)] 
cmake: sync OpenSSL(-fork) feature checks with `./configure`

`./configure` uses `AC_CHECK_FUNC` for these checks, with one exception
(`SSL_CTX_set_srp_username`). It's slightly less precise but simpler as
it doesn't need headers and/or macros. Do the same in CMake.

It also allows merging ECH detections across OpenSSL forks in CMake too.

Closes #16352

5 months agoasyn-thread: fix mutex refs and unused variable in no-`HAVE_GETADDRINFO` builds
Viktor Szakats [Mon, 17 Feb 2025 13:51:02 +0000 (14:51 +0100)] 
asyn-thread: fix mutex refs and unused variable in no-`HAVE_GETADDRINFO` builds

Follow-up to 074048ae803a817e39df198c61c2d9d87ec3585f #16321
Follow-up to 2ee754d830da084c386d1f1778de5e00fb1c348e #16323
Closes #16370

5 months agoCI: dump non-pre-fill configure log on pre-fill check fail
Viktor Szakats [Mon, 17 Feb 2025 13:48:03 +0000 (14:48 +0100)] 
CI: dump non-pre-fill configure log on pre-fill check fail

To help debugging builds where the actual feature check is broken.

Follow-up to e7adf3e83747c2915c671f2e560cde6f3d4a4905 #15841
Closes #16369

5 months agoGHA: bump rojopolis/spellcheck-github-actions
dependabot[bot] [Mon, 17 Feb 2025 14:48:18 +0000 (14:48 +0000)] 
GHA: bump rojopolis/spellcheck-github-actions

Bumps [rojopolis/spellcheck-github-actions](https://github.com/rojopolis/spellcheck-github-actions) from 9e0a5fb25a80b89c84899657949cbd6e17eb376c to ed0756273a1658136c36d26e3d0353de35b98c8b.
- [Release notes](https://github.com/rojopolis/spellcheck-github-actions/releases)
- [Changelog](https://github.com/rojopolis/spellcheck-github-actions/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rojopolis/spellcheck-github-actions/compare/9e0a5fb25a80b89c84899657949cbd6e17eb376c...ed0756273a1658136c36d26e3d0353de35b98c8b)

---
updated-dependencies:
- dependency-name: rojopolis/spellcheck-github-actions
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Closes #16368

5 months agotimediff: remove unnecessary double typecast
Daniel Stenberg [Mon, 17 Feb 2025 13:38:23 +0000 (14:38 +0100)] 
timediff: remove unnecessary double typecast

Closes #16367

5 months agoSTRPARSE.md: sync with recent changes
Daniel Stenberg [Mon, 17 Feb 2025 09:23:09 +0000 (10:23 +0100)] 
STRPARSE.md: sync with recent changes

New functions and Curl_str_number() changed number return type.

Closes #16365

5 months agohttp_aws_sigv4: use strparse more for parsing
Daniel Stenberg [Mon, 17 Feb 2025 12:50:34 +0000 (13:50 +0100)] 
http_aws_sigv4: use strparse more for parsing

Closes #16366

5 months agossl session cache: add exportable flag
Stefan Eissing [Thu, 13 Feb 2025 14:33:45 +0000 (15:33 +0100)] 
ssl session cache: add exportable flag

Give peers and `exportable` flag, set TRUE when sessions for this peer
should not be exported. This evalualtes if the peer uses confidential
information (like srp username/password), a client certificate OR if the
"ssl_peer_key" contains relative paths.

When SSL is configured with paths for relevant components, like CA trust
anchors, an attempt is made to make this path absolute. When that does
not work or the infrstructure is not available, the peer key is marked
as *local*.

Exporting sessions based on relative paths may lead to confusion when
later imported in another execution context.

Closes #16322

5 months agohash: use single linked list for entries
Stefan Eissing [Sun, 16 Feb 2025 14:19:20 +0000 (15:19 +0100)] 
hash: use single linked list for entries

Curl's double linked list is proven code, but it comes with some
additional memory overhead. Since hash's internal list of elements needs
only forward traversals, it seems worthwhile to use a single linked list
internally.

This saves 3 pointers per entry plus 3 pointers per slot.

Closes #16351

5 months agocookie: minor parser simplification
Daniel Stenberg [Mon, 17 Feb 2025 10:15:32 +0000 (11:15 +0100)] 
cookie: minor parser simplification

- parse whitespace before the value is handled
- remove superflous checks from some ISBLANK() loops

Closes #16362

5 months agolib: use Curl_str_* instead of strtok_r()
Daniel Stenberg [Mon, 17 Feb 2025 08:43:45 +0000 (09:43 +0100)] 
lib: use Curl_str_* instead of strtok_r()

Helps avoid extra mallocs. Gets rid of the private strtok_r
implementation.

Closes #16360

5 months agolib: simplify more white space loops
Daniel Stenberg [Mon, 17 Feb 2025 10:24:49 +0000 (11:24 +0100)] 
lib: simplify more white space loops

Since the ISBLANK() and ISSPACE() macros check for specific matches,
there is no point in using while(*ptr && ISSPACE(*ptr)) etc, as the
'*ptr' check is then superfluous.

Closes #16363

5 months agobuild: even more strtoll cleanups
Daniel Stenberg [Mon, 17 Feb 2025 07:51:22 +0000 (08:51 +0100)] 
build: even more strtoll cleanups

Follow-up to b4538ec5229d716baa5e09b0f4

Closes #16359

5 months agobuild: enable -Wjump-misses-init for GCC 4.5+ 16252/head
Marcel Raad [Fri, 7 Feb 2025 23:03:47 +0000 (00:03 +0100)] 
build: enable -Wjump-misses-init for GCC 4.5+

This should have caught https://github.com/curl/curl/issues/16246.

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

5 months agoopenssl: remove bad `goto`s into other scope
Marcel Raad [Sun, 16 Feb 2025 20:52:52 +0000 (21:52 +0100)] 
openssl: remove bad `goto`s into other scope

All the `goto` did in these cases was effectively `return 0`, so just
use that explicitly.

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

5 months agoRevert "openssl: fix out of scope variables in goto"
Marcel Raad [Sun, 16 Feb 2025 20:37:24 +0000 (21:37 +0100)] 
Revert "openssl: fix out of scope variables in goto"

This reverts the main part of commit
3f79695be9e4628d246740bcd36c627daab676ca, but keeping the
formatting fix.

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

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 17 Feb 2025 07:43:08 +0000 (08:43 +0100)] 
RELEASE-NOTES: synced

5 months agoasyn-thread: fix `CURL_DISABLE_SOCKETPAIR` build
Marcel Raad [Sun, 16 Feb 2025 20:29:56 +0000 (21:29 +0100)] 
asyn-thread: fix `CURL_DISABLE_SOCKETPAIR` build

Since commit 074048ae803, `td` is used also with
`CURL_DISABLE_SOCKETPAIR`.

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

5 months agovariable.md: clarify 'trim' example
Jay Satiro [Sun, 16 Feb 2025 08:05:15 +0000 (03:05 -0500)] 
variable.md: clarify 'trim' example

- Use the variable name 'var' instead of 'url' since the latter is also
  a function name and that may confuse the user.

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

5 months agoscripts/managen: fix parsing of markdown code sections
Jay Satiro [Sun, 16 Feb 2025 07:49:43 +0000 (02:49 -0500)] 
scripts/managen: fix parsing of markdown code sections

- Terminate a code section before parsing a heading line.

Prior to this change when a code line (eg "    code") was followed
by a heading line (eg "## heading") the code section in the output
was terminated after converting the header instead of before. That led
to some weird formatting outputs depending on the nroff or roffit etc.

With this change:

.nf
curl \--expand\-url https.//example.com/{{url:trim}}
.fi
.IP json

Without this change:

.nf
curl \--expand\-url https.//example.com/{{url:trim}}
.IP json
.fi

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

5 months agoscripts/managen: fix option 'single'
Jay Satiro [Sun, 16 Feb 2025 07:09:57 +0000 (02:09 -0500)] 
scripts/managen: fix option 'single'

- Fix option 'single' to generate single manpages.

As far as I can tell the option did not work prior to this change.

Example: scripts/managen -d docs/cmdline-opts single variable.md

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

5 months agocmake: fix ECH detection in custom-patched OpenSSL
Viktor Szakats [Sun, 16 Feb 2025 19:07:40 +0000 (20:07 +0100)] 
cmake: fix ECH detection in custom-patched OpenSSL

Typo found via #16352
Regression-from fd067bfb5b028ac41660decc5abb87f1cd093b6b #15596
Closes #16354

5 months agobuild: drop more unused `HAVE_STRTOLL`
Viktor Szakats [Sun, 16 Feb 2025 19:05:50 +0000 (20:05 +0100)] 
build: drop more unused `HAVE_STRTOLL`

Follow-up to e5326bfb4477f54df64e2a7d0c2627f236a7130d #16350
Closes #16353

5 months agobuild: remove checks for strtoll()
Daniel Stenberg [Sun, 16 Feb 2025 13:52:43 +0000 (14:52 +0100)] 
build: remove checks for strtoll()

Follow-up to b4538ec5229d716baa5e09b

It is not being used anymore.

Closes #16350

5 months agoCODE_STYLE: readability and banned functions
Daniel Stenberg [Sun, 16 Feb 2025 13:50:45 +0000 (14:50 +0100)] 
CODE_STYLE: readability and banned functions

Closes #16349

5 months agoasyn-thread: remove 'status' from struct Curl_async
Daniel Stenberg [Thu, 6 Feb 2025 21:05:10 +0000 (22:05 +0100)] 
asyn-thread: remove 'status' from struct Curl_async

While it gets stored, nothing needs nor uses it.

Closes #16347

5 months agolib: strparse.h include where missing
Stefan Eissing [Sun, 16 Feb 2025 12:39:24 +0000 (13:39 +0100)] 
lib: strparse.h include where missing

Closes #16348

5 months agocmake: misc tidy-ups
Viktor Szakats [Fri, 7 Feb 2025 12:44:39 +0000 (13:44 +0100)] 
cmake: misc tidy-ups

- replace `add_compile_options()`,  `add_definitions()` with directory
  properties. To harmonize this across all scripts. The new commands are
  verbose, but describe better how they work. The syntax is also closer
  to setting target properties, helps grepping.

- prefer `CMAKE_INSTALL_PREFIX` over `--prefix` (in tests, CI).

- tidy up cmake invocations.

- formatting.

Closes #16238

5 months agobuild: fix compiler warnings in feature detections
Viktor Szakats [Tue, 11 Feb 2025 01:46:29 +0000 (02:46 +0100)] 
build: fix compiler warnings in feature detections

Fix or silence compiler warnings happening in feature detections
to reduce log noise. Warnings may also get promoted to errors in certain
cases, causing missed detections.

It reduces the number of warnings by 4500+ across the linux, linux-old,
macos, non-native and windows GHA workflows (~142 jobs).

Also move picky warning logic for MSVC/Borland to
`CMake/PickyWarnings.cmake. To make them listed in the picky-warnings
log output, and to also apply to feature detections to make them compile
under the same conditions as source code. The hope is to help catching
issues faster. It also improves code quality of feature tests.

Fixed/silenced:
```
warning #177: variable "dummy" was declared but never referenced
warning #177: variable "flag" was declared but never referenced
warning #177: variable "res" was declared but never referenced
warning #592: variable "s" is used before its value is set
warning #1011: missing return statement at end of non-void function "main"
warning #1786: function "SSL_CTX_set_srp_password" (declared at line 1888 of "/usr/include/openssl/ssl.h") was declared deprecated ("Since OpenSSL 3.0")
warning #1786: function "SSL_CTX_set_srp_username" (declared at line 1887 of "/usr/include/openssl/ssl.h") was declared deprecated ("Since OpenSSL 3.0")
warning #2332: a value of type "const char *" cannot be assigned to an entity of type "char *" (dropping qualifiers)
warning: 'SSL_CTX_set_srp_password' is deprecated [-Wdeprecated-declarations]
warning: 'SSL_CTX_set_srp_password' is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
warning: 'SSL_CTX_set_srp_username' is deprecated [-Wdeprecated-declarations]
warning: 'SSL_CTX_set_srp_username' is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
warning: 'b' is used uninitialized [-Wuninitialized]
warning: 'gethostname' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
warning: Undefined or garbage value returned to caller [core.uninitialized.UndefReturn]
warning: Value stored to 'i' is never read [deadcode.DeadStores]
warning: assigning to 'char *' from 'const char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
warning: control reaches end of non-void function [-Wreturn-type]
warning: empty expression statement has no effect; remove unnecessary ';' to silence this warning [-Wextra-semi-stmt]
warning: excess elements in struct initializer
warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
warning: macro "_FILE_OFFSET_BITS" is not used [-Wunused-macros]
warning: macro "_REENTRANT" is not used [-Wunused-macros]
warning: missing braces around initializer [-Wmissing-braces]
warning: no previous extern declaration for non-static variable 'off_t_is_large' [-Wmissing-variable-declarations]
warning: no previous prototype for 'check' [-Wmissing-prototypes]
warning: no previous prototype for function 'check' [-Wmissing-prototypes]
warning: null argument where non-null required (argument 2) [-Wnonnull]
warning: passing 'const char[1]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
warning: passing argument 2 of 'SSL_CTX_set_srp_password' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
warning: passing argument 2 of 'SSL_CTX_set_srp_username' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
warning: unused parameter 'c' [-Wunused-parameter]
warning: unused parameter 'f' [-Wunused-parameter]
warning: unused variable 'data' [-Wunused-variable]
warning: unused variable 'dummy' [-Wunused-variable]
warning: unused variable 'flag' [-Wunused-variable]
warning: unused variable 'res' [-Wunused-variable]
warning: unused variable 's' [-Wunused-variable]
warning: variable 's' set but not used [-Wunused-but-set-variable]
warning: variable 'ts' set but not used [-Wunused-but-set-variable]
```

Closes #16287

5 months agoconfigure: use `curl_cv_apple` variable
Viktor Szakats [Sat, 15 Feb 2025 10:57:55 +0000 (11:57 +0100)] 
configure: use `curl_cv_apple` variable

Follow-up to 876db1070bf3bee5e35ac0d2ebe612e313093262 #16338

Closes #16340

5 months agocmake: allow empty custom `IMPORT_LIB_SUFFIX`, add suffix collision detection
Viktor Szakats [Fri, 14 Feb 2025 10:35:12 +0000 (11:35 +0100)] 
cmake: allow empty custom `IMPORT_LIB_SUFFIX`, add suffix collision detection

Allow overriding the `IMPORT_LIB_SUFFIX` default with an empty value.

Also:
- add a fatal error if the implib and static lib filename are identical.
- clarify `IMPORT_LIB_SUFFIX` default value in the documentation.

Reported-by: RubisetCie on Github
Fixes #16324
Ref: 1199308dbc902c52be67fc805c72dd2582520d30 #11505

Closes #16332

5 months agocmake: add pre-fill for Unix, enable in GHA/macos, verify pre-fills
Viktor Szakats [Fri, 27 Dec 2024 23:27:26 +0000 (00:27 +0100)] 
cmake: add pre-fill for Unix, enable in GHA/macos, verify pre-fills

TL;DR: Save 10 minutes of CI time for GHA/macos jobs using pre-fills and
add pre-fill verification for Apple and Windows. Also restores Xcode job
and saves 1.5-10 minutes configuring iOS jobs.

Pre-filling feature detection results can bring down the CMake configure
step to ~5 seconds on most GHA runners, ~10 seconds in slow envs like
Cygwin/MSYS2.

The potential savings per job are:
- 5-40 (average 19) seconds on GHA/macos (33 jobs)
- ~10 seconds on GHA for iOS GNU Makefile (1 job)
- 1.5-10 minutes on GHA for iOS Xcode generator (1 job)
- 10 seconds on GHA/linux with native Ubuntu (12 jobs)
- 40 seconds for Cygwin/MSYS2 (2 jobs)
- 5-10 seconds for virtualized BSDs, native CPU (3 jobs)
- ~60 seconds for virtualized BSDs, emulated CPU (1 job)

On native Windows pre-filling has been in place for a long time and
saving 8 minutes (VS2019-VS2015) to 1.5-2 minutes (VS2022), 3 minutes
(VS2022 UWP), and 30-60 seconds (MinGW), per CI job.

The downside is that detection results need to be manually collected and
filtered to those that universally apply to all platforms that they are
enabled on. Another downside is that by using a cache, we're not running
the actual detections, and thus won't catch regressions in them. It
means we must make sure that the cache is solid and matches with actual
detections results. An upside is that it gives a rough overview of which
features are available on which platforms. Another upside is pre-filled
values do work for feature detections skipped for cross-builds, e.g.
`HAVE_WRITABLE_ARGV`.

This PR adds a pre-fill cache that supports all Unixes (except OmniOS)
used in CI, and makes it usable with an internal option. It also enables
it for GHA/macos CI jobs, where the maximum savings are. And also for
the two iOS [1] and two Cygwin/MSYS2 jobs. The latters don't have
pre-fill checks and we can drop them if they turn into a hassle.

Saving:
- 10 minutes of CI time per GHA/macos workflow run. [2]
- ~80 seconds per GHA/windows workflow run with Cygwin/MSYS2.
  (offsetting the cost of pre-fill verifications)
- 1.5-10 minutes per GHA/non-native runs with iOS jobs. [3]

You can enable pre-fill locally with `-D_CURL_PREFILL=ON`. It's
experimental, and if you experience a problem, file a PR or an Issue.

This PR also adds a pre-fill checker for macOS and MinGW/MSVC Windows
GHA jobs to catch if the cache diverges from real detections. It also
adds this logic to AppVeyor, but doesn't enable it due to the perf
penalty of 2 minutes mininum.

The pre-fill checker works by configuring out-of-tree with and without
pre-fill, then diffing their `lib/curl_config.h` outputs.

Exceptions are 3 detection results exposed indirectly [4], and missing
to expose 2, of which one is the C89 header `stddef.h`. While we assume
the C99 `stdint.h` available outside iOS. We can expose them in the
future, if necessary.

The pre-fill checks cost in total:
- ~20 seconds for macOS
- ~40 seconds for MinGW on GHA
- ~80 seconds for MSVC on GHA (UWP would be 2x this)

An extra time saving potential is caching type sizes. They are
well-known, and seldom change, esp. in CI. GHA/Windows jobs spend 8-17
seconds per job on these ~12 feature checks. ~5s on Cygwin/MSYS2. Couple
of seconds on other platforms. (This PR doesn't make this optimization.)

Another opportunity is doing the same for autotools, which typically
spends more time in the configuration step than cmake.

[1] Xcode job restored as a
follow-up to be5f20202c1618788b3d8f6d255543638f48bd65 #16302

[2] GHA/macos cmake configure times in seconds:
Job                                              |  Bef. | After |  Gain
:----------------------------------------------- | ----: | ----: | ----:
CM clang GnuTLS !ldap krb5                       |  21.2 |   4.5 |  16.7
CM clang LibreSSL !ldap heimdal c-ares +examples |  13.3 |   3.9 |   9.4
CM clang OpenSSL +static libssh +examples        |  20.0 |   4.6 |  15.4
CM clang OpenSSL IDN clang-tidy~ (w/chkprefill)  |  15.7 |  18.6 |  -2.9
CM clang OpenSSL gsasl rtmp AppleIDN             |  25.0 |   4.7 |  20.3
CM clang OpenSSL torture !FTP                    |  15.3 |   4.5 |  10.8
CM clang OpenSSL torture FTP                     |  25.0 |   5.9 |  19.1
CM clang SecureTransport debug                   |  18.0 |   3.8 |  14.2
CM clang macos-13 SecureTransport                |  45.8 |  12.4 |  33.4
CM clang macos-14 SecureTransport                |  15.8 |   4.6 |  11.2
CM clang macos-15 SecureTransport                |  26.8 |   6.1 |  20.7
CM clang mbedTLS openldap brotli zstd            |  15.1 |   6.5 |   8.6
CM clang wolfSSL !ldap brotli zstd               |  27.0 |   4.4 |  22.6
CM gcc-12 GnuTLS !ldap krb5                      |  39.1 |   8.7 |  30.4
CM gcc-12 LibreSSL !ldap heimdal c-ares +examples|  23.8 |   7.2 |  16.6
CM gcc-12 OpenSSL +static libssh +examples       |  20.7 |   8.5 |  12.2
CM gcc-12 OpenSSL gsasl rtmp AppleIDN            |  23.1 |  10.1 |  13.0
CM gcc-12 SecureTransport debug                  |  21.1 |   4.8 |  16.3
CM gcc-12 mbedTLS openldap brotli zstd           |  21.4 |   5.8 |  15.6
CM gcc-12 wolfSSL !ldap brotli zstd              |  21.1 |   6.9 |  14.2
CM gcc-14 macos-13 SecureTransport               |  61.9 |  18.7 |  43.2
CM gcc-14 macos-14 SecureTransport               |  30.5 |   6.4 |  24.1
CM gcc-14 macos-15 SecureTransport               |  32.7 |   8.4 |  24.3
CM llvm@15 GnuTLS !ldap krb5                     |  21.1 |   7.5 |  13.6
CM llvm@15 LibreSSL !ldap heimdal c-ares +exampl~|  24.6 |   6.8 |  17.8
CM llvm@15 OpenSSL +static libssh +examples      |  19.0 |   6.4 |  12.6
CM llvm@15 OpenSSL gsasl rtmp AppleIDN           |  19.0 |   8.2 |  10.8
CM llvm@15 SecureTransport debug                 |  18.0 |   5.4 |  12.6
CM llvm@15 macos-13 SecureTransport              |  66.2 |  25.7 |  40.5
CM llvm@15 macos-14 SecureTransport              |  31.9 |   6.1 |  25.8
CM llvm@15 mbedTLS openldap brotli zstd          |  19.5 |   8.9 |  10.6
CM llvm@15 wolfSSL !ldap brotli zstd             |  24.3 |   5.9 |  18.4
CM llvm@18 macos-15 SecureTransport              |  33.8 |   6.4 |  27.4
Total                                            | 856.8 | 257.3 | 599.5
Before: https://github.com/curl/curl/actions/runs/13311042735/job/37173478424
After: https://github.com/curl/curl/actions/runs/13313927119/job/37183206426?pr=15841

[3] iOS:
Before: https://github.com/curl/curl/actions/runs/13326401704?pr=15841
After: https://github.com/curl/curl/actions/runs/13332177764?pr=15841

[4] detection results exposed indirectly in `curl_config.h`:
- `HAVE_FILE_OFFSET_BITS` via `_FILE_OFFSET_BITS`
- `HAVE_GETHOSTBYNAME_R_*_REENTRANT` via `NEED_REENTRANT`
- `HAVE_SOCKADDR_IN6_SIN6_ADDR` via `USE_IPV6`

Closes #15841

5 months agocurl_msh3: remove verify bypass from DEBUGBUILDs
Jay Satiro [Sat, 15 Feb 2025 18:32:34 +0000 (13:32 -0500)] 
curl_msh3: remove verify bypass from DEBUGBUILDs

- Remove the workaround that disabled peer verification in DEBUGBUILDs
  when CA certs were provided.

The workaround was part of a TODO that disabled verification in
DEBUGBUILDs with a CAfile/path because apparently there's no way to set
those options in msh3 and that caused some tests to fail. Instead the
tests should fail and this problem should not be covered up.

Ref: https://github.com/curl/curl/pull/16327#issuecomment-2661039423

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

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Sat, 15 Feb 2025 21:32:44 +0000 (22:32 +0100)] 
RELEASE-NOTES: synced

5 months agodocs: correct argument names & URL redirection
kriztalz [Fri, 14 Feb 2025 12:34:47 +0000 (13:34 +0100)] 
docs: correct argument names & URL redirection

Closes #16334

5 months agowolfssh: retrieve the error using wolfSSH_get_error
Joseph Chen [Fri, 14 Feb 2025 13:53:51 +0000 (21:53 +0800)] 
wolfssh: retrieve the error using wolfSSH_get_error

Closes #16335

5 months agoasyn-thread: avoid the separate curl_mutex_t alloc
Daniel Stenberg [Thu, 6 Feb 2025 16:22:36 +0000 (17:22 +0100)] 
asyn-thread: avoid the separate curl_mutex_t alloc

Just make it a part of the thread_sync_data struct.

Closes #16323

5 months agostrparse: switch to curl_off_t as base data type
Daniel Stenberg [Fri, 14 Feb 2025 10:29:08 +0000 (11:29 +0100)] 
strparse: switch to curl_off_t as base data type

- add hex and octal parsers to the Curl_str_* family
- make curlx_strtoofft use these parsers
- remove all use of strtol() and strtoul() in library code
- generally use Curl_str_* more than strtoofft, for stricter parsing
- supports 64-bit universally, instead of 'long' which differs in size
  between platforms

Extended the unit test 1664 to verify hex and octal parsing.

Closes #16336

5 months agobuild: set `HAVE_WRITABLE_ARGV` for Apple cross-builds
Viktor Szakats [Fri, 14 Feb 2025 16:41:09 +0000 (17:41 +0100)] 
build: set `HAVE_WRITABLE_ARGV` for Apple cross-builds

Enable this feature for Apple cross-builds to match native macOS builds.

Closes #16338

5 months agocmake: drop two stray TLS feature checks for wolfSSL
Viktor Szakats [Fri, 14 Feb 2025 21:38:15 +0000 (22:38 +0100)] 
cmake: drop two stray TLS feature checks for wolfSSL

Drop check for `SSL_set0_wbio`, `SSL_CTX_set_srp_username`.

The wolfSSL backend doesn't implement these features. The checks were
wrong, and also missing from `./configure`.

If they get implemented, the feature checks should use distinct macros
from OpenSSL; they should check for the `wolfSSL_`-prefixed APIs via
wolfSSL headers; and matching checks should be added to `./configure`.

Follow-up to 781242ffa44a9f9b95b6da5ac5a1bf6372ec6257 #11967 #11964

Closes #16339

5 months agowolfssl: when using PQ KEM, use ML-KEM, not Kyber
Anthony Hu [Fri, 14 Feb 2025 16:29:21 +0000 (11:29 -0500)] 
wolfssl: when using PQ KEM, use ML-KEM, not Kyber

Closes #16337

5 months agowarnless: drop curlx_ultous as it is no longer used
Daniel Stenberg [Thu, 13 Feb 2025 13:52:09 +0000 (14:52 +0100)] 
warnless: drop curlx_ultous as it is no longer used

Closes #16319

5 months agotests: change from curlx_ultous to util_ultous
Daniel Stenberg [Thu, 13 Feb 2025 13:50:47 +0000 (14:50 +0100)] 
tests: change from curlx_ultous to util_ultous

Since the former function is getting removed from the lib.

Closes #16319

5 months agolib: use Curl_str_number() for parsing decimal numbers
Daniel Stenberg [Thu, 13 Feb 2025 07:45:43 +0000 (08:45 +0100)] 
lib: use Curl_str_number() for parsing decimal numbers

Instead of strtoul() and strtol() calls.

Easier API with better integer overflow detection and built-in max check
that now comes automatic everywhere this is used.

Closes #16319

5 months agostrparse: make Curl_str_number() return error for no digits
Daniel Stenberg [Fri, 14 Feb 2025 07:46:26 +0000 (08:46 +0100)] 
strparse: make Curl_str_number() return error for no digits

Closes #16319

5 months agocmake: mention 'insecure' in the debug build warning
Viktor Szakats [Thu, 13 Feb 2025 21:02:25 +0000 (22:02 +0100)] 
cmake: mention 'insecure' in the debug build warning

Closes #16327

5 months agotidy-up: delete, comment or scope C macros reported unused
Viktor Szakats [Sun, 9 Feb 2025 17:12:14 +0000 (18:12 +0100)] 
tidy-up: delete, comment or scope C macros reported unused

To reduce the number `-Wunused-macro` compiler warnings:
- delete unused macros.
- comment out unused macro that are part of a set.
- move macros into the scope they are used.

This may be useful to enable by default, but there are tricky cases that
I didn't manage to fix and paused the effort. E.g. internal features
checks in `openssl.c`. There is more, once those are fixed.

Closes #16279

5 months agolib: strtoofft.h header cleanup
Daniel Stenberg [Fri, 14 Feb 2025 09:11:39 +0000 (10:11 +0100)] 
lib: strtoofft.h header cleanup

Drop the include from five C files, add it to one.

Closes #16331

5 months agoHTTP3.md: only speak about minimal versions
Stefan Eissing [Thu, 13 Feb 2025 13:33:26 +0000 (14:33 +0100)] 
HTTP3.md: only speak about minimal versions

Closes #16320

5 months agodocs: add FD_ZERO to curl_multi_fdset example
Harry Sintonen [Thu, 13 Feb 2025 18:33:33 +0000 (20:33 +0200)] 
docs: add FD_ZERO to curl_multi_fdset example

While the examples are not intended to complete applications this is
quite relevant for the correct function of the code.

Closes #16325

5 months agocmake: drop `HAVE_IN_ADDR_T` from pre-fill too [ci skip]
Viktor Szakats [Fri, 14 Feb 2025 00:48:54 +0000 (01:48 +0100)] 
cmake: drop `HAVE_IN_ADDR_T` from pre-fill too [ci skip]

Follow-up to 90b72607fa63d54dc280d20cb73f6df9ee665e02 #16318

5 months agoasyn-thread: avoid the separate 'struct resdata' alloc
Daniel Stenberg [Thu, 6 Feb 2025 16:11:26 +0000 (17:11 +0100)] 
asyn-thread: avoid the separate 'struct resdata' alloc

Instead move the only struct field (start) into the thread_data struct.

Closes #16321

5 months agoasyn-thread: do not allocate thread_data separately
Daniel Stenberg [Thu, 6 Feb 2025 15:05:56 +0000 (16:05 +0100)] 
asyn-thread: do not allocate thread_data separately

Put the full struct into Curl_async since it will be used for every name
resolve anyway.

Closes #16241

5 months agohttp: fix NTLM info message typo
Daniel Stenberg [Wed, 12 Feb 2025 13:50:59 +0000 (14:50 +0100)] 
http: fix NTLM info message typo

Closes #16305

5 months agourlapi: simplify junkscan
Daniel Stenberg [Wed, 12 Feb 2025 14:59:16 +0000 (15:59 +0100)] 
urlapi: simplify junkscan

Makes it smaller and possibly somewhat faster

Closes #16307

5 months agocookie: simplify invalid_octets()
Daniel Stenberg [Wed, 12 Feb 2025 14:36:22 +0000 (15:36 +0100)] 
cookie: simplify invalid_octets()

should also make it marginally faster and smaller.

Closes #16306

5 months agotimediff: fix comment for curlx_mstotv()
Daniel Stenberg [Wed, 12 Feb 2025 21:36:27 +0000 (22:36 +0100)] 
timediff: fix comment for curlx_mstotv()

The max value when explaining the math was wrong.

Closes #16310

5 months agotidy-up: drop unused `CURL_INADDR_NONE` macro and `in_addr_t` type
Viktor Szakats [Thu, 13 Feb 2025 11:05:30 +0000 (12:05 +0100)] 
tidy-up: drop unused `CURL_INADDR_NONE` macro and `in_addr_t` type

Closes #16318

5 months agotests: fix enum/int confusion (Intel C), fix autotools `CFLAGS` for `servers`
Viktor Szakats [Thu, 13 Feb 2025 01:38:51 +0000 (02:38 +0100)] 
tests: fix enum/int confusion (Intel C), fix autotools `CFLAGS` for `servers`

By dropping the unused enum wrappers for `AF_*` macros.

Also fix `./configure` to apply `--enable-werror` options to
`tests/servers`, to catch this next time.

Seen with Intel C compiler:
```
socksd.c(184): warning #188: enumerated type mixed with another type
socksd.c(881): warning #188: enumerated type mixed with another type
[...]
sws.c(76): warning #188: enumerated type mixed with another type
sws.c(229): warning #188: enumerated type mixed with another type
[...]
```
Ref: https://github.com/curl/curl/actions/runs/13296520425/job/37129676921#step:40:338

Closes #16314

5 months agocmake: fix `HAVE_ATOMIC`/`HAVE_STDATOMIC` pre-fill for clang-cl
Viktor Szakats [Thu, 13 Feb 2025 01:56:11 +0000 (02:56 +0100)] 
cmake: fix `HAVE_ATOMIC`/`HAVE_STDATOMIC` pre-fill for clang-cl

`HAVE_ATOMIC` and `HAVE_STDATOMIC` is available in clang-cl builds.
Adjust the pre-filled values accordingly.

Detected by a temporary job comparing pre-filled and actual values
on AppVeyor CI:
https://ci.appveyor.com/project/curlorg/curl/builds/51506692/job/2v8qrytgdnlah348#L416

Closes #16313

5 months agoaddrinfo: add curl macro to avoid redefining foreign symbols
Viktor Szakats [Sun, 9 Feb 2025 04:12:24 +0000 (05:12 +0100)] 
addrinfo: add curl macro to avoid redefining foreign symbols

Before this patch curl code was redefining `getaddrinfo` and
`freeaddrinfo` system symbols to plug in its debug wrappers. This was
causing pains to avoid applying the redefinitions to system headers
defining these functions, and to the local debug wrappers. Especially
in unity builds. It also required workarounds for systems where these
symbols are already macros.

Introduce curl-namespaced macros for these functions and use them.
This allows to drop all workarounds and makes it work in all envs,
local targets and unity/bundle combinations.

Also drop GHA/windows workaround and use the same unity batch across
all jobs. Follow-up to 29e4eda631f46368c2adf833ba3065b1b46c2a7d #16272

Ref: #16272
Ref: 71cf0d1fca9e1f53524e1545ef0c08d174458d80 #14772
Ref: 3efba94f773db5d8ae19e33aa749ab7914cafeea #14765
Ref: f7d5f47059c381502824ef9c1c9a2ca484930c91 #14399

Closes #16274

5 months agoRELEASE-NOTES: synced
Daniel Stenberg [Thu, 13 Feb 2025 10:22:47 +0000 (11:22 +0100)] 
RELEASE-NOTES: synced

Bump to 8.12.2 for now

5 months agomanagen: correct the warning for un-escaped '<' and '>'
Daniel Stenberg [Thu, 13 Feb 2025 07:51:22 +0000 (08:51 +0100)] 
managen: correct the warning for un-escaped '<' and '>'

1. make sure the check is done before the backticks are replaced

2. ignore less-than and greater-than used within backticks

(adjust proxy.md that now showed a two-space warning)

Closes #16315

5 months agostrparse: switch the API to work on 'const char *'
Daniel Stenberg [Thu, 13 Feb 2025 08:00:08 +0000 (09:00 +0100)] 
strparse: switch the API to work on 'const char *'

The functions are not meant to touch the input anyway.

Closes #16316

5 months agolib: better optimized casecompare() and ncasecompare()
Sergey [Thu, 13 Feb 2025 01:14:08 +0000 (17:14 -0800)] 
lib: better optimized casecompare() and ncasecompare()

Less 'jne` or `je` CPU instructions.

Closes #16311

5 months agoRELEASE-NOTES: synced curl-8_12_1
Daniel Stenberg [Thu, 13 Feb 2025 07:11:06 +0000 (08:11 +0100)] 
RELEASE-NOTES: synced

5 months agoTHANKS: add contributors from 8.12.1
Daniel Stenberg [Thu, 13 Feb 2025 07:11:05 +0000 (08:11 +0100)] 
THANKS: add contributors from 8.12.1

5 months agowrite-out.md: add 'header' and 'output' to the variable list
Jay Satiro [Wed, 12 Feb 2025 04:20:22 +0000 (23:20 -0500)] 
write-out.md: add 'header' and 'output' to the variable list

Prior to this change %header{} and %output{} were explained in remarks
but not listed in the --write-out variable list.

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

5 months agoGHA/linux: drop Linux arm job for runner image flakiness with stunnel4
Viktor Szakats [Wed, 12 Feb 2025 09:35:39 +0000 (10:35 +0100)] 
GHA/linux: drop Linux arm job for runner image flakiness with stunnel4

Since last week the Ubuntu arm runner became flaky while installing `stunnel`.

```
08:07:26 Setting up stunnel4 (3:5.72-1build2) ...
08:07:26 Failed to check if group stunnel4 already exists: Connection refused
08:07:26 Group stunnel4 not found.
08:07:28 Reload daemon failed: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
08:07:28 Created symlink /etc/systemd/system/multi-user.target.wants/stunnel.target -> /usr/lib/systemd/system/stunnel.target.
08:08:18 Failed to get unit file state for stunnel.target: Connection timed out
08:08:43 Failed to retrieve unit state: Connection timed out
08:08:43 stunnel.target is a disabled or a static unit, not starting it.
08:08:43 /bin/chown: invalid user: ‘stunnel4:stunnel4’
08:08:43 dpkg: error processing package stunnel4 (--configure):
08:08:43  installed stunnel4 package post-installation script subprocess returned error exit status 1
08:08:43 [...]
08:08:47 Errors were encountered while processing:
08:08:47 stunnel4
08:08:54 Error: Timeout was reached
08:08:55 E: Sub-process /usr/bin/dpkg returned an error code (1)
08:08:55 Error: Process completed with exit code 100.
```
Ref: https://github.com/curl/curl/actions/runs/13280736653/job/37078440398?pr=16300#step:2:94

Closes #16303

5 months agoGHA/non-native: drop cmake Xcode generator iOS job for poor performance
Viktor Szakats [Wed, 12 Feb 2025 09:06:09 +0000 (10:06 +0100)] 
GHA/non-native: drop cmake Xcode generator iOS job for poor performance

The Xcode configure phase is slow. In most cases it's >10x slower than
the GNU Makefile configuration. This is after days of attempts to make
it faster. With GNU Makefile it takes 20-30 seconds, while Xcode can
take 3 to 10 minutes, which sometimes makes the job run out of its time
limit and fail.

CMake recommends this generator, but with such poor, and inconsistent
performance, it isn't practical. It helped detecting an Xcode-specific
CMake script issue, but aside from that it's not adding much value.

9m33s: https://github.com/curl/curl/actions/runs/13280738423/job/37078441164
8m18s: https://github.com/curl/curl/actions/runs/13281140850/job/37079589779
2m50s: https://github.com/curl/curl/actions/runs/13280725335/job/37078375179

Follow-up to 12a6de2f660dd692cce93cb65ce6e3ec126bb531 #16043

Closes #16302

5 months agoGHA: update openssl/openssl to v3.4.1
renovate[bot] [Wed, 12 Feb 2025 08:05:38 +0000 (08:05 +0000)] 
GHA: update openssl/openssl to v3.4.1

Closes #16301

5 months agolibssh2: drop obsolete macros and version checks
Viktor Szakats [Mon, 10 Feb 2025 23:14:47 +0000 (00:14 +0100)] 
libssh2: drop obsolete macros and version checks

Follow-up to 553248f501762735c6aa5531f5748e88aefb5314 #16199

Closes #16292

5 months agocmake: fix/add missing feature detections for Windows/MS-DOS
Viktor Szakats [Sat, 8 Feb 2025 02:20:02 +0000 (03:20 +0100)] 
cmake: fix/add missing feature detections for Windows/MS-DOS

Almost all feature detection results are pre-filled on Windows
for performance, so none of the issues fixed here affected builds.

For good measure, this patch add missing detections and fixes others
to make sure they work even when omitting the pre-fill.

It also fixes detecting IPv6 for MS-DOS.

- fix `HAVE_STRUCT_TIMEVAL` detection for MSVC.
  Follow-up to c1bc090d65b8d7d14e811dd36f5e8674be43dff3 #12495
- add `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` detection for Windows.
- fix `HAVE_STRDUP` detection for MSVC.
- fix `HAVE_SNPRINTF` detection for Windows.
  Regression from 8e345057761a8f796403923a96f2c8fd3edca647 #15164
- fix `HAVE_IOCTLSOCKET` detection for non-UWP MSVC.
- exclude `if_nametoindex` detection for Windows.
  Although it exists on Windows, detection, usage and availability is
  complicated, and curl doesn't use it on this platform.
  Regression from 8e345057761a8f796403923a96f2c8fd3edca647 #15164
- move IPv6 detections so that pre-filling and MS-DOS Watt-32
  configuration applies to them. This fixes
  `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` detection with MS-DOS.
  Ref: https://github.com/curl/curl/actions/runs/13260511764/job/37015877585#step:7:306
  Follow-up to a3585c9576abccddbd27200058912cef900c3c0f #15543

Also:
- add debug option to test without pre-filling.
- replace `NOT LESS` with `GREATER_EQUAL`

Closes #16278

5 months agocmake: fix to detect `HAVE_OPENSSL_SRP` in MSVC UWP builds
Viktor Szakats [Sat, 8 Feb 2025 14:15:31 +0000 (15:15 +0100)] 
cmake: fix to detect `HAVE_OPENSSL_SRP` in MSVC UWP builds

A deprecation error prevented correct detection in MSVC UWP builds:
```
curl\\bld\\CMakeFiles\\CMakeScratch\\TryCompile-ks2aa4\\CheckSymbolExists.c(8,19):
  error C4996: 'SSL_CTX_set_srp_username': Since OpenSSL 3.0
```
Ref: https://github.com/curl/curl/actions/runs/13242285473/job/36960223663#step:8:898

It seems to be caused by different default warning levels used by
the toolchain (or CMake?): `/W3` for UWP and `/W1` for Windows desktop.

https://github.com/curl/curl/actions/runs/13242285473/job/36960223663#step:8:893 UWP
https://github.com/curl/curl/actions/runs/13242285473/job/36960223262#step:8:445 desktop

Fix by passing the OpenSSL macro suppressing its deprecation warnings.

Cherry-picked from #16287
Closes #16293

5 months agolibssh2: fix to use non-deprecated `libssh2_scp_send64()`
Viktor Szakats [Mon, 10 Feb 2025 22:09:55 +0000 (23:09 +0100)] 
libssh2: fix to use non-deprecated `libssh2_scp_send64()`

Seen in curl-for-win daily, building against libssh2 1.11.2_DEV:
```
curl-for-win/curl/lib/vssh/libssh2.c:2644:9: warning: 'libssh2_scp_send_ex' is deprecated:
  since libssh2 1.2.6. Use libssh2_scp_send64() [-Wdeprecated-declarations]
 2644 |         SCP_SEND(sshc->ssh_session, sshp->path, data->set.new_file_perms,
```
Ref: https://github.com/curl/curl-for-win/actions/runs/13229370277/job/36924363438#step:3:5805

Follow-up to 553248f501762735c6aa5531f5748e88aefb5314 #16199

Closes #16291

5 months agoci: update dependency gnutls/gnutls to v3.8.9
renovate[bot] [Sat, 8 Feb 2025 08:24:49 +0000 (08:24 +0000)] 
ci: update dependency gnutls/gnutls to v3.8.9

Closes #16257

5 months agovquic: make the "disable GSO" use infof, not failf
Daniel Stenberg [Tue, 11 Feb 2025 08:00:08 +0000 (09:00 +0100)] 
vquic: make the "disable GSO" use infof, not failf

... because it is not actually a fail.

Closes #16294

5 months agoKNOWN_BUGS: --interface with link-scoped IPv6 address
Daniel Stenberg [Tue, 11 Feb 2025 08:17:47 +0000 (09:17 +0100)] 
KNOWN_BUGS: --interface with link-scoped IPv6 address

Reported-by: Aaron Deadman
Closes #14782
Closes #16295

5 months agoverbose.md: mention how carriage-return might occur in headers
Daniel Stenberg [Mon, 10 Feb 2025 11:10:57 +0000 (12:10 +0100)] 
verbose.md: mention how carriage-return might occur in headers

Fixes #16285
Reported-by: Andrei Korshikov
Closes #16286