Commit graph

15586 commits

Author SHA1 Message Date
Daniel Stenberg
d51d19bd06
ftp: remove the retr_size_saved struct field
It was basically a duplicate of data->req.size already

Closes #19194
2025-10-22 23:43:39 +02:00
Daniel Stenberg
a8f16da712
ftp: remove the state_saved struct field
It was not necessary. Its only purpose was to know if an upload is done,
and that information is already available elsewhere.

Closes #19192
2025-10-22 22:52:36 +02:00
Daniel Stenberg
4d93592a26
ftp: reduce size of some struct fields
Closes #19191
2025-10-22 15:55:05 +02:00
Daniel Stenberg
61156f7921
ftp: remove 'newhost' and 'newport' from the ftp_conn struct
They are only needed locally, no need to keep them around.

Closes #19190
2025-10-22 14:13:19 +02:00
Daniel Stenberg
fb6a4802d7
imap: parse and use UIDVALIDITY as a number
Instead of a string. Saves a malloc, adds earlier format check.

RFC 3501 section 2.3.1.1 documents the value as a 32-bit value.

Closes #19188
2025-10-22 14:12:07 +02:00
Stefan Eissing
bb78c45407
vquic: fix recvmsg loop for max_pkts
The parameter `max_pkts` was not checked in the recvmsg() implementation
of vquic_recv_packets() as the packter counter was never increased. This
led to the loop running until an EAGAIN was encountered. Which, in any
real case scenario, does no harm as long as libcurl is ingesting packets
faster than a server is able to send them.

However on a slow device and a fast network this could happen and allow
a denial of serice.

Not a real regression as the vulnerable code has never been released.
libcurl 8.16.0 does not have this bug.

Closes #19186
2025-10-22 11:40:47 +02:00
Stefan Eissing
fcae0733a7
gnutls: fix re-handshake comments
With GnuTLS, a GNUTLS_E_REHANDSHAKE can be a renegotiate in TLSv1.2 or a
key update in TLSv1.3. This had been made non-blocking in
a1850ad7de but the comment warning about a
blocking call was not updated.

Closes #19187
2025-10-22 11:40:00 +02:00
Stefan Eissing
9c313b61b4
ftp: check errors on remote ip for data connection
Obtaining the remote ip of the control connection to be used for the
data connection can fail. Check that and fail the transfer when that
does not work.

Triggered by an OSS-Fuzz issue.
Closes #19185
2025-10-22 10:58:21 +02:00
x2018
68e63a7997
curl_path: add curlx_dyn_free() on an error path
Follow-up to 976333dd40

Closes #19183
2025-10-22 09:37:54 +02:00
Daniel Stenberg
7295546447
hostip: fix infof() output for non-ipv6 builds using IPv6 address
Pointed out by ZeroPath

Closes #19184
2025-10-22 08:41:19 +02:00
x2018
7d5d0645e5
http: unify error handling in Curl_http()
Closes #19182
2025-10-21 23:19:39 +02:00
Daniel Stenberg
48df7b29d9
cookie: only count accepted cookies in Curl_cookie_add
The counter used to stop accepting cookies after a certain amount has
been received in a single response would previously also count some
cookies that were not actually accepted as they were discarded after the
counter was increased.

Starting now, the counter is increased only for cookies that were
accepted.

Pointed out by ZeroPath
Closes #19157
2025-10-21 16:33:32 +02:00
Stefan Eissing
40f7cd2bdd
mime: fix unpausing of readers
When unpausing a transfer, check if the reader pause state differs
in addition to the "keepon" flags.

Reported-by: 包布丁
Fixes #18848
Closes #19178
2025-10-21 16:30:47 +02:00
Daniel Stenberg
76d2852550
hmac: free memory properly on errors
If one of the hmac init calls fail, Curl_HMAC_init previously would
return without first freeing the allocated HMAC_context.

Fixes #19176
Reported-by: WangDaLei on github
Closes #19177
2025-10-21 16:24:21 +02:00
Stefan Eissing
dbff3eec45
cf-socket: give information when unable to open socket
Give ERRNO explanation in a failf() when unable to open a socket.
Helps in finding out what the issue preventing your curl to work
really is. Just had a wrong ulimit after a sys update.

Closes #19158
2025-10-20 15:21:47 +02:00
Stefan Eissing
4be9db7bc8
http: accept duplicate location with same value
When a server sends a Location: header repeat with the same location,
ignore the repeats silently.

Follow-up to 9596c4a258
Closes #19159
2025-10-20 14:48:20 +02:00
Viktor Szakats
e7818999db
socks_gssapi: replace gss_release_buffer() with curl free for buffers owned by libcurl
Before this patch, this code used to call `gss_release_buffer()` on
objects with buffers allocated via curl's allocator.
`gss_release_buffer()` calls system (or Win32) free on these buffers,
which may mismatch with curl's allocator. To fix it, align these calls
with the pattern used in vauth modules, by replacing
`gss_release_buffer()` with curl free to release the buffers.

Use `Curl_safefree()` to set the freed pointer to NULL, as
`gss_release_buffer()` did.

Also: use object length var when allocating.

Reported-by: Joshua Rogers

Closes #19018
2025-10-20 14:23:46 +02:00
Daniel Stenberg
1876ed6296
cf-socket: make set_local_ip void, and remove failf()
No callers of this function checked the return code, meaning failures
are not lethal == using failf was wrong, and it can just as well return
void.

Closes #19137
2025-10-20 10:57:48 +02:00
Daniel Stenberg
104299195e
curl_get_line: the final return cannot be reached
Follow-up to 769ccb4d42

Pointed out by CodeSonar
Closes #19154
2025-10-20 10:30:36 +02:00
Daniel Stenberg
9596c4a258
http: return error for a second Location: header
Unless it is identical to the previous one.

Follow-up to dbcaa00657

Adjusted test 580, added test 772 and 773

Fixes #19130
Reported-by: Jakub Stasiak
Closes #19134
2025-10-20 09:35:23 +02:00
Daniel Stenberg
00cb679c04
openssl: remove dead code
A condition in infof_certstack() would always equal true after a
previous change.

Follow-up to e2a4de8a60

Pointed out by Coverity
Closes #19142
2025-10-19 23:48:28 +02:00
Daniel Stenberg
d3b2ba92c7
rustls: exit on error
In init_config_builder_verifier() the call to
rustls_root_cert_store_builder_build() set result on failure but did not
return.

Pointed out by ZeroPath
Closes #19125
2025-10-19 23:47:47 +02:00
Daniel Stenberg
7f19fa9819
lib: add asserts that hostname has content
For all network related protocols there must be a non-blank hostname
used. This change adds a few asserts in some places to make debug/tests
catch mistakes if any such would slip in.

Closes #19146
2025-10-19 23:45:28 +02:00
Yedaya Katsman
55e0526566
openssl: fix unable do typo in failf() calls
Closes #19149
2025-10-19 23:42:54 +02:00
Daniel Stenberg
976333dd40
curl_path: make sure just whitespace is illegal
This function could previously accidentally return true and a NULL path
if only whitespace was provided as argument.

Also, make it stricter and do not allow CR or LF within the string.

Use more strparse parsing.

Drop the comment saying this is from OpenSSH as it has now been
rewritten since then.

Closes #19141
2025-10-19 16:26:01 +02:00
Daniel Stenberg
769ccb4d42
curl_get_line: enhance the API
To make sure callers can properly differentiate between errors and know
cleanly when EOF happens. Updated all users and unit test 3200.

Triggered by a remark by ZeroPath

Closes #19140
2025-10-19 16:25:11 +02:00
Daniel Stenberg
990a23bb97
libssh: return the proper error for readdir problems
The code would return without setting sshc->actualcode or returning the
CURLcode error.

Reported by ZeroPath
Closes #19135
2025-10-19 14:28:55 +02:00
Daniel Stenberg
fffc16dd9c
smtp: return value ignored
Return value from Curl_client_write was overwritten by
smtp_perform_command making errors ignored.

Pointed out by ZeroPath

Closes #19136
2025-10-19 13:17:31 +02:00
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
Daniel Stenberg
0217aca9f3
lib: remove newlines from failf() calls
Closes #19124
2025-10-18 23:17:54 +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
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
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
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
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
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
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
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