Commit graph

37743 commits

Author SHA1 Message Date
Viktor Szakats
5bdbad87c5
curlx: drop unused curlx_saferealloc()
Unused since 67ae101666 #19949

Closes #20504
2026-02-03 15:13:37 +01:00
Viktor Szakats
31a4f415af
build: tidy up and dedupe strdup functions
- de-dupe lib/src strdup/memdup functions into curlx.
- introduce `CURLX_STRDUP_LOW()` for mapping `strdup()`, and to do it at
  one place within the code, in `curl_setup.h`.
- tests/server: use `curlx_strdup()`. (Also to fix building without
  a system `strdup()`.)
- curlx/curlx.h: shorten and tidy up.
- adjust Windows build path to not need `HAVE_STRDUP`.
- build: stop detecting `HAVE_STRDUP` on Windows.

Closes #20497
2026-02-03 14:02:30 +01:00
Viktor Szakats
e39650c984
curl_setup.h: simplify curl memory macro mappings
Full argument listing is redundant for `curl`-prefixed internal macros.

Closes #20499
2026-02-03 10:54:42 +01:00
Viktor Szakats
d442be2ce3
typos: silence false positives found in C code
Closes #20500
2026-02-03 00:59:41 +01:00
Daniel Stenberg
76c4c8d411
RELEASE-NOTES: synced 2026-02-02 23:44:30 +01:00
Stefan Eissing
ffdbc04c7b
hostip.c: fix leak of addrinfo
When creating a dns entry, the addrinfo is passed into the entry on
success and needed deallocation by the caller on failure.

Change the signature to have Curl_dnscache_mk_entry() *always* take
ownership of the addrinfo, even on failure. Change parameter to address
of pointer so that call always clears it.

This makes the handling of failures to Curl_dnscache_mk_entry() simpler.

Fixes #20465
Closes #20468
2026-02-02 23:29:45 +01:00
Viktor Szakats
a84b041281
build: tidy up curl-specific fstat calls and stat struct type
To avoid redefining the `fstat` system symbol, and to clarify
`struct_stat` is a curl symbol.

- introduce `curlx_fstat()` macro and use it.
- rename `struct_stat` to `curl_struct_stat`.

Also:
- tests: replace direct `curlx_win32_stat()` call with `curlx_stat()`.
- checksrc: disallow direct `_fstati64` and `fstat()` calls, except in
  examples.

Closes #20496
2026-02-02 18:57:13 +01:00
Viktor Szakats
9630593650
build: use more const
Mostly with `char *` types.

Also:
- mime, x509asn1, tool_operate, lib3207: drop redundant casts.
- examples/smooth-gtk-thread: add missing variable declaration.
- reduce variable scopes.
- tests/server: move `data_to_hex()` to its only user: `sws`.

Closes #20489
2026-02-02 12:32:49 +01:00
Viktor Szakats
66bb641331
ftp: drop single-caller local verbose function
Closes #20495
2026-02-02 12:28:13 +01:00
Viktor Szakats
4728efe082
ftp: replace a curlx_free() with curlx_dyn_free()
On an error path.

Follow-up to f4beef524a #12638

Closes #20494
2026-02-02 12:28:13 +01:00
Viktor Szakats
9d04582d8c
test1604: avoid dynamic allocations
Closes #20493
2026-02-02 12:28:13 +01:00
Viktor Szakats
d8e3376c18
test1304: drop CURL_UNCONST()
Closes #20492
2026-02-02 12:28:13 +01:00
Viktor Szakats
4f1646ef8a
cmake: skip binutils ld hack if zlib/openssl target is not IMPORTED
The binutils ld hack requires reading the targets' `LOCATION` property.
This property exists in `IMPORTED` targets. `ZLIB::ZLIB` and
`OpenSSL::Crypto` are normally `IMPORTED` targets defined by CMake's
built-in Find modules. However, in some cases (e.g. in "superbuilds"),
they may be regular targets, defined manually, without a `LOCATION`
property. To avoid a CMake warning in such case, verify if the target is
`IMPORTED` before reading this property.

This also mean that in such case the binutils/ld/gcc hack is not
enabled, and libcurl may fail linking in static mode.

https://cmake.org/cmake/help/v4.2/prop_tgt/IMPORTED.html
https://cmake.org/cmake/help/v4.2/prop_tgt/LOCATION.html

Reported-by: Tomáš Malý
Fixes #20419
Follow-up to 3e841630ec #20427
Follow-up to 16f073ef49 #16973

Closes #20486
2026-02-02 12:28:12 +01:00
Viktor Szakats
96fa42c7c0
build: tidy up local lseek() mappings
- stop redefining system symbol `lseek`, by introducing `curl_lseek()`.
- handle AmigaOS quirk within the macro mapping.
- add missing parenthesis to `LSEEK_ERROR` values.
- tool_util: use curl `lseek` macros in `tool_ftruncate64()`.
- move `LSEEK_ERROR` to right-hand side of if expressions.
- checksrc: disallow direct uses of `_lseeki64`, `llseek`, `lseek`.

Closes #20488
2026-02-01 17:29:39 +01:00
dependabot[bot]
47734f3244
GHA: bump GHA and pip dependencies
- update `actions/checkout` from 6.0.1 to 6.0.2
- update `ruff` from 0.14.11 to 0.14.14
- update `cryptography` from 46.0.3 to 46.0.4
- update `psutil` from 7.2.1 to 7.2.2
- update `websockets` from 15.0.1 to 16.0

Closes #20490
Closes #20491
2026-02-01 16:40:37 +01:00
Viktor Szakats
3003c32cb2
tidy-up: miscellaneous
- INSTALL-CMAKE.md: add missing periods, text fixes.
- md4, md5: sync variables names.
- curl_trc: sync an argument type.
- docs/examples: sync debug/trace function copies, constify, tidy-ups.
- replace commented code with `#if 0`.
- drop redundant parenthesis (macro values, `return`, around single
  variables, function calls).
- fix indentation, apply clang-format in places.

Closes #20481
2026-02-01 00:54:23 +01:00
Jay Satiro
ca5efd02b6 CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md: fix available protocols
Bug: https://curl.se/mail/lib-2026-01/0033.html
Reported-by: Tenant HellTower (Negar)
2026-01-31 14:37:29 -05:00
Viktor Szakats
9c3fcb8a32
vtls: dedupe common on-session-reuse logic
Closes #20475
2026-01-30 13:27:03 +01:00
Viktor Szakats
97a294688f
ssh: dedupe state change function
Closes #20473
2026-01-30 13:27:03 +01:00
Viktor Szakats
1acf0c45f4
cmake: improve setting up runtests in Windows cross-builds
Closes #20479
2026-01-30 00:34:25 +01:00
Viktor Szakats
b619952b82
GHA/windows: fix typo in test number [ci skip]
Follow-up to 3ae234b2a3 #20462
2026-01-30 00:24:21 +01:00
Viktor Szakats
154dff6acc
tests/server/sockfilt: avoid possible endless loop on Windows
Seen to happen when run under WINE v10.0 on macOS.
```
$ CURL_TEST_EXE_EXT_SRV=.exe CURL_TEST_EXE_EXT_TOOL=.exe \
CURL_TEST_EXE_RUNNER=wine TFLAGS='951 -t' ninja tests
[...]
16:02:18.607002 [select_ws_wait_thread] PeekNamedPipe error: (0x00000032) - Request not supported.
[...endless repeat...]
```

Closes #20478
2026-01-29 23:25:36 +01:00
Viktor Szakats
373e89a021
tests/server: tidy-up error messages (Windows)
- show error description on `PeekNamedPipe()` error.
- show `GetLastError()` instead of socket error on non-socket failures
  in the window handler.
- include full hex `GetLastError()` numbers in error messages, syncing
  with Schannel code.
- drop internal `win32_perror()` function, in favor of direct
  `curlx_*strerror()` calls.

Closes #20477
2026-01-29 22:53:23 +01:00
Viktor Szakats
4d0c3b690e
tool_help.h: drop redundant U suffix from literals
Also:
- update the generator script accordingly.
- convert lowercase `u` suffix to uppercase to match rest of code.

Closes #20476
2026-01-29 22:53:22 +01:00
Viktor Szakats
c2d7bfa992
http2: dedupe nghttp2 verbose frame print function
Closes #20472
2026-01-29 19:22:00 +01:00
Viktor Szakats
0f5006f50d
md4, md5: replace custom types with uint32_t
Closes #20469
2026-01-29 15:01:16 +01:00
Viktor Szakats
ea044c5e65
setup-os400.h: drop no longer used custom type u_int32_t
Unused since bb55293313.

Closes #20470
2026-01-29 14:58:03 +01:00
Viktor Szakats
f95c79a988
send: drop CURL_UNCONST() from buffer argument on most platforms
Keep it on platforms requiring a non-const buffer. These are AmigaOS and
OS400.

Also:
- replace `SEND_QUAL_ARG2` with boolean macro `SEND_NONCONST_ARG2`.

Closes #20463
2026-01-29 03:42:09 +01:00
Viktor Szakats
d60f1006b0
GHA/macos: merge an autotools job into a cmake one, drop an iOS job
Merging the two macOS jobs saves 4-5 minutes. The dropped iOS Ninja job
saves 0.5-1 minute. (Keep the two slow iOS jobs to maintain variation.)

Number of Apple jobs is 32 after this patch.

Also:
- skip building tests and example in iOS autotools to save 30-40s.

Closes #20467
2026-01-29 03:10:21 +01:00
Dan Fandrich
3509a41494 docs: document the need for a 64-bit type and stdint.h
These are requirements above and above C89.

Ref: #20406

Closes #20384
2026-01-28 08:45:56 -08:00
Viktor Szakats
3ae234b2a3
GHA/windows: mark test 3001 flaky in native Windows jobs
It has been happening for a long time.

Example:
```
test 3001...[HTTPS localhost, last subject alt name matches, CN does not match]

 3001: protocol FAILED!
 There was no content at all in the file log/7/server.input.
 Server glitch? Total curl failure? Returned: 56
== Contents of files in the log/7/ directory after test 3001
=== Start of file commands.log
 ../src/curl.exe -q --output log/7/curl3001.out  --include --trace-ascii log/7/trace3001 --trace-time -4 --cacert ./certs/test-ca.crt https://localhost:64259/3001 > log/7/stdout3001 2> log/7/stderr3001
=== End of file commands.log
=== Start of file http_server.log
 13:57:47.951283 Running HTTP IPv4 version on port 64256
=== End of file http_server.log
=== Start of file https_stunnel.log
 2026.01.28 13:57:48 LOG5[ui]: stunnel 5.76 on x64-pc-mingw32-gnu platform
 2026.01.28 13:57:48 LOG5[ui]: Compiled/running with OpenSSL 3.5.4 30 Sep 2025
 [...]
 2026.01.28 13:57:49 LOG5[0]: Service [curltest] accepted connection from 127.0.0.1:64281
 2026.01.28 13:57:51 LOG3[0]: s_connect: connect 127.0.0.1:64256: Connection refused (WSAECONNREFUSED) (10061)
 2026.01.28 13:57:51 LOG3[0]: No more addresses to connect
 2026.01.28 13:57:51 LOG5[0]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
=== End of file https_stunnel.log
=== Start of file server.cmd
 Testnum 3001
=== End of file server.cmd
=== Start of file stderr3001
 curl: (56) Recv failure: Connection was reset
=== End of file stderr3001
[...]
RUN: Unknown server on our https port: 64259 (56)
```

Ref: https://github.com/curl/curl/actions/runs/21440845836/job/61743268798?pr=20461

Closes #20462
2026-01-28 15:47:36 +01:00
Viktor Szakats
41880875ad
tests/server: drop stray casts from swrite/sread arguments
Closes #20461
2026-01-28 15:09:52 +01:00
Viktor Szakats
2e5cc08d25
tests/server: replace 4 remaining send() calls with swrite()
They were masked by `()`, which was also not necessary anymore.

Follow-up to 483f4291fb #20459
Follow-up to a585cc35e5 #20097
Follow-up to bf7375ecc5 #18503

Closes #20460
2026-01-28 15:09:51 +01:00
Viktor Szakats
483f4291fb
build: replace send/recv with swrite/sread where missing
Also:
- checksrc: ban `send` and `recv`, as documented in `CODE_STYLE.md`.

Follow-up to 9a2663322c #17572
Ref: a585cc35e5 #20097
Ref: #20441

Closes #20459
2026-01-28 14:39:22 +01:00
Viktor Szakats
feb52be197
build: assume stdint.h
curl requires `stdint.h` from C99, and no longer builds without it since
v8.18.0 (after dropping VS2008 support). Assume it's available, drop
feature checks.

Also:
- drop duplicate `stdint.h` includes.
- introduce internal `HAVE_UINTPTR_T`, enabled by default.
- OS400: disable `HAVE_UINTPTR_T`.
- build: keep cmake pre-fill and `cmp-config.pl` exception because cmake
  and autotools both detect `stdint.h` implicitly.

Co-authored-by: Dan Fandrich
Ref: #20405
Ref: #20384
Follow-up to 2e1a045d89 #17931

Closes #20406
2026-01-28 12:05:20 +01:00
Stefan Eissing
f062b4b903
pytest: remove 03_02
The test for restarting the server during ongoing transfers does not
work reliably for HTTP/3. This seems due to the nature of UDP/QUIC where
the client may learn about a closed connection at any time, not only
when starting a new request.

Remove the test.

Closes #20458
2026-01-28 11:39:02 +01:00
Christian Schmitz
e788d9d2c7
imap: fix custom listing
Add test 1847 and 1848.

Fixes #20356
Closes #20360
2026-01-28 11:37:26 +01:00
Stefan Eissing
cf4164fa8d
vquic: handle SOCKEMSGSIZE correctly
Report UDP packets with SOCKEMSGSIZE as being "sent" to progress
the send buffer properly on PMTUD probes.

Reported-by: Daniil Gentili
Fixes #20440
Closes #20448
2026-01-28 11:23:10 +01:00
Itay Bookstein
05367694ec
cf-socket: use SOCK_CLOEXEC in socket_open when available
To close the possible race between socket() and fcntl(), we use
SOCK_CLOEXEC instead of fcntl() when it is available.

Closes #20442
2026-01-28 09:41:48 +01:00
Stefan Eissing
0f042efcb1
h2+h3: align stream close handling
For HTTP/2, add error code description to close failures.

For HTTP/3, add special handling like in HTTP/2 when streams
have been rejected or an error comes during the response body
and we are not interested in the body.

Closes #20207
2026-01-28 09:39:30 +01:00
renovate[bot]
3b1c2a1510
GHA: update openssl/openssl to v3.6.1
Closes #20449
2026-01-28 08:08:07 +01:00
Viktor Szakats
2f7d37f54a
windows: USE_WINSOCK to guard winsock2 code (where missing)
Replacing `_WIN32`.

Also:
- tool_doswin: guard possibly non-portable socket code with
  `USE_WINSOCK`. The socket is cast to `HANDLE` and passed to
  win32 API `SetStdHandle(STD_INPUT_HANDLE, ...)`.
- lib/setup-win32.h: move `#undef`s before their `#define` pair.

Closes #20455
2026-01-28 03:27:20 +01:00
Viktor Szakats
a4e2232c43
tool_doswin: avoid Windowsisms in socket code (cont.)
For general readability. Also to match the rest of the source code.

- bump `send()` result type from `int` to `ssize_t`.
- fix an `int` to be `curl_socklen_t`.
- `.S_un.S_addr` -> `.s_addr`.
- `SD_RECEIVE` -> `SHUT_RD`.
- `SD_SEND` -> `SHUT_WR`.

Follow-up to a81ab3e6db #20452
Follow-up to 9a2663322c #17572

Closes #20457
2026-01-28 03:26:45 +01:00
Viktor Szakats
fb44e44d92
GHA/windows: fix shell, fix GHA fail to share cache between arm and intel Windows
A cache entry created by windows-2022 is not picked up by
windows-11-arm. Also a cache created by windows-11-arm is not picked up
by windows-2022. Possibly related to this filed in 2025 June:
https://github.com/actions/cache/issues/1622. Also tried
`enableCrossOsArchive` to no avail. Unclear if these two runners count
as distinct operating systems, I'd guess not. Cache entries are
identical on the web UI. Via GH API they show up with the same cache key
bot different "version" (hash) and different sizes, possibly due to the
zstd vs. gzip bug above.

Fixing (identical error text on either runner):
```
Error: Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: Windows-stunnel-5.76-amd64
```

Also fix a silly typo in the shell value.

Follow-up to 0f54ca6150 #20454
Closes #20456
2026-01-28 02:33:57 +01:00
Daniel Stenberg
1b50dcc2ab
tls: remove checks for DEFAULT
Since 9d8998c994, the setopt code changes input DEFAULT to an
actual more specific TLS version (1.2) for the backends to use and check
for.

This means that the default value (0L) cannot and should not actually be
used when the TLS backends run. This change adds asserts to verify that
and removes code that accepts the DEFAULT value as a valid version with
the TLS version functions' logic.

Applications can still set a specific lower version if they want (1, 1.0
or 1.1).

Closes #20453
2026-01-27 23:42:09 +01:00
Stefan Eissing
ae99d750dd
TODO: remove item about signals
With SIGPIPE handling now automatic on most platforms, remove the
TODO item again.

Closes #20447
2026-01-27 23:36:31 +01:00
Viktor Szakats
0f54ca6150
GHA/windows: cache stunnel
To avoid hammering `stunnel.org`.

Follow-up to 7c3a4a4b4c #20410

Closes #20454
2026-01-27 19:58:48 +01:00
Viktor Szakats
a81ab3e6db
tool_doswin: avoid Windowsisms in socket code
For general readability. Also to match the rest of the source code.

- `SOCKADDR` -> `struct sockaddr`
- `SOCKADDR_IN` -> `struct sockaddr_in`
- `== SOCKET_ERROR` -> `== -1` or silent `!= 0`

Follow-up to 9a2663322c #17572

Closes #20452
2026-01-27 19:58:48 +01:00
Viktor Szakats
67ad0b0d79
cmake: initialize internal CURL_INCLUDES variable
Closes #20451
2026-01-27 15:24:29 +01:00
Viktor Szakats
f824b4d004
INSTALL-CMAKE.md: document new static options as experimental
Follow-up to 26c39d8df1 #20015

Closes #20450
2026-01-27 15:24:28 +01:00