]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
11 months agoMakefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3)
Viktor Szakats [Sat, 16 Nov 2024 18:04:36 +0000 (19:04 +0100)] 
Makefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3)

`Makefile.mk` supported MS-DOS and Amiga, but `./configure` also
supported them in a better tested and more flexible way.

This patch also adds CMake support for MS-DOS/DJGPP and Amiga OS 3.

`Makefile.mk` was not maintained. Delete it in favour of first-tier
build methods.

Also include some non-MS-DOS/AmigaOS-specific tidy-up, see details at
the end of this message.

Details:

- fix/silence all MS-DOS/DJGPP build warnings and issues.
- add MS-DOS support to cmake.
  - default to `ENABLE_THREADED_RESOLVER=OFF` for MS-DOS.
  - add support for `WATT_ROOT`.
  - use static libcurl with MS-DOS.
  - fixup default CMake suffixes/prefixes for DJGPP.
  - disable hidden symbols for MS-DOS. Not supported on MS-DOS.
  - opt-in MS-DOS into `USE_UNIX_SOCKETS`.
- improve MS-DOS support in autotools.
  - default to `--disable-threaded-resolver` for MS-DOS.
- make sure to use `close_s()` (from Watt-32) with autotools and cmake.
  `Makefile.mk` used it before this patch.
- GHA: add DJGPP cmake (~30s) and autotools (~60s) build jobs.
  Also build tests and examples with cmake.
- improve AmigaOS support in autotools:
  - configure: detect `CloseSocket()` when it's a macro.
  - configure: fix `IoctlSocket` detection on AmigaOS.
  - curl-amissl.m4: pass AmiSSL libs to tests/servers.
- add AmigaOS3 support to cmake:
  - cmake: fix `HAVE_IOCTLSOCKET_CAMEL` and
    `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` detections.
  - set necessary system libs.
  - add AmiSSL support.
  - inet_ntop, inet_pton: fix using it for AmigaOS. cmake detects them,
    and they did not compile with AmigaOS.
  - cmake: better sync `gethostname` detection with autotools.
    Fixes detection for AmigaOS, where `gethostname` is a macro.
  - cmake: fix `sys/utime.h` detection on AmigaOS.
  - cmake: force-disable `getaddrinfo` for AmigaOS.
  - cmake: tweak threading and static/shared default for AmigaOS.
  - cmake: rely on manual variable `AMIGA` to enable the platform.
- GHA: add AmigaOS cmake and autotools (~45s) jobs.
  Also build tests and examples with cmake.
- INSTALL: update MS-DOS and AmigaOS build instructions.
- amigaos: fix `-Wpointer-sign` and
  `zero or negative size array '_args'` in `Printf()`.
- amigaos: fix `-Wpointer-sign`
- amigaos: fix `-Wredundant-decls` `errno` and `h_errno`.
- amigaos: brute-force silence `lseek()` size warnings.
- amigaos: server/resolve: silence `-Wdiscarded-qualifiers`.
- amigaos: server/resolve: fix `-Wpointer-sign`.
- amigaos: fix `CURL_SA_FAMILY_T` type.
- nonblock: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS.
  `ioctl` is also detected, but fails when used. Make the above override
  it for a successful build.
Authored-by: Darren Banfi
  Fixes #15537
  Closes #15603
- tftpd: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS.
- tftpd: tidy-up conditional code.
- curl: set stack size to 16384 for AmigaOS3/4
  Overriding the default 4096.
Suggested-by: Darren Banfi
  Ref: https://github.com/curl/curl/pull/15543#issuecomment-2498783123
  Ref: https://wiki.amigaos.net/wiki/Controlling_Application_Stack
- functypes.h: fix `SEND_QUAL_ARG2` for AmigaOS.
- tftp: add missing cast in sendto() call for AmigaOS.
- getinfo: fix warning with AmigaOS.
- tool_operate: silence warning with AmigaOS
- amigaos: fix building libtests due to missing `RLIMIT_NOFILE`.
- curl_gethostname: silence warning for AmigaOS.
- ftp: silence `-Wtype-limits` for AmigaOS.
- libtest: fix timeval initialization for AmigaOS.
- examples: fix `timeval` initialization for AmigaOS.
- examples: silence warning for AmigaOS.
- configure: fix IPv6 detection for cross-builds.
- netrc: fix to build with AmigaOS cleanly.
- buildinfo: detect and add `DOS` tag for MS-DOS builds.
- buildinfo: add `AMIGA` to buildinfo.txt in auttools.
- build: move `USE_WATT32` macro definition to cmake/configure.

Non-MS-DOS/AmigeOS-specific tidy-ups:

- configure: sync `sa_family_t` detection with cmake.
- configure: sync `ADDRESS_FAMILY` detection signals with cmake.
- doh: use `CURL_SA_FAMILY_T`.
- lib: drop mingw-specific `CURL_SA_FAMILY_T` workaround.
- cmake: extend instead of override check-specific
  configurations/requirements.
  This allows to honor global requirements added earlier.
  Necessary for AmigaOS for example.
- cmake: omit warning on disabled IPv6 for MS-DOS and AmigaOS.
  No IPv6 support on these platforms. Also sync with autotools.
- lib1960: use libcurl `inet_pton()` wrapper.
- cmake: detect LibreSSL (to match autotools).
- cmake: say the specific OpenSSL flavour detected.
- hostip: add missing `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` guard.
- lib: simplify classic mac feature guards.

Follow-up to a8861b6ccdd7ca35b6115588a578e36d765c9e38 #9764

Closes #15543

11 months agoINSTALL.md: sync with my brag slide "104 operating systems"
Daniel Stenberg [Mon, 16 Dec 2024 12:01:15 +0000 (13:01 +0100)] 
INSTALL.md: sync with my brag slide "104 operating systems"

Minoca, Nintendo 3DS and Maemo were missing.

Rename OS/400 to IBM I

Closes #15755

11 months agocmake: enable `CURL_USE_PKGCONFIG` for cross-`MINGW`
Viktor Szakats [Sun, 22 Sep 2024 17:58:48 +0000 (19:58 +0200)] 
cmake: enable `CURL_USE_PKGCONFIG` for cross-`MINGW`

Enable `CURL_USE_PKGCONFIG` by default for MinGW cross-builds.

Note: This may cause fallouts in certain envs where `pkg-config` picks
up native packages.

Follow-up to e1ab01d1bd13f0ec79c97ac7e19e4b8108dce270 #14658
Follow-up to c555ab469d74756b0e3a21f797237d53f9334ce3 #14575

Closes #15005

11 months agocmake: namespace functions and macros
Viktor Szakats [Wed, 6 Nov 2024 13:00:04 +0000 (14:00 +0100)] 
cmake: namespace functions and macros

Prefix (or suffix) curl-defined macro and function names with `curl`.
To avoid collisions with non-curl CMake and to make them recognizable
as curl-specific calls.

Closes #15498

11 months agocmake: clang-cl improvements
Viktor Szakats [Sat, 2 Nov 2024 20:11:28 +0000 (21:11 +0100)] 
cmake: clang-cl improvements

- drop `/clang:` prefix for `-W` options for clang-cl.
  Except for `-Wall` which gets interpreted as MSVC `/Wall`
  and translated to `-Weverything`, which is undesired.
  Related: https://github.com/llvm/llvm-project/issues/102982

- include `MSVC_VERSION` in target flags.
  Useful for clang-cl builds where this information doesn't appear
  elsewhere in the cmake configure log.

- suppress `-Wlanguage-extension-token` more for clang-cl.
  This fixes clang-cl builds with default `CURL_WERROR=OFF` and
  `PICKY_COMPILER=ON`.
  This warning is enabled by `-pedantic` as a warning and by
  `-pedantic-errors` as an error. Verifiable using llvm's
  `diagtool show-enabled -pedantic test.c`.
  Follow-up to fb711b50981e86c9dcdd6c2ba468b5d32edbcfce #15449

Closes #15478

11 months agocmake: replace `unset(VAR)` with `set(VAR "")` for init
Viktor Szakats [Wed, 6 Nov 2024 12:53:12 +0000 (13:53 +0100)] 
cmake: replace `unset(VAR)` with `set(VAR "")` for init

Also add cleanup `unset()`s where missing.

Reported-by: Kai Pastor
Bug: https://github.com/curl/curl/pull/15255#issuecomment-2458659626
Follow-up to 8b09138083640039ce35657a68eeb10b903ed0a5 #14610

Closes #15497

11 months agoGHA/codeql-analysis: install libpsl
Viktor Szakats [Mon, 16 Dec 2024 19:58:31 +0000 (20:58 +0100)] 
GHA/codeql-analysis: install libpsl

Stay with the default CMake build. It requires libpsl now, but
the latest Ubuntu runner no longer seems to provide it. Install it
manually.

Bug: https://github.com/curl/curl/pull/15464#issuecomment-2546602052
Follow-up to 7afbc39173f1dc00b99ebe3b08837d6d051672d6 #15464

Closes #15760

11 months agocmake: make libpsl required by default
Viktor Szakats [Thu, 31 Oct 2024 11:12:49 +0000 (12:12 +0100)] 
cmake: make libpsl required by default

As done earlier in `./configure`:

To force users to explictily disable it if they really don't want it
used and make it harder to accidentally miss it.

`-DCURL_USE_LIBPSL=OFF` is the option to use if PSL is not wanted.

Follow-up to 2998874bb61ac6ef3b72d6a61467cd2aaf6e53ea #12661

Closes #15464

11 months agocmake: add LDAP Find module
Viktor Szakats [Fri, 11 Oct 2024 21:40:37 +0000 (23:40 +0200)] 
cmake: add LDAP Find module

Move LDAP detection to its own Find module.

It supports `pkg-config` and the standard detection method used for
other dependencies, with version detection.

In curl CI it fixes LDAP detection in the OpenBSD job.

Closes #15273

11 months agolib: replace `inline` redefine with `CURL_INLINE` macro
Viktor Szakats [Fri, 8 Nov 2024 14:47:19 +0000 (15:47 +0100)] 
lib: replace `inline` redefine with `CURL_INLINE` macro

Instead of redefining the `inline` keyword, introduce curl's own
`CURL_INLINE` macro and set it depending on the compiler's capabilities,
or use its value set via custom C flags.

Also keep honoring a custom `inline` macro, if set.

Closes #15523

11 months agocmake: use `CMAKE_REQUIRED_LINK_DIRECTORIES`
Viktor Szakats [Sat, 12 Oct 2024 22:34:23 +0000 (00:34 +0200)] 
cmake: use `CMAKE_REQUIRED_LINK_DIRECTORIES`

Use `CMAKE_REQUIRED_LINK_DIRECTORIES` with CMake 3.31.0 and upper,
in local macro `curl_required_libpaths()`.

https://github.com/Kitware/CMake/commit/9e95bd49f278cd2a05caf21fd624a41e4bfaba60
https://gitlab.kitware.com/cmake/cmake/-/commit/9e95bd49f278cd2a05caf21fd624a41e4bfaba60
https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9795
https://cmake.org/cmake/help/v3.31/module/CheckSymbolExists.html

Tested OK with cmake 3.31.0-rc1.

Follow-up to 01a81579977b3872935d508e306a735f0568d113 #15271
Follow-up to 7bab201abe3915a0167c002f9308950cb8a06e4b #15193

Closes #15280

11 months agocmake: drop redundant FOUND checks (libgsasl, libssh, libuv)
Viktor Szakats [Thu, 31 Oct 2024 11:26:37 +0000 (12:26 +0100)] 
cmake: drop redundant FOUND checks (libgsasl, libssh, libuv)

With `find_package(... REQUIRED)` the configuration fails and exits
if the package is not found. The `..._FOUND` check afterwards always
evaluates true and safe to delete.

Also true for brotli and zstd, but those are addressed differently
via #15431.

Closes #15465

11 months agocmake: improve `curl_dumpvars()` and move to `Utilities.cmake`
Viktor Szakats [Tue, 12 Nov 2024 20:37:07 +0000 (21:37 +0100)] 
cmake: improve `curl_dumpvars()` and move to `Utilities.cmake`

Also:
- dump variable types.
- show which variables are marked as advanced.
- use `IN ITEMS`.

Closes #15562

11 months agobuild: drop unused feature macros, update exception list
Viktor Szakats [Wed, 13 Nov 2024 21:38:58 +0000 (22:38 +0100)] 
build: drop unused feature macros, update exception list

- cmp-config.pl: add remaining exceptions. Sort list.

- drop unused `HAVE_SYS_WAIT_H`.
  Follow-up to 50def7c881ba560ab6e0235990e8f07fa69f4bc8 #13249

- drop unused `HAVE_FCHMOD`.
  Follow-up to 03cb1ff4d629d6110dab787c75c187626d58323d #12395

- autotools: stop promoting variables to macros:
  `USE_NGTCP2_CRYPTO_*`, `USE_NGTCP2_H3`, `USE_OPENSSL_H3`,
  `HAVE_LIBRESSL`.
  They are not used in the source.

- cmake: drop unused `HAVE_O_NONBLOCK`,
  `HAVE_DISABLED_NONBLOCKING`.

- lib: drop `NEED_MALLOC_H`.
  It was used in manual-build cases for Amiga/MS-DOS/Windows/WinCE, but
  never by autotools/cmake, thus apparently unnecessary.

- lib: drop unused `NEED_MEMORY_H`.

- lib: simplify classic mac feature guards,
  drop `HAVE_EXTRA_STRICMP_H` and `HAVE_EXTRA_STRDUP_H`.

- autotools: drop unused `HAVE_GETHOSTBYNAME` detection.

- autotools: drop unused OpenSSL feature tests:
  `HAVE_ERR_H`, `HAVE_PEM_H`, `HAVE_RSA_H`

- autotools: drop unused OpenSSL feature tests:
  `HAVE_X509_H`, `HAVE_CRYPTO_H`, `HAVE_SSL_H`.

  They performed a fallback check when the primary check missed
  `openssl/x509.h`. Though if any other prefixed headers were found,
  OpenSSL is already assumed detected.

  The fallback check was looking for 3 unprefixed OpenSSL headers, and
  if all found, marked OpenSSL found internally, but did not promote
  it to `curl_config.h` via `USE_OPENSSL`. Meaning it either didn't do
  anything or may have continued with an inconsistent state.
  Added in d99c20f62876457ca6880d706825e68f695bda18 (2008)

  At the time, there was an extra `AC_DEFINE(USE_SSLEAY, 1 ...` logic
  after this code, which kicked in in the fallback case, but that code
  was deleted in 709cf76f6bb7dbaca14e3e8df160ccfac04dcecb (2015)

  Follow-up to 709cf76f6bb7dbaca14e3e8df160ccfac04dcecb

- autotools: drop `AC_SUBST()` where the value is explicitly set anyway
  and the macro is unused.

- autotools: replace `AC_SUBST(VAR, 1)` with local variable assigments,
  where the `@VAR@` macro is unused. Also dedupe the local variable if
  there was a parallel one used for the same purpose.

- autotools: drop local feature variables that were never used.

- autotools: drop unused `CURL_CHECK_OPTION_NTLM_WB`,
  `CURL_CHECK_NTLM_WB`.
  Also stop setting unused `NTLM_WB_ENABLED` macro for VMS.
  Follow-up to 50def7c881ba560ab6e0235990e8f07fa69f4bc8 #13249

- autotools: drop unused `PKGADD_*`.
  Follow-up to bae0d473f5912d38fc8da1f9850a70b015b53c9e #3331

- autotools: drop unused `CURL_NETWORK_LIBS`.
  Follow-up to 3af75e18d691af24c4a11ee6cb1441de44b3a836 #14697

Closes #15577

11 months agoGHA: set `persist-credentials: false`
Viktor Szakats [Sat, 14 Dec 2024 23:45:04 +0000 (00:45 +0100)] 
GHA: set `persist-credentials: false`

Suggested by zizmor GHA analysis tool.

Also:
- Move GH variables within single-quotes.
- Prefer single-quotes in shell code. (tidy-up)

Ref: https://github.com/actions/checkout/issues/485
Ref: https://github.com/actions/checkout/pull/1687
Ref: https://woodruffw.github.io/zizmor/

Closes #15746

11 months agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 16 Dec 2024 09:09:22 +0000 (10:09 +0100)] 
RELEASE-NOTES: synced

11 months agovariable.md: mention --expand-variable for variables to variables
Daniel Stenberg [Sun, 15 Dec 2024 22:07:57 +0000 (23:07 +0100)] 
variable.md: mention --expand-variable for variables to variables

To assign a variable using contents from another variable.

Closes #15752

11 months agotool_getparam: fix memory leak on error in parse_ech
Hermes Zhang [Mon, 16 Dec 2024 04:55:57 +0000 (12:55 +0800)] 
tool_getparam: fix memory leak on error in parse_ech

- Free tmpcfg memory before returning an error code if aprintf failed.

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

11 months agows-docs: remove the outdated texts saying ws support is experimental
Daniel Stenberg [Sun, 15 Dec 2024 14:57:13 +0000 (15:57 +0100)] 
ws-docs: remove the outdated texts saying ws support is experimental

It stopped being experimental in 8.10.0

Fixes #15749
Reported-by: Mohammed Sadiq
Closes #15751

11 months agoaltsvc: avoid integer overflow in expire calculation
Daniel Stenberg [Sat, 14 Dec 2024 22:09:16 +0000 (23:09 +0100)] 
altsvc: avoid integer overflow in expire calculation

A bad value here just makes for a bad alt-svc experience, not a security
problem.

Detected by OSS-Fuzz

Bug: https://issues.oss-fuzz.com/issues/383911309

Closes #15745

11 months agocmake/FindMbedTLS: drop lib duplicates early
Viktor Szakats [Wed, 6 Nov 2024 11:40:56 +0000 (12:40 +0100)] 
cmake/FindMbedTLS: drop lib duplicates early

When de-duplicating the list of raw libs, make sure to drop duplicates
from the beginning of the list.

Reported-by: Kai Pastor
Ref: https://github.com/curl/curl/pull/15273#pullrequestreview-2417191841
Closes #15495

11 months agovariable.md: show function use with examples
Daniel Stenberg [Sat, 14 Dec 2024 13:32:18 +0000 (14:32 +0100)] 
variable.md: show function use with examples

Closes #15743

11 months agodocs/BUGS.md: remove leading space from a link
Daniel Stenberg [Sat, 14 Dec 2024 12:31:52 +0000 (13:31 +0100)] 
docs/BUGS.md: remove leading space from a link

11 months agoscripts/mdlinkcheck: markdown link checker
Daniel Stenberg [Sat, 14 Dec 2024 12:29:10 +0000 (13:29 +0100)] 
scripts/mdlinkcheck: markdown link checker

This script parses all markdown files in the repository, extracts all
links and verifies that they work.

It makes sure to only check the URLs once, even if used in multiple
links. There is a whitelist for URLs we deem unnecessary to check.

It uses curl to do the checks.

As a bonus, this makes it easy to run this check locally.

Closes #15742

11 months agotool_getparam: fix the ECH parser
Daniel Stenberg [Sat, 14 Dec 2024 09:41:05 +0000 (10:41 +0100)] 
tool_getparam: fix the ECH parser

The pn: and ecl: prefixes were not handled correctly.

CodeSonar helped me realize as it poined out an "Unreachable Data Flow"

Closes #15741

11 months agotool_getparam: fix "Ignored Return Value"
Daniel Stenberg [Sat, 14 Dec 2024 09:34:45 +0000 (10:34 +0100)] 
tool_getparam: fix "Ignored Return Value"

Follow-up from a300879b63b

Pointed out by CodeSonar

Closes #15740

11 months agotool_operate: make --etag-compare always accept a non-existing file
Daniel Stenberg [Thu, 12 Dec 2024 22:06:19 +0000 (23:06 +0100)] 
tool_operate: make --etag-compare always accept a non-existing file

Consider it a blank etag. It allows for more use cases when the file
just might not have been created yet.

Closes #15737

11 months agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 13 Dec 2024 10:50:43 +0000 (11:50 +0100)] 
RELEASE-NOTES: synced

11 months agoGHA: pin dependencies
renovate[bot] [Wed, 11 Dec 2024 12:06:23 +0000 (12:06 +0000)] 
GHA: pin dependencies

For recently added actions in checkdocs.yml and windows.yml

Closes #15722

11 months agocurl: return error if etag options are used with multiple URLs
Daniel Stenberg [Thu, 12 Dec 2024 16:03:59 +0000 (17:03 +0100)] 
curl: return error if etag options are used with multiple URLs

And document it.

Add tests 484 and 485

Fixes #15729
Reported-by: Tamir Duberstein
Closes #15731

11 months agonetrc: restore _netrc fallback logic
Kevin Sun [Fri, 13 Dec 2024 01:35:12 +0000 (17:35 -0800)] 
netrc: restore _netrc fallback logic

Regression from 05977f4f75fd08837a877, shipped in 8.11.0

Fixes #15734
Closes #15735

11 months agochecksrc: ban use of sscanf()
Daniel Stenberg [Thu, 12 Dec 2024 15:02:01 +0000 (16:02 +0100)] 
checksrc: ban use of sscanf()

Using sscanf() is not a (security) problem in itself, but we strongly
discorage using it for parsing input since it is hard to use right, easy
to mess up and often makes for sloppy error checking.

Allow it in examples and tests

Closes #15687

11 months agostrparse: string parsing helper functions
Daniel Stenberg [Fri, 6 Dec 2024 13:31:38 +0000 (14:31 +0100)] 
strparse: string parsing helper functions

Designed to aid converting off from sscanf parsers. sscanf is hard to
use right, easy to mess up and often makes for sloppy error checking.

The new parsers allow more exact and pedandic parsing.

This new set of functions should be possible to use (and extend) and
switch over other libcurl parser code to use going forward.

Adapts the following to use the new functions:

- altsvc.c
- hsts.c
- http_aws_sigv4.c

Bonus: fewer memory copies, fewer stack buffers.

Test: Unit test1664

Docs: docs/internals/STRPARSE.md

Closes #15692

11 months agoasync-thread: avoid closing eventfd twice
Andy Pan [Thu, 12 Dec 2024 12:48:56 +0000 (12:48 +0000)] 
async-thread: avoid closing eventfd twice

When employing eventfd for socketpair, there is only one file
descriptor. Closing that fd twice might result in fd corruption.
Thus, we should avoid closing the eventfd twice, following the
pattern in lib/multi.c.

Fixes #15725
Closes #15727
Reported-by: Christian Heusel
11 months agotests/http/clients: use proper sleep() call on NonStop
Randall S. Becker [Tue, 10 Dec 2024 20:02:00 +0000 (20:02 +0000)] 
tests/http/clients: use proper sleep() call on NonStop

This fix impacts ws-data.c and ws-pingpong.c. sleep() replaced with
system PROCESS_DELAY_() having the same resolution as usleep().

Fixes #15711
Closes #15712

Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca>
11 months agosystem.h: add 64-bit curl_off_t definitions for NonStop
Randall S. Becker [Wed, 11 Dec 2024 15:01:48 +0000 (15:01 +0000)] 
system.h: add 64-bit curl_off_t definitions for NonStop

Fixes #15723
Closes #15724

Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca>
11 months agosectransp: free certificate on error
Christian Schmitz [Wed, 11 Dec 2024 10:48:20 +0000 (11:48 +0100)] 
sectransp: free certificate on error

Otherwise the certificate memory was leaked.

Closes #15721

11 months agoconncache: result_cb comment removed from function docs
Christian Schmitz [Wed, 11 Dec 2024 10:41:27 +0000 (11:41 +0100)] 
conncache: result_cb comment removed from function docs

result_cb doesn't exist anymore

Closes #15720

11 months agoGHA/checkdocs: change markdown link checker to linkspector
Daniel Stenberg [Wed, 11 Dec 2024 10:26:13 +0000 (11:26 +0100)] 
GHA/checkdocs: change markdown link checker to linkspector

Fixes #15717
Closes #15719

11 months agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 11 Dec 2024 10:16:48 +0000 (11:16 +0100)] 
RELEASE-NOTES: synced

Start working on the next release

11 months agoRELEASE-PROCEDURE.md: mention how to publish security advisories
Daniel Stenberg [Wed, 11 Dec 2024 07:40:39 +0000 (08:40 +0100)] 
RELEASE-PROCEDURE.md: mention how to publish security advisories

As they are releated to the release procedure

Closes #15714

11 months agocookie: parse only the exact expire date
Daniel Stenberg [Tue, 10 Dec 2024 11:39:57 +0000 (12:39 +0100)] 
cookie: parse only the exact expire date

The date parser function is very forgiving and skips most "irrelevant"
characters in its hunt for a date to figure out. Therefore it is
important to make sure the date string is properly null terminated so
that it does not accidentally parse a piece of whatever text follows
after the date.

Add test483: test (overly) long expire dates in cookies

Closes #15709

11 months agolib517: extend the getdate test with quotes and leading "junk"
Daniel Stenberg [Tue, 10 Dec 2024 10:18:04 +0000 (11:18 +0100)] 
lib517: extend the getdate test with quotes and leading "junk"

Closes #15708

11 months agoRELEASE: synced curl-8_11_1
Daniel Stenberg [Wed, 11 Dec 2024 07:05:13 +0000 (08:05 +0100)] 
RELEASE: synced

curl 8.11.1 release

11 months agoTHANKS: contributors from 8.11.1
Daniel Stenberg [Wed, 11 Dec 2024 07:05:13 +0000 (08:05 +0100)] 
THANKS: contributors from 8.11.1

11 months agobuild: fix tests when documentation/manual is disabled
Viktor Szakats [Mon, 9 Dec 2024 00:57:32 +0000 (01:57 +0100)] 
build: fix tests when documentation/manual is disabled

- build: fix to exclude 'documentation' tests when building
  the documentation is explicitly disabled. Both for cmake
  and `./configure`.

Reported-by: Daniel Engberg
  Fixes #15703

- test481, test482: fix for builds with no manual.

Reported-by: Daniel Engberg
  Fixes #15703

- configure: fix to always detect Perl. Running tests require
  it when run. Before this patch Perl wasn't detected when
  documentation/manual/embedded-CA were all disabled,
  making tests fail to start.

- test1177: add keyword `documentation`. It depends no
  `curl_version_info.3`.

- GHA/linux: test cmake and `./configure` with docs and
  manual disabled and tests run.

Closes #15704

11 months agoGHA: update four depencencies
renovate[bot] [Tue, 3 Dec 2024 14:02:51 +0000 (14:02 +0000)] 
GHA: update four depencencies

- github/codeql-action digest to aa57810
- cross-platform-actions/action action to v0.26.0
- actions/cache digest to 1bd1e32
- msys2/setup-msys2 digest to d44ca8e

Closes #15674
Closes #15686
Closes #15696
Closes #15702

11 months agodocs: bring back ALTSVC.md and HSTS.md
Daniel Stenberg [Mon, 9 Dec 2024 07:52:01 +0000 (08:52 +0100)] 
docs: bring back ALTSVC.md and HSTS.md

This partly reverts 0e06603b2318356ba78b2f

These file formats are not properly documented elsewhere, plus the
website uses these files to populate the documentation pages to which
users end up via the URLs that are mentioned within the alt-svc and hsts
files.

Fixes #15705
Reported-by: Jeffrey Bosboom
Closes #15706

11 months agotest2086: disable MSYS2's POSIX path conversion
Marcel Raad [Wed, 4 Dec 2024 00:12:50 +0000 (01:12 +0100)] 
test2086: disable MSYS2's POSIX path conversion

Older MSYS2 versions treat the URL as paths list and convert them from
UNIX to Windows format. There's no path here that needs to be
converted, so disable path conversion for this test as done for others.

Fixes https://github.com/curl/curl/pull/15644#issuecomment-2511313206
Closes https://github.com/curl/curl/pull/15677

11 months agomprintf: fix the integer overflow checks
Daniel Stenberg [Fri, 6 Dec 2024 15:01:50 +0000 (16:01 +0100)] 
mprintf: fix the integer overflow checks

When a floating point precision or string width are provided as a
base-10 number, the code could miss to detect integer overflows if the
provided value was exactly 2147483648 or 2147483649 (2147483647 being
the maxium value a signed integer can hold).

The chance that such values would actually ever be used is slim.

This change fixes the detection to also cover those edge cases.

Closes #15699

11 months agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 6 Dec 2024 08:24:45 +0000 (09:24 +0100)] 
RELEASE-NOTES: synced

11 months agotool_getparam: remove Redundant Condition
Daniel Stenberg [Fri, 6 Dec 2024 06:48:11 +0000 (07:48 +0100)] 
tool_getparam: remove Redundant Condition

Pointed out by CodeSonar

Closes #15698

11 months agohostip: don't use the resolver for FQDN localhost
Jay Satiro [Tue, 3 Dec 2024 20:56:07 +0000 (15:56 -0500)] 
hostip: don't use the resolver for FQDN localhost

- Treat `[<any>.]localhost.` (ie localhost with FQDN period terminator)
  as fixed value 127.0.0.1 and ::1 instead of querying the resolver.

Prior to this change, b5c0fe20 (precedes 7.85.0) did the same for
non-FQDN `<any>.localhost`.

Prior to this change, 1a0ebf66 (precedes 7.78.0) did the same for
non-FQDN `localhost`.

Ref: https://github.com/curl/curl/issues/15628#issuecomment-2515540315

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

11 months agohttp_negotiate: allow for a one byte larger channel binding buffer
Daniel Stenberg [Thu, 5 Dec 2024 17:24:45 +0000 (18:24 +0100)] 
http_negotiate: allow for a one byte larger channel binding buffer

The channel binding data dynbuf was not set correctly making it fail with
CURLE_TOO_LARGE too easily.

Reported-by: galen11 on github
Fixes #15685
Closes #15694

11 months agocmake: set `CURL_STATICLIB` for static lib when `SHARE_LIB_OBJECT=OFF`
chemodax [Thu, 5 Dec 2024 16:52:12 +0000 (17:52 +0100)] 
cmake: set `CURL_STATICLIB` for static lib when `SHARE_LIB_OBJECT=OFF`

When compiled with BUILD_STATIC_LIBS=ON and SHARE_LIB_OBJECT=OFF compile
definition CURL_STATICLIB was not set for static library. It seems to be
copy-paste error in the lib/CMakeLists.txt.

This pull request fixes it.

Closes #15695

11 months agomime: fix reader stall on small read lengths
Stefan Eissing [Thu, 5 Dec 2024 11:37:38 +0000 (12:37 +0100)] 
mime: fix reader stall on small read lengths

The base64 mime encoder stalls when it cannot encode a full 3 byte input
set into the read buffer. The workaround for this limitation was
incomplete and could lead to stalled transfers when the last chunk to
upload was smaller than 4 bytes.

Use a tmp buffer on small reads to allow mime encoders more space to put
their things.

Add test case reproducing the issue and fix.

Reported-by: Alexis Savin
Fixes #15688
Closes #15691

11 months agodmaketgz: use --no-cache when building docker image
andrewkirillov-ibm [Thu, 5 Dec 2024 10:48:50 +0000 (10:48 +0000)] 
dmaketgz: use --no-cache when building docker image

Fixes #15689
Closes #15690

11 months agotool_getparam: parse --localport without using sscanf
Daniel Stenberg [Wed, 4 Dec 2024 10:53:21 +0000 (11:53 +0100)] 
tool_getparam: parse --localport without using sscanf

and switch to str2unummax() for the number parsings

Closes #15681

11 months agotool_formparse: remove use of sscanf()
Daniel Stenberg [Wed, 4 Dec 2024 12:59:52 +0000 (13:59 +0100)] 
tool_formparse: remove use of sscanf()

In the function for handling 'type=' in the -F command line arguments,
we make the code more lax to accept more strings and thereby also avoid
the use of sscanf().

Closes #15683

11 months agotool_urlglob: parse character globbing range without sscanf
Daniel Stenberg [Wed, 4 Dec 2024 12:45:21 +0000 (13:45 +0100)] 
tool_urlglob: parse character globbing range without sscanf

A step towards a future without sscanf() calls.

Closes #15682

11 months agodigest: produce a shorter cnonce in Digest headers
Daniel Stenberg [Tue, 3 Dec 2024 06:52:48 +0000 (07:52 +0100)] 
digest: produce a shorter cnonce in Digest headers

Other programs (Postman, Chrome, Python request) use a 16 byte cnonce
and there are instances of server-side implementations that don't
support the larger lengths curl used previously.

Fixes #15653
Reported-by: Florian Eckert
Closes #15670

11 months agocurl: do more command line parsing in sub functions
Daniel Stenberg [Wed, 4 Dec 2024 09:23:47 +0000 (10:23 +0100)] 
curl: do more command line parsing in sub functions

This moves argument parsing logic for a number of options into sub
functions to reduce the overall complexity of the single getparameter()
function. pmccabe says it takes complexity down from 234 to 147.

The command line options that now has dedicated parser funtions are:

 --continue-at, --ech, --header, --localport, --output, --quote, --range
 --remote-name, --time-cond, --upload-file, --url, --verbose, --writeout

These parsers were selected for thise because they had more than 15
lines of logic in the main switch(). Detected like this:

 git grep -hn 'case C_' tool_getparam.c |
  cut -d: -f1 |
  awk '{if(($1 - prev) > 15) { printf "%d\n", prev;} prev = $1;}'

Closes #15680

11 months agoopenssl: remove three "Useless Assignments"
Daniel Stenberg [Wed, 4 Dec 2024 06:17:43 +0000 (07:17 +0100)] 
openssl: remove three "Useless Assignments"

Pointed out by CodeSonar

Closes #15679

11 months agoliub: fixes for wolfSSL OPENSSL_COEXIST
Daniel Pouzzner [Tue, 3 Dec 2024 14:57:58 +0000 (08:57 -0600)] 
liub: fixes for wolfSSL OPENSSL_COEXIST

For MD4, MD5, and DES

Assisted-by: Viktor Szakats
Closes #15650

11 months agoKNOWN_BUGS: setting a disabled option should return CURLE_NOT_BUILT_IN
Daniel Stenberg [Tue, 3 Dec 2024 16:15:06 +0000 (17:15 +0100)] 
KNOWN_BUGS: setting a disabled option should return CURLE_NOT_BUILT_IN

Reported-by: Jeroen Ooms
Closes #15472
Closes #15675

12 months agoRELEASE-NOTES: synced
Daniel Stenberg [Tue, 3 Dec 2024 16:21:42 +0000 (17:21 +0100)] 
RELEASE-NOTES: synced

12 months agohttp_proxy: move dynhds_add_custom here from http.c
Daniel Stenberg [Tue, 3 Dec 2024 12:24:38 +0000 (13:24 +0100)] 
http_proxy: move dynhds_add_custom here from http.c

... and make it static. As it is not used anywhere else.

Closes #15672

12 months agoopenssl: stop using SSL_CTX_ function prefix for our functions
Daniel Stenberg [Tue, 3 Dec 2024 12:42:36 +0000 (13:42 +0100)] 
openssl: stop using SSL_CTX_ function prefix for our functions

It is a prefix already taken and is used by OpenSSL

Closes #15673

12 months agoDockerfile: Update debian:bookworm-slim Docker digest to b73bf02
renovate[bot] [Tue, 3 Dec 2024 07:48:02 +0000 (07:48 +0000)] 
Dockerfile: Update debian:bookworm-slim Docker digest to b73bf02

Closes #15671

12 months agoCI: update dependencies
renovate[bot] [Mon, 25 Nov 2024 15:18:48 +0000 (15:18 +0000)] 
CI: update dependencies

- ngtcp2/ngtcp2 to v1.9.1
- github/codeql-action digest to f09c1c0
- rustls/rustls-ffi to v0.14.1
- awslabs/aws-lc to v1.40.0

Closes #15616
Closes #15619
Closes #15629
Closes #15651

12 months agolibssh: use libssh sftp_aio to upload file
xiaofeng [Fri, 22 Nov 2024 07:02:00 +0000 (15:02 +0800)] 
libssh: use libssh sftp_aio to upload file

Support async sftp upload for curl built with libssh.

Closes #15625

12 months agocurl: --continue-at is mutually exclusive with --remove-on-error
Daniel Stenberg [Mon, 2 Dec 2024 13:12:29 +0000 (14:12 +0100)] 
curl: --continue-at is mutually exclusive with --remove-on-error

Test 482 verifies

Fixes #15645
Reported-by: Harry Sintonen
Closes #15668

12 months agocurl: --continue-at is mutually exclusive with --no-clobber
Daniel Stenberg [Mon, 2 Dec 2024 13:07:45 +0000 (14:07 +0100)] 
curl: --continue-at is mutually exclusive with --no-clobber

Test 481 verifies

Fixes #15645
Reported-by: Harry Sintonen
Closes #15668

12 months agocurl: use realtime in trace timestamps
Stefan Eissing [Tue, 26 Nov 2024 10:18:06 +0000 (11:18 +0100)] 
curl: use realtime in trace timestamps

Timestamps in trace logs used a mix of realtime and monotonic time
sources, leading to fractional seconds carrying wrong values. Use
realtime only, so the correct nanoseconds are printed.

Fixes #15614
Reported-by: jethrogb on github
Closes #15641

12 months agoOpenSSL: improvde error message on expired certificate
Stefan Eissing [Tue, 19 Nov 2024 13:44:02 +0000 (14:44 +0100)] 
OpenSSL: improvde error message on expired certificate

Fix regression that no longer printed the error messages about expired
certificates in openssl. Add test case for openssl/gnutls/wolfssl.

Fixes #15612
Reported-by: hiimmat on github
Closes #15613

12 months agopytest: add test for use of CURLMOPT_MAX_HOST_CONNECTIONS
Stefan Eissing [Wed, 6 Nov 2024 11:42:34 +0000 (12:42 +0100)] 
pytest: add test for use of CURLMOPT_MAX_HOST_CONNECTIONS

Add test_02_33 to run with various values for the multi option
CURLMOPT_MAX_HOST_CONNECTIONS and CURLOPT_FRESH_CONNECT to trigger
connection pool limit handling code.

Closes #15494

12 months agocurl: --continue-at is mutually exclusive with --range
Daniel Stenberg [Mon, 2 Dec 2024 10:53:54 +0000 (11:53 +0100)] 
curl: --continue-at is mutually exclusive with --range

Allowing both just creates a transfer with behaviors no user can
properly anticipate so better just deny the combo.

Fixes #15646
Reported-by: Harry Sintonen
Closes #15666

12 months agodocs: suggest --ssl-reqd instead of --ftp-ssl
Daniel Stenberg [Thu, 28 Nov 2024 14:24:11 +0000 (21:24 +0700)] 
docs: suggest --ssl-reqd instead of --ftp-ssl

Reported-by: SuperStormer on github
Fixes #15658
Closes #15660

12 months agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 2 Dec 2024 08:05:37 +0000 (09:05 +0100)] 
RELEASE-NOTES: synced

12 months agosetopt: fix missing options for builds without HTTP & MQTT
Jay Satiro [Tue, 26 Nov 2024 08:50:39 +0000 (03:50 -0500)] 
setopt: fix missing options for builds without HTTP & MQTT

- Restore some necessary options for builds without HTTP and MQTT.

The logic to turn off a segment of options in builds without HTTP and
MQTT was too expansive. Those builds (such as FTP-only builds) could not
use options such as CURLOPT_URL or CURLOPT_USERNAME etc.

Prior to this change 30da1f59 (precedes 8.11.0) refactored the options
processing and caused this issue.

Reported-by: Yoshimasa Ohno
Fixes https://github.com/curl/curl/issues/15634
Closes https://github.com/curl/curl/pull/15640

12 months agoGHA/windows: extend PATH instead copying libcurl.dll
Viktor Szakats [Fri, 29 Nov 2024 09:25:20 +0000 (10:25 +0100)] 
GHA/windows: extend PATH instead copying libcurl.dll

It was already done in cmake jobs, but not in autotools ones.

Follow-up to 1a2d38c47c7825ad4d993d10664a45be3e3bbb58 #15437
Follow-up to 04184d45badeb45ce9166725a15f93742fb09770 #15662

Closes #15663

12 months agotests: add the ending time stamp in testcurl.pl
Dan Fandrich [Thu, 28 Nov 2024 21:22:53 +0000 (13:22 -0800)] 
tests: add the ending time stamp in testcurl.pl

This provides better information on the length of the job and when it
completed.

12 months agoDISTROS: update Alt Linux links
Dan Fandrich [Thu, 28 Nov 2024 21:21:54 +0000 (13:21 -0800)] 
DISTROS: update Alt Linux links

12 months agoGHA/windows: avoid libtool wrapper for test and server executables
Viktor Szakats [Thu, 28 Nov 2024 23:32:44 +0000 (00:32 +0100)] 
GHA/windows: avoid libtool wrapper for test and server executables

This makes `runtests.pl` run the final executables directly.
Before this patch it called the autotools/libtool wrapper tool, which
then called the final executables.

This solution was already used for `curl.exe`.

Applies to tests run in the `mingw, AM x86_64 c-ares U` job, which still
shows unexplained flakiness.

Also makes tests finish 45 seconds faster.

Ref: #14854
Follow-up to 1a2d38c47c7825ad4d993d10664a45be3e3bbb58 #15437
Closes #15662

12 months agocmake: remove legacy unused IMMEDIATE keyword
Peter Kokot [Thu, 28 Nov 2024 22:27:13 +0000 (23:27 +0100)] 
cmake: remove legacy unused IMMEDIATE keyword

This was once supported in CMake 2.x and in current 3.x versions is
ignored.

Closes #15661

12 months agobuild: fix MSVC UWP builds
Viktor Szakats [Wed, 27 Nov 2024 15:21:04 +0000 (16:21 +0100)] 
build: fix MSVC UWP builds

The MSVC UWP job in CI did not actually enable UWP. Fix this and
the fallouts discovered after enabling it.

- GHA/windows: make sure to enable UWP in MSVC vcpkg UWP job.
  Use the CMake options and C flags already used for mingw-w64, but use
  `WINAPI_FAMILY_PC_APP` instead of the deprecated `WINAPI_FAMILY_APP`.
  (The former is not supported by mingw-w64, so leave it there as-is.)
  Follow-up to cb22cfca69bded45bf7f9c72c8e6764990490f11 #14077

- GHA/windows: by default the MSVC UWP job became 2x-3x slower than
  others after actually enabling UWP. Most of it is caused by
  CMake/MSBuild automatically building full APPX containers for each
  `.exe` target. This includes 21 CMake feature detections. Each
  detection app is built into a 15MB APPX project, with code signing,
  logos, etc. Example:
    https://github.com/curl/curl/actions/runs/12056968170/job/33620610958
  Disable this overhead for curl build targets via custom
  `CMAKE_VS_GLOBALS` options. I've found no way to apply them to feature
  detection targets, so those remain slow.

- cmake: automatically enable Unicode for UWP builds. It's required.
  Also stop enabling it manually in the existing CI job.

- tests: fix `getpid()` use for Windows UWP:
  ```
  tests\server\util.c(281,21): warning C4013: 'getpid' undefined; assuming extern returning int
  ```
  Ref: https://github.com/curl/curl/actions/runs/12061215311/job/33632904249#step:11:38

- src/tool_doswin: disable `GetLoadedModulePaths()` for UWP.
  mingw-w64 UWP was okay with this, but MS SDK headers are not.
  This makes `--dump-module-paths` return empty for UWP builds.
  ```
  src\tool_doswin.c(620,3): error C2065: 'MODULEENTRY32': undeclared identifier
  src\tool_doswin.c(626,11): warning C4013: 'CreateToolhelp32Snapshot' undefined; assuming extern returning int
  src\tool_doswin.c(626,36): error C2065: 'TH32CS_SNAPMODULE': undeclared identifier
  src\tool_doswin.c(632,7): warning C4013: 'Module32First' undefined; assuming extern returning int
  ```
  Ref: https://github.com/curl/curl/actions/runs/12055081933/job/33614629930#step:9:35

- examples: fix `websocket.c` to include `winsock2.h` before `windows.h`
  to make it build with MSVC UWP:
  ```
  include\curl\curl.h(143,16): error C2061: syntax error: identifier 'curl_socket_t'
  include\curl\curl.h(143,16): error C2059: syntax error: ';'
  include\curl\curl.h(417,52): error C2146: syntax error: missing ')' before identifier 'curlfd'
  include\curl\curl.h(417,38): error C2081: 'curl_socket_t': name in formal parameter list illegal
  ```
  Ref: https://github.com/curl/curl/actions/runs/12055317910/job/33615644427#step:14:126

- GHA/windows: silence linker warning with MSVC UWP builds:
  ```
  LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification
  ```
  Ref: https://github.com/curl/curl/actions/runs/12055696808/job/33616629610#step:11:38

- GHA/windows: set `/INCREMENTAL:NO` for all MSVC jobs to improve
  performance a little.

- cmake: show `UWP` platform flag.

Ref: #15652
Closes #15657

12 months agobuild: fix ECH to always enable HTTPS RR
Viktor Szakats [Tue, 26 Nov 2024 17:03:54 +0000 (18:03 +0100)] 
build: fix ECH to always enable HTTPS RR

The ECH feature cannot be built without HTTPS RR.

ECH automatically implied HTTPS RR in `./configure` but not in CMake,
winbuild, documentation.

Also update documentation and CI configs.

Follow-up to a362962b7289ec02b412890c9515657cf0ed50ac #11922
Closes #15648

12 months agotests: re-enable 2086, and 472, 1299, 1613 for Windows
Viktor Szakats [Tue, 26 Nov 2024 14:08:56 +0000 (15:08 +0100)] 
tests: re-enable 2086, and 472, 1299, 1613 for Windows

- GHA/windows: un-ignore tests 472 1299 1613.
  They were ignored for the mingw-w64 c-ares U job.
  They do run fine now:
  https://github.com/curl/curl/actions/runs/12032875421/job/33547724780?pr=15644

- globally re-enable test 2086.
  Comment says it only affected Windows.
  Seems to be running fine now. Example:
  Windows:
  https://github.com/curl/curl/actions/runs/12032875421/job/33547718309?pr=15644#step:13:3856
  Linux:
  https://github.com/curl/curl/actions/runs/12032875397/job/33545739712#step:41:3650

- update comments for disabled tests 1184, 1801.
  They affect all operating systems, likely all CIs.

  FAIL 1801: 'HTTP/2 upgrade with lying server' HTTP, HTTP/2
  https://github.com/curl/curl/actions/runs/12032362497/job/33544053001#step:14:4265
  FAIL 1184: 'HTTP 1.1 CONNECT with redirect and set -H user-agent' HTTP, HTTP CONNECT, HTTP proxy, proxytunnel
  https://github.com/curl/curl/actions/runs/12032362497/job/33544051415#step:14:5252

Closes #15644

12 months agotool_getpass: replace `getch()` call with `_getch()` on Windows
Viktor Szakats [Tue, 26 Nov 2024 12:03:49 +0000 (13:03 +0100)] 
tool_getpass: replace `getch()` call with `_getch()` on Windows

`getch()` is deprecated according to MSDN:
https://learn.microsoft.com/cpp/c-runtime-library/reference/getch
"The Microsoft-specific function name `getch` is a deprecated alias
for the `_getch` function."

Ref: https://learn.microsoft.com/cpp/c-runtime-library/reference/getch-getwch

Follow-up to 72edb22b8a0e1e62216b59a045147d1a863ad59b #15638
Closes #15642

12 months agoGHA/windows: enable ECH in vcpkg wolfSSL job
Tal Regev [Tue, 26 Nov 2024 16:39:35 +0000 (18:39 +0200)] 
GHA/windows: enable ECH in vcpkg wolfSSL job

Enable ECH feature on wolfSSL

Closes #15649

12 months agoGHA/windows: merge cmake/autotools steps
Viktor Szakats [Tue, 26 Nov 2024 12:22:08 +0000 (13:22 +0100)] 
GHA/windows: merge cmake/autotools steps

Merge cmake and autotools build steps for cygwin, msys2 and
cross-linux jobs.

Advantages:
- makes it easier to keep the two build tracks in sync.
- uses the same steps across jobs.
- avoids scrolling through greyed out steps.
- syncs steps with other workflows already merged like this.
- less code.

Also:
- stop ignoring WebSockets tests results for msys2/mingw-w64 cmake jobs,
  except for 2301 2302 that were also ignored for autotools. Syncing the
  two build methods.
- drop 'cmake' from step names where cmake was the only build tool.
  This was redundant as "CM" already indicates it in the job name.

Closes #15643

12 months agotool_getpass: restore UWP `getpass_r()`, fixup CI builds, fix UWP `-Wnull-dereference`
Viktor Szakats [Tue, 26 Nov 2024 02:17:53 +0000 (03:17 +0100)] 
tool_getpass: restore UWP `getpass_r()`, fixup CI builds, fix UWP `-Wnull-dereference`

- GHA/windows: switch mingw-w64 UWP CI job to use UCRT.
  `msvcr120_app` was missing `getch()` for example.
  Follow-up to f988842d85a06d7ad03764433b6dfee9febf0118 #15637
  This job tests compiling for UWP correctly, but the the resulting
  `curl.exe` still doesn't look like a correct UWP app, now exiting
  on startup with: `curl: error initializing curl library`.

- tool_getpass: restore `getch()` for UWP builds.
  Follow-up to f988842d85a06d7ad03764433b6dfee9febf0118 #15637

- schannel: silence `-Werror=null-dereference` warning in mingw-w64 UWP:
  ```
  lib/vtls/schannel_verify.c: In function 'Curl_verify_host':
  lib/vtls/schannel_verify.c:558:33: error: null pointer dereference [-Werror=null-dereference]
    558 |     for(i = 0; i < alt_name_info->cAltEntry; ++i) {
        |                    ~~~~~~~~~~~~~^~~~~~~~~~~
  lib/vtls/schannel_verify.c:559:50: error: null pointer dereference [-Werror=null-dereference]
    559 |       PCERT_ALT_NAME_ENTRY entry = &alt_name_info->rgAltEntry[i];
        |                                     ~~~~~~~~~~~~~^~~~~~~~~~~~
  ```
  Ref: https://github.com/curl/curl/actions/runs/12022656065/job/33515255397?pr=15638#step:19:27
  Follow-up to 9640a8ef6f0db21da2ee7864423aa28cc3cecce2 #15421

- GHA/windows: fix `find` command in MSVC job step.
  Follow-up to 5f9411f953f35ca84645b5a6824fb9fef20887ed #15380

- GHA/windows: drop unnecessary `windowsappcompat` lib from mingw-w64
  UWP job. Also drop related MSYS2 package.

- GHA/windows: cmake 3.31.0 still invokes `windres` with wrong options
  with mingw-w64 UPW. Update curl version in comment accordingly.

- GHA/windows: tidy up mingw-w64 UWP spec logic, limit it to gcc.

- GHA/windows: update comments on `curl.exe` UWP startup errors.

Closes #15638

12 months agotool_getpass: make local `getpass_r()` a dummy for UWP
renovate[bot] [Sat, 16 Nov 2024 22:40:22 +0000 (22:40 +0000)] 
tool_getpass: make local `getpass_r()` a dummy for UWP

The CRT call `getch()` isn't supported on Windows UWP. This function is
used to implement `getpass_r()` for reading a password from the console,
for platforms not supporting it natively. This patch makes this function
a dummy, so password entry from the command-line is no longer supported
for UWP apps. Though it probably did not work before this patch, due to:

CRT headers do declare `getch()`, but it's missing from the CRT DLL.

MSDN documents it as unsupported for UWP:
https://learn.microsoft.com/cpp/c-runtime-library/reference/getch
https://learn.microsoft.com/cpp/c-runtime-library/reference/getch-getwch

Same is true for the non-deprecated `_getch()` function.

After mingw-w64 synced its implib with `msvcr120_app.dll`, the CI job
`mingw, CM x86_64 schannel R uwp` broke with:
```
[16/16] Linking C executable src\curl.exe
FAILED: src/curl.exe
[...]
D:/a/_temp/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
  src/CMakeFiles/curl.dir/Unity/unity_0_c.c.obj:unity_0_c.c:(.text+0x4d05): undefined reference to `getch'
```
Ref: https://github.com/curl/curl/actions/runs/11873795410/job/33089008727?pr=15597#step:19:25

Also:
- GHA/windows: bump `msys2/setup-msys2` action to
  https://github.com/msys2/setup-msys2/commit/c52d1fa
  This triggered the build failure above.
  Closes #15597

Ref: https://sourceforge.net/p/mingw-w64/mingw-w64/ci/d408f51e5a3e9a4eb3739efea1fb2daf50dbb058/tree/mingw-w64-crt/def-include/crt-aliases.def.in?diff=9e27bb062a46d20aa9a372559956451d4565c22b

Closes #15637

12 months agomulti: fix callback for `CURLMOPT_TIMERFUNCTION` not being called again when...
Vladislavs Sokurenko [Fri, 22 Nov 2024 15:00:14 +0000 (17:00 +0200)] 
multi: fix callback for `CURLMOPT_TIMERFUNCTION` not being called again when...

Issue is reproducible for me if I have made request with multi handle,
then I make request that will take very long and then I make request
that should be fast again, however what happens it is that it seems
to think that timeout was not changed and it makes it not call initial
`CURLMOPT_TIMERFUNCTION`.

Closes #15627

12 months agortsp: check EOS in the RTSP receive and return an error code
Deng Jianfeng [Fri, 22 Nov 2024 08:59:19 +0000 (16:59 +0800)] 
rtsp: check EOS in the RTSP receive and return an error code

This helps the caller detect disconnection events.

Fixes #15624
Closes #15626

12 months agoGHA: source mbedTLS from official tarball
Viktor Szakats [Sun, 24 Nov 2024 14:52:38 +0000 (15:52 +0100)] 
GHA: source mbedTLS from official tarball

Instead of the Git repo tag which requires downloading the tip of
a dependency repository at the time of bumping version:
https://github.com/Mbed-TLS/mbedtls-framework

The official source tarball ships with this dependency, making
the CI builds reproducible.

Also: fold long download commands for other dependencies.

Closes #15632

12 months agoGHA: speed up 3 openssl/quictls builds 3x
Viktor Szakats [Sun, 24 Nov 2024 01:46:41 +0000 (02:46 +0100)] 
GHA: speed up 3 openssl/quictls builds 3x

Build in parallel first, then install with `-j1`. This makes the build
part 3x quicker, while avoiding parallellism issues at the install
phase.

```
                       before   after  after
                              1da198d   this
aws-lc:                 1m55s    ~40s
libressl:               1m16s  ~1m20s
openssl-tsan:           5m47s   3m43s  1m48s (clang)
openssl:                6m38s   4m49s  2m13s (quic)
quictls-no-deprecated:  2m28s   1m51s
quictls:               ~6m08s   4m16s  1m55s
wolfssl-all:            1m36s     52s
wolfssl-master:         1m34s     53s
wolfssl-opensslextra:     50s     32s
```

Follow-up to 1da198d18e495c08adb5691459da0b5fcfc7f160 #15622

Closes #15630

12 months agoGHA: disable building tests, apps, docs in dependencies
Viktor Szakats [Thu, 21 Nov 2024 18:22:43 +0000 (19:22 +0100)] 
GHA: disable building tests, apps, docs in dependencies

Also:
- for LibreSSL download the official source tarball instead of
  using the tagged Git repo and running the build script which
  merged the OpenBSD libressl repo into it. The latter method
  was also broken at the time of this commit.

Build times:
```
                       before   after
aws-lc:                 1m55s    ~40s
libressl:               1m16s  ~1m20s
openssl-tsan:           5m47s   3m43s
openssl:                6m38s   4m49s
quictls-no-deprecated:  2m28s   1m51s
quictls:               ~6m08s   4m16s
wolfssl-all:            1m36s     52s
wolfssl-master:         1m34s     53s
wolfssl-opensslextra:     50s     32s
```

LibreSSL build options are unchanged, but by using the tarball now
instead of two repos and a generator script, it also should be faster,
and more stable.

Closes #15622

12 months agocmake: include `wolfssl/options.h` first
Viktor Szakats [Thu, 21 Nov 2024 19:07:21 +0000 (20:07 +0100)] 
cmake: include `wolfssl/options.h` first

It was missing while detecting `wolfSSL_DES_ecb_encrypt`,
`wolfSSL_BIO_new` and `wolfSSL_BIO_set_shutdown`.

We have not seen it causing issues in stable wolfSSL releases as of
v5.7.4, until a recent commit in wolfSSL master, which broke detections:
```
curl/CMakeFiles/CMakeScratch//CheckSymbolExists.c:8:19: error: ‘wolfSSL_BIO_new’ undeclared (first use in this function); did you mean ‘wolfSSL_CTX_new’?
curl/CMakeFiles/CMakeScratch//CheckSymbolExists.c:8:19: error: ‘wolfSSL_BIO_set_shutdown’ undeclared (first use in this function); did you mean ‘wolfSSL_set_shutdown’?
```
This in turn disabled `HTTPS-proxy` and failed related pytests:
https://github.com/curl/curl/actions/runs/11953800545/job/33324250039?pr=15620

wolfSSL source diff causing the regression:
https://github.com/wolfSSL/wolfSSL/compare/be70bea687526a51e3d751d425bbaaa412b451ee..c06f65a8ace311667d9b9d7fd320b6b25f8b1bf8

The wolfSSL build says:
```
Note: Make sure your application includes "wolfssl/options.h" before any other wolfSSL headers.
      You can define "WOLFSSL_USE_OPTIONS_H" in your application to include this automatically.
```

This patch makes sure to follow this rule across the curl codebase.

Also:
- include `wolfssl/options.h` first in `lib/vtls/wolfssl.c`.
  It was preceded by `wolfssl/version.h`, which did not cause issues.
  Background for the pre-existing include order:
  Ref: deb9462ff2de8e955c67ed441f5f48619a31198d #3903
  Ref: https://curl.se/mail/lib-2015-04/0069.html

Bug: https://github.com/curl/curl/pull/15620#issuecomment-2491872463
Follow-up to d68a121266671c806b5065c2fdce52d292bf7830 #14064

Closes #15623

12 months agoschannel: remove TLS 1.3 ciphersuite-list support
Wyatt O'Day [Thu, 21 Nov 2024 14:08:31 +0000 (09:08 -0500)] 
schannel: remove TLS 1.3 ciphersuite-list support

Drop TLS 1.3 ciphersuite-list support from SChannel because of the
number of bugs in SChannel itself (a closed-source TLS library). TLS 1.3
with SChannel still works, however the ciphersuite negotiation is left
entirely to SChannel.

Bug: https://hackerone.com/reports/2792484
Reported-by: newfunction on hackerone
Fixes https://github.com/curl/curl/issues/15482
Closes https://github.com/curl/curl/pull/15621