Commit graph

36540 commits

Author SHA1 Message Date
Daniel Stenberg
8d302ec936
socks: avoid UAF risk in error path
The code obtained a pointer resp via Curl_bufq_peek(), but called
Curl_bufq_skip() before it would access them in the failf() call.

The Curl_bufq_skip() call can trigger prune_head which may free or
recycle the chunk that resp points into.

Pointed out by ZeroPath
Closes #19139
2025-10-19 13:13:15 +02:00
Jochen Sprickerhof
f03e7c1d64
openldap: fix limit max incoming size test logic
Use LDAP_OPT_SUCCESS for ldap_get_option, as done in the other calls.
ber_sockbuf_ctrl returns 1 on success so reverse the logic.

Follow-up to f91be14bfb
Closes #19138
2025-10-19 13:12:07 +02:00
Daniel Stenberg
6550dd0f3d
wolfssl: clear variable to avoid uninitialized use
Pointed out by ZeroPath
Closes #19126
2025-10-19 11:08:14 +02:00
Tatsuhiro Tsujikawa
e0798466a8
ngtcp2: adopt ngtcp2_conn_get_stream_user_data if available
Adopt ngtcp2_conn_get_stream_user_data which has been available since
ngtcp2 v1.17.0. This improves the time complexity of searching
h3_stream_ctx from O(n) to O(1) where n is the number of stream.

Closes #19132
2025-10-19 11:07:32 +02:00
Joshua Rogers
66e3ff5d0e schannel: fix memory leak
- Do not leak memory on failed setting algorithm cipher list.

Discovered by ZeroPath.


- Do not free backend->cred after failed AcquireCredentialsHandle.

backend->cred is always freed later, during cleanup.


Closes https://github.com/curl/curl/pull/19118
2025-10-19 02:23:36 -04:00
Viktor Szakats
e779650a86
GHA/curl-for-win: update container image envs
Follow-up to 1f31ff06ad

Closes #19129
2025-10-19 01:30:19 +02:00
JimFuller-RedHat
e4ec666a3d
examples/chkspeed: portable printing when outputting curl_off_t values
Closes #19112
2025-10-18 23:26:15 +02:00
Daniel Stenberg
0217aca9f3
lib: remove newlines from failf() calls
Closes #19124
2025-10-18 23:17:54 +02:00
Daniel Stenberg
ea1eaa6f7c
tool_paramhlp: remove outdated comment in str2tls_max()
The function does not take positive number as input. It takes TLS
version strings.

Pointed out by ZeroPath
Closes #19115
2025-10-18 23:17:16 +02:00
Joshua Rogers
023e453032
openldap: do not pass newline to infof()
Discovered by ZeroPath
Closes #19120
2025-10-18 22:30:55 +02:00
Joshua Rogers
c567b37548
src/var: remove dead code
Discovered by ZeroPath
Closes #19119
2025-10-18 22:19:47 +02:00
Joshua Rogers
9021e42c02
ldap: do not pass a \n to failf()
Discovered by ZeroPath
Closes #19122
2025-10-18 22:16:33 +02:00
Joshua Rogers
bff9679a01
schannel_verify: do not call infof with an appended \n
Discovered by ZeroPath
Closes #19123
2025-10-18 22:15:26 +02:00
Viktor Szakats
a000444cb0
cmake: fix Linux pre-fill HAVE_POSIX_STRERROR_R (when _CURL_PREFILL=ON)
It depends on C library.

Follow-up to f30f1307c1 #19116
2025-10-18 14:30:43 +02:00
Viktor Szakats
f30f1307c1
cmake: fix Linux pre-fills for non-glibc (when _CURL_PREFILL=ON)
- do not pre-fill `HAVE_LINUX_TCP_H` on Linux.
  `linux/tcp.h` is a Linux kernel userspace header. It's likely
  installed when using glibc and likely missing by default when using
  something else, e.g. MUSL (e.g. on Alpine).

  Therefore always detect it for Linux targets, and only pre-fill it for
  non-Linux ones.

- do not pre-fill `HAVE_GLIBC_STRERROR_R` on Linux.
  To fix it for non-glibc envs, e.g. MUSL (e.g. on Alpine).

Note, the pre-fill option is a disabled by default, internal option and
strongly not recommended outside of curl development.

Closes #19116
2025-10-18 13:53:30 +02:00
Daniel Stenberg
8de898414c
openssl: free UI_METHOD on exit path
In providercheck(), when failing to open the "store", the exit path
would not previously free the created UI_METHOD and instead leak this
resource.

Pointed out by ZeroPath

Closes #19114
2025-10-18 12:54:19 +02:00
Daniel Stenberg
f847d2ed02
tool_formparse: rewrite the headers file parser
The -F option allows users to provide a file with a set of headers for a
specific formpost section. This code used old handcrafted parsing logic
that potentially could do wrong.

Rewrite to use my_get_line() and dynbuf. Supports longer lines and
should be more solid parsing code.

Gets somewhat complicated by the (unwise) feature that allows "folding"
of header lines in the file: if a line starts with a space it should be
appended to the previous.

The previous code trimmed spurious CR characters wherever they would
occur in a line but this version does not. It does not seem like
something we want or that users would expect.

Test 646 uses this feature.
Closes #19113
2025-10-18 12:49:53 +02:00
Viktor Szakats
f32451c12b
curlx: promote Curl_fseeko() to curlx_fseek(), use it in src
- tool_formparse: replace truncated `fseek` with `curlx_fseek`.
- tool_operate: replace truncated `fseek` with `curlx_fseek`.
- tool_paramhlp: replace local duplicate `myfseek`, with `curlx_fseek`.

Follow-up to 4fb12f2891 #19100

Closes #19107
2025-10-18 02:25:10 +02:00
Daniel Stenberg
b9b8a7a5df
openssl: fix resource leak in provider error path
Pointed out by ZeroPath

Closes #19111
2025-10-18 00:40:13 +02:00
Daniel Stenberg
3087511b0f
RELEASE-NOTES: synced 2025-10-17 23:39:16 +02:00
Daniel Stenberg
c921f6d052
wolfssl: fix resource leak in verify_pinned error paths
Pointed out by ZeroPath

Closes #19110
2025-10-17 23:34:04 +02:00
Daniel Stenberg
e29706d6e2
mbedtls: move the crypto init into the vtls init function
Follow-up to 3a305831d1

Closes #19108
2025-10-17 23:33:12 +02:00
Daniel Stenberg
d6c39cd2cb
curl.h: remove incorrect comment about CURLOPT_PINNEDPUBLICKEY
Bug: https://curl.se/mail/lib-2025-10/0018.html
Reported-by: curl.stunt430
Closes #19105
2025-10-17 22:23:12 +02:00
Daniel Stenberg
480ff0cf58
INSTALL: update the list of known operating systems
curl has run on

Closes #19106
2025-10-17 22:19:38 +02:00
Viktor Szakats
87b72b8182
krb5: fix output_token allocators in the GSS debug stub (Windows)
Before this patch system `malloc()`/`free()` were used to allocate
the buffer returned in the `output_token` object from the debug stub
of `gss_init_sec_context()` when enabled via `CURL_STUB_GSS_CREDS` in
debug-enabled libcurl builds. This object is later released via stock
`gss_release_buffer()`, which, in the Windows builds of MIT Kerberos,
doesn't use the system `free()`, but the Win32 `HeapFree()`.

Fix it by using the GSS alloc/free macros: `gssalloc_malloc()` and
`gssalloc_free()` from `gssapi_alloc.h`.

To make this work without MIT Kerberos feature detection, use a canary
macro to detect a version which installs `gssapi_alloc.h` for Windows.
For <1.15 (2016-11-30) releases, that do not install it, disable the GSS
debug stub in libcurl.

Strictly speaking, non-Windows builds would also need to use GSS
allocators, but, detecting support for `gssapi_alloc.h` is impossible
without build-level logic. Built-level logic is complex and overkill,
and MIT Kerberos, as of 1.22.1, uses standard malloc/free on
non-Windows platforms anyway. (except in GSS debug builds.)

Follow-up to 73840836a5 #17752

Closes #19064
2025-10-17 17:47:22 +02:00
Daniel Stenberg
25eb34dd3e
KNOWN_BUGS: SOCKS-SSPI discards the security context
Also make the verbose log say it

Pointed out by ZeroPath

Closes #19103
2025-10-17 17:45:06 +02:00
Daniel Stenberg
e9455ea523
rustls: make read_file_into not reject good files
For files with sizes using an exact multiple of 256 bytes, the final
successful read(s) filled the buffer(s) and the subsequent fread
returned 0 for EOF, which caused read_file_into to fail.

Now, it needs to return 0 and not be EOF to be an error.

Follow-up to dd95a49d49

Pointed out by ZeroPath
Closes #19104
2025-10-17 17:44:14 +02:00
Viktor Szakats
373855a4da
GHA/curl-for-win: add minimal Linux build
A bit more minimal build than the one used for trurl. To stress test
a build with most features disabled.

Costs 40 seconds, of which 6 is the build, rest is installing tools.

Ref: 5b385001d5
Ref: 3ee10692c7

Follow-up to 5af2457848 #17818

Closes #17961
2025-10-17 17:27:12 +02:00
Stefan Eissing
5cefb455d4
quic: improve UDP GRO receives
Closes #19101
2025-10-17 17:23:46 +02:00
Stefan Eissing
1d01d4975f
socks_sspi: use the correct free function
When freeing buffers allocated by SSPI, use its own function, not free().

Reported-by: Joshua Rogers
Closes #19046
2025-10-17 16:59:11 +02:00
Viktor Szakats
14e4d9c3c7
setopt: fix unused variable warning in minimal build
Found via: #17961

Closes #19102
2025-10-17 16:19:42 +02:00
renovate[bot]
74147acd17
GHA: update dependency ruff to v0.14.1
Closes #19085
2025-10-17 16:19:42 +02:00
Daniel Stenberg
4fb12f2891
mime: fix use of fseek()
Avoid the possible 64-bit offset truncation when used on systems with
small 'long', like Windows.

bonus: make mime_open_file() return bool

Pointed out by ZeroPath
Closes #19100
2025-10-17 16:13:35 +02:00
Daniel Stenberg
c0564ceb3a
cf-socket: if FD_CLOEXEC fails on accepted socket, cleanup
Follow-up to 9d7b532404

Pointed out by ZeroPath

Closes #19098
2025-10-17 16:12:34 +02:00
Daniel Stenberg
fbff1d5b90
openssl: avoid overwriting 'result' after error
Follow-up to eefd03c572

Pointed out by ZeroPath https://zeropath.com/
Closes #19099
2025-10-17 15:48:47 +02:00
Daniel Stenberg
6296b9d383
tool_ipfs: simplify the ipfs gateway logic
- make sure memory allocated by libcurl is freed with curl_free()

- drop the ensure_trailing_slash complexity

Closes #19097
2025-10-17 15:47:36 +02:00
renovate[bot]
9568109f71
GHA: update ngtcp2/ngtcp2 to v1.17.0
Closes #19092
2025-10-17 14:25:09 +02:00
Daniel Stenberg
3df71e6dc2
openssl: fail if more than MAX_ALLOWED_CERT_AMOUNT certs
Detect and prevent abuse or mistakes. Limit set to 100.

Closes #19091
2025-10-17 13:36:57 +02:00
Stefan Eissing
f221cdeabe
ngtcp2: add a comment explaining write result handling
The choice to continue processing incoming data although the
writeout of the headers/data failed is not obvious. Add a comment
explaining why this is done.

Closes #19093
2025-10-17 13:36:21 +02:00
Stefan Eissing
2719aa36b5
test_16: adjust timing expectations
In MOST protocols and runs, the 'pretransfer' time is less than the
'starttransfer'. E.g. request being sent before response comes in.

However, when curl is starved of cpu a server response might start
streaming in before the multi-state transitioned to DID (and recorded
the 'pretransfer' time).

Do no longer check that 'pretransfer' is less or equal 'starttransfer'.
Check that is is less or equal to the total time instead.

Closes #19096
2025-10-17 13:35:35 +02:00
Daniel Stenberg
e2a4de8a60
openssl: better return code checks when logging cert data
Pointed out by ZeroPath

Closes #19094
2025-10-17 12:41:04 +02:00
Daniel Stenberg
c4db9eb491
rustls: limit snprintf proper in cr_keylog_log_cb()
It should limit the size to the size of the target array, not the
incoming data.

Pointed out by ZeroPath
Closes #19095
2025-10-17 12:38:36 +02:00
Viktor Szakats
3a305831d1
mbedtls: add support for 4.0.0
After this patch libcurl requires (as already documented)
the `curl_global_init()` call when using the `curl_formadd()` API with
mbedTLS.

Note: NTLM is not supported with mbedTLS 4+, because it lacks
the necessary crypto primitive: DES.

Also:
- lib: de-dupe mbedTLS minimum version checks into `curl_setup.h`.
- lib: initialize PSA Crypto as part of `curl_global_init()`.
  For MD5, SHA-256, `curl_formadd()`, and MultiSSL builds with mbedTLS
  but where mbedTLS isn't the default backend.
- lib1308: fix to call `curl_global_init()` (for the Form API).
- curl_ntlm_core: disable with mbedTLS 4+.
- md4: disable mbedTLS implementation when building against 4.x.
- md5: use mbedTLS PSA Crypto API when available, otherwise use
  the default local implementation.
- sha256: use mbedTLS PSA Crypto API when available, otherwise use
  the default local implementation.
- vtls/mbedtls: drop PSA Crypto initialization in favor of
  `curl_global_init()`.
- vtls/mbedtls: use PSA Crypto random API with all mbedTLS versions.
- vtls/mbedtls: do the same for the SHA-256 callback.
- autotools: detect mbedTLS 4+, and disable NTLM for 3.x.
- cmake: disable NTLM for mbedTLS 3.x.
- GHA/linux: keep building mbedTLS 3.x manually and use it in
  an existing job, while also enabling pytest in it.
- GHA/linux: bump to mbedTLS 4.0.0.
  Closes #19075
  Closes #19074

Refs:
https://github.com/Mbed-TLS/mbedtls/releases/tag/mbedtls-4.0.0
https://github.com/Mbed-TLS/mbedtls/blob/mbedtls-4.0.0/docs/4.0-migration-guide.md
https://github.com/Mbed-TLS/mbedtls/blob/mbedtls-4.0.0/tf-psa-crypto/docs/1.0-migration-guide.md [404]
https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/tf-psa-crypto-1.0.0/docs/1.0-migration-guide.md
https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/tf-psa-crypto-1.0.0/docs/psa-transition.md
627f727bbe/docs/4.0-migration-guide

Closes #19077
2025-10-17 11:50:48 +02:00
Daniel Stenberg
7e12139719
imap: treat capabilities case insensitively
Reported-by: Joshua Rogers
Fixes #19089
Closes #19090
2025-10-17 10:40:37 +02:00
Daniel Stenberg
f5f4710a26
examples/websocket: fix use of uninitialized rlen
Pointed out by ZeroPath

Closes #19088
2025-10-17 10:15:07 +02:00
Daniel Stenberg
f91be14bfb
openldap: limit max incoming size
Set the maximum allowed size of an incoming LDAP message, which to
OpenLDAP means that it allows malloc() up to this size. If not set,
there is no limit and we instead risk a malloc() failure.

The limit is arbitrarily set to 256K as I can't figure out what a
reasonable value should be.

OpenLDAP docs: https://openldap.org/software/man.cgi?query=lber-sockbuf&apropos=0&sektion=0&manpath=OpenLDAP+2.6-Release&arch=default&format=html

Bug: https://issues.oss-fuzz.com/issues/432441303
Closes #19087
2025-10-16 22:23:37 +02:00
Viktor Szakats
da06621d61
firefox-db2pem.sh: add macOS support, tidy-ups
Cherry-picked from #19076
Closes #19086
2025-10-16 20:53:28 +02:00
Viktor Szakats
c8aaa5d2f2
scripts: pass -- before passing xargs
Also:
- GHA/checkdocs: escape `.` in -E regex expression.

Closes #19076
2025-10-16 20:45:28 +02:00
Viktor Szakats
3c0604bba4
GHA: sync up curl -V step descriptions
Also to make it easier to recognize.

Also:
- GHA/linux-old: split steps to match other jobs.
- GHA: add `--disable` where missing.

Closes #19084
2025-10-16 20:18:25 +02:00
Viktor Szakats
c8d6643df2
GHA/windows: stop installing Perl Win32-Process* modules
It's complex and did not help stabilizing CI runs.

Hard to say, but I'm suspicious it's related to the CI errors
-1073741502, 0xC0000142, seen in the 'build examples' and
'disk space used' steps.

Ref: #18526
Reverts 52775a7fb4 #18296
Closes #19083
2025-10-16 18:53:44 +02:00