Commit graph

38883 commits

Author SHA1 Message Date
Viktor Szakats
2dfd265d66
checksrc-all.pl: do not check files multiple times
Restrict `git ls-files` to return `*.[ch]` files within `$dir` only.
Before this patch it returned files in subdirectories too, which did
double work and may have made `checksrc.pl` pick `.checksrc` from the
first such subdirectory, masking the one in `$dir`. (current curl tree
is not affected)

Ref: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec

Follow-up to 33f606cd51 #20439

Closes #21909
2026-06-08 14:59:47 +02:00
alhudz
7de0a7e71a
chunked: reject invalid bytes in trailer
Trailers are delivered to the application as headers via
CLIENTWRITE_TRAILER, but unlike regular response headers they skipped
the verify_header() checks, so a server could smuggle a nul byte (or
stray CR) into a header reaching CURLOPT_HEADERFUNCTION and
curl_easy_header().

Run each assembled trailer line through Curl_verify_header(), the same
validation used for normal headers.

Covered by the new test 2106.

Closes #21896
2026-06-08 13:56:10 +02:00
Stefan Eissing
d69bfad3fa
ssl native_ca_store: always reinit
Add bit `native_ca_store_opt` to keep the setting of
CURLOPT_(PROXY_)SSL_OPTIONS and use that to calculate every easy
transfer if a native CA store shall be used or not.

This avoids `native_ca_store` getting stuck on TRUE after being set
once.

Closes #21902
2026-06-08 13:53:54 +02:00
Stefan Eissing
435fb96dcf
netrc: remember and check filename loaded
Remember the filename of a loaded netrc file to detect changed
configurations in a reused easy handle.

Closes #21903
2026-06-08 13:53:02 +02:00
Daniel Stenberg
e786a4e915
CURLOPT_DOH_URL.md: does not inherit proxy options
Closes #21904
2026-06-08 13:30:39 +02:00
Daniel Stenberg
ff7086874e
_ENVIRONMENT.md. Windows does case insensitive env variables
Closes #21907
2026-06-08 13:29:47 +02:00
renovate[bot]
a89fd1ffd4
GHA: update dependency pizlonator/fil-c to v0.679
Closes #21897
2026-06-08 13:29:09 +02:00
Viktor Szakats
cdce2460b3
runtests: allow skipping tests on torture, use for test 357
Some tests may take a long time in torture mode. Make it possible
to skip individual tests when runtests in running in torture mode.

Also:
- skip test 357 for the reason above.
  Saved 1-3 minutes for the Linux CI torture job, 1-1.5m on Windows.
  No savings on macOS.

Reported-by: Stefan Eissing
Fixes #21873

Closes #21906
2026-06-08 13:26:31 +02:00
Viktor Szakats
39d5cead0d
libssh2: save non-standard port to known_hosts
Reported-by: dyingc on github
Fixes #21863

Closes #21874
2026-06-08 13:26:31 +02:00
Daniel Stenberg
5df33efab4
setopt: claer the "custom" CA booleans when set to NULL
Mark them as custom choices only when pointer is passed, and clear them
again when set to NULL.

Closes #21901
2026-06-08 12:37:35 +02:00
Daniel Stenberg
9b69cfb937
var: use a dedicated pointer for the alloc
As the 'c' pointer might actually get modified before it is time to free
the memory.

Verify in test 2310

Reported-by: Eunsoo Kim
Fixes #21898
Closes #21900
2026-06-08 09:37:06 +02:00
Daniel Stenberg
0618ffe50d
Revert "url: remove ssh_config_matches"
This reverts commit 3e9817cd1b.

The change was incorrect as the check was not for the options the commit
message mentions.

Reported-by: ByteRay on hackerone
Closes #21899
2026-06-08 09:09:58 +02:00
Viktor Szakats
7c34365cce
urlapi: fix memleaks on error in parse_hostname_login()
Detected by GitHub Code Quality

Follow-up to acd82c8bfd #11006
Follow-up to 4183b8fe9a #8049

Closes #21879
2026-06-08 00:42:51 +02:00
Viktor Szakats
9c1ebea359
lib1587: drop redundant includes
Closes #21892
2026-06-08 00:42:51 +02:00
Daniel Stenberg
1a1ec74b0b
RELEASE-NOTES: synced 2026-06-07 23:19:55 +02:00
Daniel Stenberg
e2cb3cc78e
CURLOPT_DISALLOW_USERNAME_IN_URL: is for CURLOPT_URL only
Closes #21890
2026-06-07 23:09:56 +02:00
Daniel Stenberg
7bb7b2c2a4
tool: warn when --ssl and --ftp-ssl-control override each other
and mention this properly in the docs.

Closes #21887
2026-06-07 14:42:13 +02:00
Daniel Stenberg
c4c12843df
CURLOPT_PORT.md: use stronger language
This option should not be used.

Closes #21886
2026-06-07 14:41:04 +02:00
Stefan Eissing
fbcf10ab84
progress: fx CURLINFO time reporting
Whack the times reported for a transfer (see
https://curl.se/libcurl/c/curl_easy_getinfo.html#TIMES) into order for
all variations of up-/download, http/ftp etc. Make sure they are
reported in the documented order.

There is still the *possibility* of PRETRANSFER being longer then
POSTTRANSFER, if a server sends a response before an upload is done.
POST is the time the first response byte is received, and PRE is the
time the last byte was sent by curl.

This may happen with more likelihood on HTTP/2 and 3 for a server
rejected upload. But for successful uploads, the answer will almost over
come afterwards.

Undo the previous twists in lib500.c tests, adjust pytest timeline
checks.

Fixes #21828
Reported-by: BazaarAcc32 on github
Closes #21843
2026-06-07 14:39:10 +02:00
Daniel Stenberg
317bf7e8a8
ftplistparser: clear strings.target if not symlink
When the struct is passed to the CURLOPT_CHUNK_BGN_FUNCTION callback,
clear the pointer if the provided data is not a symlink.

Closes #21884
2026-06-07 00:26:51 +02:00
Daniel Stenberg
38b72f3b56
CURLOPT_PINNEDPUBLICKEY.md: does not apply for other origins
Clarify

Closes #21885
2026-06-07 00:12:02 +02:00
Daniel Stenberg
f7f1666ee2
CURLOPT_CHUNK_BGN_FUNCTION: target is there for symlinks only
Closes #21883
2026-06-07 00:11:14 +02:00
Daniel Stenberg
c3c2cfb65d
http: reject spurious CR bytes in headers
Verified by test 2105

Closes #21882
2026-06-06 22:54:25 +02:00
Vasiliy-Kkk
3b9f0972e2 schannel_verify: simplify CryptQueryObject use
- Specify that the content is base64 encoded, rather than rely on
  auto-detect.

- Remove unnecessary sanity check of the returned content type.

Closes https://github.com/curl/curl/pull/21760
2026-06-06 11:27:34 -04:00
Viktor Szakats
d3e9a815c4
tidy-up: miscellaneous
- fix typos.
- badword: add two new words.
- cpp: drop parentheses from standalone `#if` expressions.
- libssh: vertical-align comment block with others.
- clang-format.

Closes #21880
2026-06-05 16:57:38 +02:00
Viktor Szakats
982e19f231
vquic: drop stray casts for iovec.iov_len
Spotted by GitHub Code Quality

Closes #21877
2026-06-05 16:57:38 +02:00
Viktor Szakats
0c8c6f4fc0
libssh2: replace macro names with non-misspelled alternatives
They are available in libssh2 0.15+.

Closes #21876
2026-06-05 16:57:38 +02:00
Viktor Szakats
1b8f4dba28
tidy-up: drop stray casts for allocated pointers
Closes #21865
2026-06-05 12:24:01 +02:00
Viktor Szakats
cb307544ad
libssh2: sync version check with INTERNALS.md
Follow-up to cf3b9657bc

Closes #21868
2026-06-05 12:06:22 +02:00
Viktor Szakats
5c9ac36e58
libssh2: do not use deprecated macros when unavailable
To support building with `LIBSSH2_NO_DEPRECATED` macro defined, a future
libssh2 that may have dropped these macros.

Ref: https://github.com/libssh2/libssh2/pull/1977

Closes #21867
2026-06-05 12:06:22 +02:00
Viktor Szakats
3c7d136225
libssh2: use non-deprecated libssh2_knownhost_addc()
Supported since libssh2 v1.2.5. Replacing `libssh2_knownhost_add()`,
which was deprecated in that same version.

The new API supports a comment field.

Ref: https://github.com/libssh2/libssh2/pull/1977

Closes #21866
2026-06-05 12:06:22 +02:00
Stefan Eissing
56eca2afb4
quic: count zero length packets against max
With a flood of zero lenght UDP packets to curl, the receive loop might
run longer than intended to. Count such packets against the max to
terminate the loop as intended.

URL: https://hackerone.com/reports/3783438
Reported-by: vectorqueue on hackerone
Closes #21869
2026-06-05 09:14:21 +02:00
Daniel Stenberg
c32427d0c1
VULN-DISCLOSURE-POLICY.md: emphasize comm as a human
Closes #21870
2026-06-05 09:13:35 +02:00
Andreas Falkenhahn
3d721a1d41 BINDINGS: Update Hollywood link
- Change link from archive.org back to hollywood-mal.com since the site
  is up and running.

Closes https://github.com/curl/curl/pull/21862
2026-06-04 14:45:17 -04:00
Marcel Raad
75a94f3cd8
tests: add cookies feature to some tests
These fail without cookie support.

Closes https://github.com/curl/curl/pull/21858
2026-06-03 12:44:45 +02:00
Daniel Stenberg
fda48a5a9c
top-complexity: drop threshold to 50
Closes #21857
2026-06-03 11:05:34 +02:00
Daniel Stenberg
ef8f68568f
urlapi: simplify urlget_url somewhat
- make file_url() a separate function that returns a file:// URL
- group the checks that need scheme info

Closes #21856
2026-06-03 10:41:15 +02:00
Daniel Stenberg
cf7919262d
tool_parsecfg: refactor parseconfig()
- introduce helper functions
- remove #ifdef'ed debug code

Closes #21855
2026-06-03 10:40:01 +02:00
Daniel Stenberg
6730081429
cookie: refactor parse_cookie_header
- introduce a few static helper functions
- simplify the bad octet checks
- simplify the too long cookie/value check

Closes #21854
2026-06-03 09:42:52 +02:00
dependabot[bot]
fb6be547e8
GHA: bump 2 GitHub Actions
- updates `actions/labeler` from 6.0.1 to 6.1.0
- updates `github/codeql-action` from 4.35.2 to 4.36.0

Closes #21852
2026-06-03 00:27:43 +02:00
Stefan Eissing
22d979400a
vquic: moving related things into subdir
Move QUIC related implementations into the vquic directory. Rename
files that implement a connection filter accordingly.

Closes #21848
2026-06-02 22:48:21 +02:00
Daniel Stenberg
5d178de986
hsts.md: mention multiple curl invokes effect
Reported-by: zhanhb on github
Ref: #21847
Closes #21851
2026-06-02 22:46:03 +02:00
Viktor Szakats
2932b7f56f
gtls: minor fixes and improvements
- fix GnuTLS function name reference in `Curl_gtls_shared_creds_create()`
  error message.
  Spotted by GitHub Code Quality.
- unfold a line.
- in `Curl_gtls_verifyserver()`:
  - report the failure of `gnutls_x509_crt_import()`.
    Spotted by GitHub Code Quality.
  - fix a minor inconsistency in error strings.
  - drop redundant NULL checks for `config->issuercert`.

Closes #21850
2026-06-02 21:59:41 +02:00
Vasiliy-Kkk
a79467343f schannel: use fopen instead CreateFile
- Refactor CA file reading to use the typical fopen/fread instead of
  CreateFile/ReadFile.

Closes https://github.com/curl/curl/pull/21773
2026-06-02 13:58:21 -04:00
Jay Satiro
74f18f27a2 github: Add AI usage warning to issue, doc and PR templates
- Explain to contributors that though AI use is acceptable they must
  not file unless they can understand and explain their work without AI.

Assisted-by: Viktor Szakats

Ref: https://github.com/curl/curl/discussions/21792

Closes https://github.com/curl/curl/pull/21801
2026-06-02 13:47:01 -04:00
Daniel Stenberg
a4313f1a98
RELEASE-NOTES: synced 2026-06-02 17:01:58 +02:00
Viktor Szakats
89683e05b9
tidy-up: use test/example domains more
Closes #21849
2026-06-02 15:31:48 +02:00
Joshua Rogers
be6c4ee7fa
gtls: verify OCSP response signature in gtls_verify_ocsp_status
Since aeb1a281ca ("gtls: fix OCSP stapling management"), the function
parses the stapled OCSP response and reads the certificate status via
gnutls_ocsp_resp_get_single(), but never calls gnutls_ocsp_resp_verify()
or gnutls_ocsp_resp_verify_direct(). A response with a forged or
corrupted signature is accepted without question.

Fix by calling gnutls_ocsp_resp_verify() against the trust list obtained
from the session credentials immediately after gnutls_ocsp_resp_import().
This handles both directly-signed responses and delegated OCSP responders
without requiring the issuer certificate to be present in the peer chain.

The missing check only affects the CURLOPT_SSL_VERIFYSTATUS code path
when CURLOPT_SSL_VERIFYPEER is disabled. With peer verification enabled,
gnutls_certificate_verify_peers2() independently catches the invalid
response via GNUTLS_CERT_INVALID_OCSP_STATUS before
gtls_verify_ocsp_status() is reached. As a result, no attack is possible
that is not already trivially achievable without OCSP stapling when peer
verification is off. This is a correctness and consistency fix, not a
security vulnerability.

Reported-by: Joshua Rogers

Closes #21677
2026-06-02 13:30:35 +02:00
Joshua Rogers
d191de891a
telnet: honor CURLOPT_TIMEOUT in send_telnet_data()
The poll-before-write loop used -1 (infinite) as the Curl_poll timeout,
so a peer that stops reading could stall the transfer indefinitely,
bypassing CURLOPT_TIMEOUT. Use Curl_timeleft_ms() instead and return
CURLE_OPERATION_TIMEDOUT when the deadline is reached or exceeded.

Closes #21685
2026-06-02 11:43:00 +02:00
Daniel Stenberg
9d19b47302
lib1560: verify a few more URL variations
Closes #21842
2026-06-02 11:31:46 +02:00