Commit graph

36169 commits

Author SHA1 Message Date
Viktor Szakats
67de9924eb
GHA/linux: enable libidn2 and libssh in asan job
Closes #18697
2025-09-23 13:02:52 +02:00
Viktor Szakats
b326293619
GHA/linux: fix address sanitizer error output
Same issue as seen earlier in the tsan job. Fix it the same way, by
switching to cmake to avoid autotools' libtool confusing the analyzer.
Ref: 2a46df31fd #18274

Configuration remains identical. I removed libssh2 from the installed
packages, because it was unused before, but cmake enabled it by default
and libssh2 has memory leaks:
Ref: https://github.com/curl/curl/actions/runs/17941312820/job/51018425159

Fixing:
```
/usr/bin/llvm-symbolizer-18: /home/runner/work/curl/curl/bld/lib/.libs/libcurl.so.4: no version information available (required by /usr/bin/llvm-symbolizer-18)
/usr/bin/llvm-symbolizer-18: symbol lookup error: /home/runner/work/curl/curl/bld/lib/.libs/libcurl.so.4: undefined symbol: __asan_option_detect_stack_use_after_return
==33900==WARNING: Can't read from symbolizer at fd 3
[..]
==33900==WARNING: Can't write to symbolizer at fd 6
==33900==WARNING: Failed to use and restart external symbolizer
```
Ref: https://github.com/curl/curl/actions/runs/17939949191/job/51013953675?pr=18693

Cherry-picked from #18693
Closes #18696
2025-09-23 12:39:48 +02:00
Viktor Szakats
71fc11e6bb
GHA/codeql: build units on Linux
Closes #18695
2025-09-23 11:48:02 +02:00
Viktor Szakats
051839eb8f
tidy-up: URLs
Closes #18689
2025-09-23 00:34:46 +02:00
Viktor Szakats
f833d5d1fb
cmake: use modern alternatives for get_filename_component()
- use `cmake_path()` to query filenames, with CMake 3.20 or upper.
  https://cmake.org/cmake/help/v4.1/command/cmake_path.html#query

- use `cmake_host_system_information()` to query the registry,
  with CMake 3.24 or upper.
  https://cmake.org/cmake/help/v4.1/command/cmake_host_system_information.html#query-windows-registry
  Replacing the undocumented method.

- also quote the value passed to `get_filename_component()` where
  missing. (Could not cause an actual issue as used in the code.)

Closes #18688
2025-09-22 20:01:08 +02:00
Viktor Szakats
d75785c7de
GHA: enable more options in static analyzer jobs
This is an effort to pass more code through clang-tidt and scan-build
static analyzers. Following CodeQL Linux jobs.

GHA/codeql:
- also build with libssh.
- disable verbose output in build steps.

GHA/linux:
- enable more build options for the clang-tidy and scan-build jobs:
  libidn2, nghttp2, ldap, kerberos, rtmp, gnutls, gsasl, rustls,
  mbedtls, wolfssl
  Use Linuxbrew where necessary.
- also enable ECH, gssapi in the scan-build job.
- fix 'scanbuild' to be 'scan-build' in the job name.

GHA/macos:
- build with Rustls in the clang-tidy job.
- add a new clang-tidy job to test HTTP/3 (with openssl + ngtcp2).
- build with libssh in one of the clang-tidy jobs.
- build with LibreSSL in the MultiSSL clang-tidy job.
- build with heimdal and kerberos in the clang-tidy jobs respectively.
- build with OpenLDAP in one clang-tidy job.
- add support for `skipall`, `skiprun` job options, and use it.

Closes #18660
2025-09-22 13:10:51 +02:00
Viktor Szakats
cd20f7b653
libssh: drop two unused assigments
Reported in macOS clang-tidy v21.1.1 build, after enabling libssh in it:
```
lib/vssh/libssh.c
lib/vssh/libssh.c:1342:9: error: Value stored to 'to_t' is never read [clang-analyzer-deadcode.DeadStores,-warnings-as-errors]
 1342 |         to_t = STRE_OK;
      |         ^
lib/vssh/libssh.c:1342:9: note: Value stored to 'to_t' is never read
lib/vssh/libssh.c:1349:9: error: Value stored to 'from_t' is never read [clang-analyzer-deadcode.DeadStores,-warnings-as-errors]
 1349 |         from_t = STRE_OK;
      |         ^
lib/vssh/libssh.c:1349:9: note: Value stored to 'from_t' is never read
2 warnings generated.
```
Ref: https://github.com/curl/curl/actions/runs/17909917954/job/50918955923?pr=18660#step:11:182

Cherry-picked from #18660
Closes #18684
2025-09-22 13:02:10 +02:00
Viktor Szakats
330129c836
GHA/linux: install zlib in all jobs by default
Cherry-picked from #18660
Closes #18672
2025-09-22 10:11:31 +02:00
Viktor Szakats
7f5ff8f276
autotools: capitalize 'Rustls' in the log output
To match the rest of the codebase.

Follow-up to 548d8a8421
Cherry-picked from #18660
Closes #18671
2025-09-22 10:11:31 +02:00
Viktor Szakats
aa9fa4d68e
rustls: fix clang-tidy warning
Seen with v21.1.1, non-debug-enabled build:
```
lib/vtls/rustls.c:415:23: error: File position of the stream might be 'indeterminate'
after a failed operation. Can cause undefined behavior [clang-analyzer-unix.Stream,-warnings-as-errors]
  415 |     const size_t rr = fread(buf, 1, sizeof(buf), f);
      |                       ^
```
Ref: https://github.com/curl/curl/actions/runs/17898248031/job/50887746633?pr=18660#step:11:174

Cherry-picked from #18660
Closes #18670
2025-09-22 10:11:31 +02:00
Viktor Szakats
c9eff26c17
tool_doswin: fix to use curl socket functions
Replace `WSASocketW()` with `CURL_SOCKET()`. Also replace a call
to `socketclose()` with `sclose()`. According to a comment,
`socketclose()` was chosen to silence test 1498 (and 2300) reporting
`MEMORY FAILURE`. These reports were accurate, and were caused by
calling `WSASocketW()` instead of `socket()` (now `CURL_SOCKET()`).

This also fixes the curl `sclose()` call on an error branch, which is
now correctly paired with a curl socket open. The mismatched open/close
calls caused an issue in TrackMemory-enabled (aka `CURLDEBUG`) builds.

Docs confirm that `socket()` is defaulting to overlapped I/O, matching
the replaced `WSASocketW()` call:
https://learn.microsoft.com/windows/win32/api/winsock2/nf-winsock2-socket#remarks

Also:
- checksrc: ban `WSASocket*()` functions.
- report `SOCKERRNO` instead of `GetLastError()` for socket calls,
  to match the rest of the codebase.

Follow-up to 9a2663322c #17572

Closes #18633
2025-09-22 10:11:30 +02:00
Daniel Stenberg
1f0f0bdb19
managen: strict protocol check
- protocols MUST match one in the accept-list
- protocols are typically all uppercase
- drop All
- use SCP and SFTP instead of SSH
- add Protocols: to some options previously missing one

Closes #18675
2025-09-22 09:06:00 +02:00
Daniel Stenberg
c4f9977c66
tftp: pin the first used address
Store the used remote address on the first receive call and then make
sure that it remains the same address on subsequent calls to reduce the
risk of tampering. Doesn't make the transfer secure because it is still
unauthenticated and clear text.

Reported in Joshua's sarif data

Closes #18658
2025-09-21 23:01:01 +02:00
Daniel Stenberg
a72e1552f2
telnet: refuse IAC codes in content
Ban the use of IAC (0xff) in telnet options set by the application. They
need to be escaped when sent but I can't see any valid reason for an
application to send them.

Of course, an application sending such data basically ask for trouble.

Reported in Joshua's sarif data

Closes #18657
2025-09-21 23:00:02 +02:00
Viktor Szakats
989a274e45
autotools: add support for libgsasl auto-detection via pkg-config
Enable with `--with-gsasl`, as before.

Cherry-picked from #18660
Closes #18669
2025-09-21 21:20:32 +02:00
Viktor Szakats
374c23c617
autotools: fix duplicate UNIX and BSD flags in buildinfo.txt
Follow-up to 2a292c3984 #15975

Closes #18667
2025-09-21 18:51:11 +02:00
Viktor Szakats
e21cc7844d
autotools: fix silly mistake in clang detection for buildinfo.txt
Follow-up to 0513f9f878 #18645

Closes #18666
2025-09-21 18:51:10 +02:00
Viktor Szakats
e5d9c871f0
tidy-up: assortment of small fixes
- examples/headerapi: fix wrong cast.
- curl_ngtcp2: delete stray character from error message.
- rustls: fix inline variable declaration.
- sendf: drop redundant `int` cast.
- libtest/cli_ws_data: drop cast with mismatched signedness.

Cherry-picked from #18343

Closes #18664
2025-09-21 16:50:14 +02:00
Viktor Szakats
06d00e3879
cmake: clang detection tidy-ups
Follow-up to 0513f9f878 #18645
Follow-up to fe5225b5ea #18209

Closes #18659
2025-09-21 15:26:49 +02:00
Viktor Szakats
c23d7e7a98
GHA/codeql: enable ECH and HTTPS-RR
Switch to Linuxbrew c-ares to hit the minimum version.
(Ubuntu offers 1.27.0, HTTPS-RR requires 1.28.0.)

Closes #18661
2025-09-21 14:36:25 +02:00
Daniel Stenberg
d57e7cf20d
ws: reject curl_ws_recv called with NULL buffer with a buflen
Arguably this is just a bad application.

Reported in Joshua's sarif data

Closes #18656
2025-09-21 11:15:19 +02:00
Daniel Stenberg
0c53a5e5dc
openldap: check ldap_get_option() return codes
Do not just assume that they always work.

Reported in Joshua's sarif data

Closes #18653
2025-09-21 09:50:23 +02:00
Daniel Stenberg
ab3a293fd0
libssh: fix range parsing error handling mistake
The range-parsing returned CURLE_RANGE_ERROR directly on one error
instead of calling myssh_to_ERROR() like it should and like it does for
all other errors.

Reported in Joshua's sarif data

Closes #18652
2025-09-21 09:49:38 +02:00
Daniel Stenberg
05930f304b
rustls: use %zu for size_t in failf() format string
Reported in Joshua's sarif data

Closes #18651
2025-09-21 09:48:47 +02:00
Daniel Stenberg
a9baf82a9b
ftp: fix ftp_do_more returning with *completep unset
Specifically, when ftpc->wait_data_conn was true and
Curl_conn_connect(...) returned with serv_conned == false the code
called ftp_check_ctrl_on_data_wait and returned without setting
*completep.

Now set it to 0 at function start to avoid this happening again.

Reported in Joshua's sarif data

Closes #18650
2025-09-21 09:47:01 +02:00
Daniel Stenberg
3b22ed999e
telnet: return error on crazy TTYPE or XDISPLOC lengths
Also use the packet size msnprintf() stores instead of calculating it
separately.

Reported in Joshua's sarif data

Closes #18648
2025-09-21 09:45:29 +02:00
Daniel Stenberg
3d8e15650c
vtls_int.h: clarify data_pending
Suggested-by: Joseph Birr-Pixton

Closes #18644
2025-09-21 09:43:28 +02:00
Daniel Stenberg
fd61ed062b
ws: clarify an error message
Instead of:

 "[WS] frame length longer than 64 signed not supported"

Use:

 "[WS] frame length longer than 63 bit not supported"

Closes #18654
2025-09-21 09:41:17 +02:00
Daniel Stenberg
4e8dfe2093
RELEASE-NOTES: spellcheck! 2025-09-21 09:41:17 +02:00
Viktor Szakats
0513f9f878
build: show llvm/clang in platform flags and buildinfo.txt
Show these flags:
- `LLVM-CLANG` for mainline llvm/clang.
- `APPLE-CLANG` for Apple clang.
- `CLANG-CL` for clang-cl. (cmake only)

Also:
- GHA/linux: fix a job to build with clang, to match its descriptions.

Closes #18645
2025-09-21 01:59:56 +02:00
Daniel Stenberg
4189c2c0fe
RELEASE-NOTES: synced 2025-09-21 00:05:55 +02:00
Daniel Stenberg
3dad0cfd77
write-out: make %header{} able to output *all* occurances of a header
By appending `:all:[separator]` to the header name. The `[separator]` string
is output between each header value if there are more than one to output.

Test 764 and 765 verify

Idea-by: kapsiR on github
Ref: #18449
Closes #18491
2025-09-21 00:00:29 +02:00
Daniel Stenberg
5ab120bc4e
krb5: drop support for Kerberos FTP
It was accidentally broken in commit 0f4c439fc7, shipped since
8.8.0 (May 2024) and yet not a single person has noticed or reported,
indicating that we might as well drop support for FTP Kerberos.

Krb5 support was added in 54967d2a3a (July 2007), and we have
been carrying the extra license information around since then for this
code. This commit removes the last traces of that code and thus we can
remove the extra copyright notices along with it.

Reported-by: Joshua Rogers
Closes #18577
2025-09-20 23:58:28 +02:00
Daniel Stenberg
bb46d42407
openssl: make the asn1_object_dump name null terminated
In case the buffer is too small.

Reported in Joshua's sarif data

Closes #18647
2025-09-20 23:12:15 +02:00
Daniel Stenberg
cf3b9657bc
libssh2: up the minimum requirement to 1.9.0
Released on June 20 2019
2025-09-20 22:39:07 +02:00
Daniel Stenberg
50968d0378
httpsrr: free old pointers when storing new
In case we get "funny" input and the same field is provided several
times, free the old pointer before stored a new memdup.

Reported in Joshua's sarif data

Closes #18631
2025-09-20 22:38:15 +02:00
Daniel Stenberg
979366a625
openldap: improve check for receiving blank data
It can't access the first byte either unless it has length.

Followup to 232d5a2ed9

Closes #18632
2025-09-20 22:37:10 +02:00
Daniel Stenberg
66d6075af9
tftp: return error when sendto() fails
The code just called failf() and then continued without returning error.

Reported in Joshua's sarif data

Closes #18643
2025-09-20 22:35:12 +02:00
Daniel Stenberg
e2d3b83244
libssh: return out of memory correctly if aprintf fails
The code called set sshc->nextstate and returned SSH_OK without setting
sshc->actualcode to an error code.

Reported in Joshua's sarif data

Closes #18637
2025-09-20 17:49:07 +02:00
Daniel Stenberg
d27d9c7ef1
cf-socket: use the right byte order for ports in bindlocal
Reported in Joshua's sarif data

Closes #18641
2025-09-20 17:34:18 +02:00
Daniel Stenberg
94eec0a788
schannel: assign result before using it
curl_easy_strerror(result) was called *before* result was assigned.

Reported in Joshua's sarif data

Closes #18642
2025-09-20 17:30:59 +02:00
Daniel Stenberg
82eeda1041
CURLOPT_HEADER/WRITEFUNCTION.md: drop '* size' since size is always 1
Closes #18640
2025-09-20 17:27:17 +02:00
Daniel Stenberg
df8244c30f
libssh: error on bad chown number and store the value
To avoid continuing with an unintended zero uid. Also actually use the
value, which was omitted before!

Reported in Joshua's sarif data

Closes #18639
2025-09-20 17:26:38 +02:00
Daniel Stenberg
ca8ec6e033
tftp: handle tftp_multi_statemach() return code
Previously just ignored.

Reported in Joshua's sarif data

Closes #18638
2025-09-20 17:25:35 +02:00
Daniel Stenberg
277ebca610
ftp: fix port number range loop for PORT commands
If the last port to test is 65535, the loop would previously wrongly
wrap the counter and start over at 0, which was not intended.

Reported in Joshua's sarif data

Closes #18636
2025-09-20 17:24:44 +02:00
Daniel Stenberg
2a5da01e42
socks: make Curl_blockread_all return CURLcode
Reported in Joshua's sarif data

Closes #18635
2025-09-20 15:15:13 +02:00
Viktor Szakats
ca75476a5c
GHA/codeql: drop winbuild references [ci skip]
Follow-up to 8d004781a5 #18040
2025-09-20 15:07:29 +02:00
Viktor Szakats
bf7375ecc5
build: avoid overriding system symbols for socket functions
Before this patch `accept4()`, `socket()`, `socketpair()`, `send()` and
`recv()` system symbols were remapped via macros, using the same name,
to local curl debug wrappers. This patch replaces these overrides by
introducing curl-namespaced macros that map either to the system symbols
or to their curl debug wrappers in `CURLDEBUG` (TrackMemory) builds.

This follows a patch that implemented the same for `accept()`.

The old method required tricks to make these redefines work in unity
builds, and avoid them interfering with system headers. These tricks
did not work for system symbols implemented as macros.

The new method allows to setup these mappings once, without interfering
with system headers, upstream macros, or unity builds. It makes builds
more robust.

Also:
- checksrc: ban all mapped functions.
- docs/examples: tidy up checksrc rules.

Follow-up to 9863599d69 #18502
Follow-up to 3bb5e58c10 #17827

Closes #18503
2025-09-20 13:44:59 +02:00
Daniel Stenberg
2fe95cb0e3
rustls: typecast variable for safer trace output
This is a variadic function call with a mismatched argument type; on
platforms where uintptr_t and size_t differ, this invokes undefined
behavior.

Reported in Joshua's sarif data

Closes #18628
2025-09-20 12:07:10 +02:00
Daniel Stenberg
0209e087c6
tool_cb_hdr: size is always 1
- add comment in the header that the argument 'size' is always 1,
  as guaranteed by the libcurl API

- then fix the call to fwrite() to avoid using "size, etag_length" which
  would be wrong if size was something else than 1, and use a fixed
  number there instead.

Reported in Joshua's sarif data

Closes #18630
2025-09-20 12:06:27 +02:00