Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
c791223
setopt: disable CURLOPT_HAPROXY_CLIENT_IP on NULL
bagder Nov 10, 2025
79d3e1d
wcurl: import v2025.11.09
samueloph Nov 9, 2025
00872d5
rtmp: fix double-free on URL parse errors
bagder Nov 10, 2025
b0aba10
cshutdn: acknowledge FD_SETSIZE for shutdown descriptors
stanislavfortaisle Nov 10, 2025
87149c8
mqtt: properly handle the message which exceeds maxsize
x2018 Nov 9, 2025
baafa5f
schannel: fix potental memory leak of cert_store_path on four error p…
x2018 Nov 9, 2025
660f244
urlapi: fix mem-leaks in curl_url_get error paths
bagder Nov 10, 2025
323b33d
digest_sspi: properly free sspi identity
x2018 Nov 9, 2025
24774bb
GHA: update awslabs/aws-lc to v1.63.0
renovate[bot] Nov 10, 2025
4efe88e
renovate.json: drop parentheses from group names
bagder Nov 10, 2025
2f768b8
RELEASE-NOTES: synced
bagder Nov 10, 2025
2f29a8f
RELEASE-NOTES: spellcheck
bagder Nov 10, 2025
37050a1
OS400/ccsidcurl: fix curl_easy_setopt_ccsid for non-converted blobs
bagder Nov 10, 2025
7e87255
socks_sspi: use free() not FreeContextBuffer()
bagder Nov 10, 2025
8e321a5
examples/crawler: fix variable
bagder Nov 10, 2025
f477f3e
tests/data: support using native newlines on disk, drop `.gitattributes`
vszakats Nov 7, 2025
b39c158
scripts: fix shellcheck SC2046 warnings
vszakats Nov 9, 2025
77be4a7
mdlinkcheck: pass curl arguments to `open()` as list
vszakats Nov 10, 2025
a8e46c5
verify-release: update to avoid shellcheck warning SC2034
vszakats Nov 10, 2025
6aab1dc
scripts: use end-of-options marker in `find -exec` commands
vszakats Nov 10, 2025
af5a164
OS400/makefile.sh: fix shellcheck warning SC2038
vszakats Nov 10, 2025
cdb7ac1
GHA/linux: disable test 776 in valgrind jobs to avoid delay
vszakats Nov 10, 2025
b81d30a
pytest: fix conditions for test_02_28
vszakats Nov 10, 2025
67ef4a3
GHA/linux: build and enable nghttp2 for Fil-C job
vszakats Nov 10, 2025
c545e10
sftp: fix range downloads in both SSH backends
bagder Nov 11, 2025
3f1a8db
rustls: fix a potential memory issue
x2018 Nov 9, 2025
10b2dd8
krb5_sspi: unify a part of error handling
x2018 Nov 10, 2025
0dacc07
cf-https-connect: allocate ctx at first in cf_hc_create()
x2018 Nov 10, 2025
28380bb
progress: show fewer digits
bagder Nov 9, 2025
5bd670c
wolfssl: avoid NULL dereference in OOM situation
bagder Nov 11, 2025
6ca1d05
ftp: remove #ifdef for define that is always defined
bagder Nov 11, 2025
3d9f7b4
noproxy: simplify Curl_check_noproxy
bagder Nov 11, 2025
8c9946d
ccsidcurl: make curl_mime_data_ccsid() use the converted size
bagder Nov 11, 2025
f1f5cc7
cf-socket: split out the MTU and GRO setopts into sep functions
bagder Nov 11, 2025
f544eb9
docs: Line endings are no longer significant in test files
dfandrich Nov 11, 2025
d499aa5
mk-ca-bundle.pl: use `open()` with argument list to replace backticks
vszakats Nov 11, 2025
ebc5fea
autotools: drop autoconf <2.59 compatibility code (zz60-xc-ovr)
vszakats Nov 11, 2025
4841e42
badwords: re-sync with curl-www, fix issues found
vszakats Nov 11, 2025
4bb6a5d
tool_operate: use curlx_str_number intead of atoi
bagder Nov 12, 2025
2077211
src/checksrc: ban atoi use
bagder Nov 12, 2025
97b0abb
noproxy: replace atoi with curlx_str_number
bagder Nov 12, 2025
3b4bf3f
telnet: replace atoi for BINARY handling with curlx_str_number
bagder Nov 12, 2025
7aaf9a3
http: replace atoi use in Curl_http_follow with curlx_str_number
bagder Nov 12, 2025
7428060
libssh2: cleanup ssh_force_knownhost_key_type
bagder Nov 12, 2025
b2e0b4d
libssh2: replace atoi() in ssh_force_knownhost_key_type
bagder Nov 12, 2025
9c87b3e
OS400/makefile.sh: fix shellcheck warning SC2038 differently
vszakats Nov 12, 2025
a862920
hostip: don't store negative lookup on OOM
bagder Nov 12, 2025
96a5ce5
test2405: report `fd_count*` variables on failure
vszakats Nov 12, 2025
ebead15
lib1509: make callbacks static
vszakats Nov 12, 2025
2c7e179
test2405: split off H2 tests to new test 2407, fix callback prototype
vszakats Nov 12, 2025
a9ec2a6
tests/data: avoid tag markup in comments
vszakats Nov 12, 2025
1e5cb75
test363: delete stray character (typo) from a section tag
vszakats Nov 12, 2025
ce329af
test557: avoid `&` symbol in test output to be XML-friendly
vszakats Nov 11, 2025
d077d54
test1554: make test output XML-friendly
vszakats Nov 12, 2025
d7b0b65
test1404, 1547: replace `&` char in comment and name for XML-friendli…
vszakats Nov 12, 2025
8a19bf8
test2045: replace HTML multi-line comment markup with `#` comments
vszakats Nov 12, 2025
6b26d46
tests/data: use more `repeat` macro
vszakats Nov 12, 2025
4b2da75
test716: use `repeat` macro
vszakats Nov 12, 2025
c6eb9bb
_PROGRESS.md: add the E unit, mention kibibyte
bagder Nov 12, 2025
64c03bb
OS400: fix build
monnerat Nov 12, 2025
3d42510
runtests: allow `client/command` to span multiple lines, and use it
vszakats Nov 12, 2025
f1fec22
RELEASE-NOTES: synced
bagder Nov 13, 2025
296ffc4
schannel: replace atoi() with curlx_str_number()
bagder Nov 12, 2025
3f0629c
cookie: propagate errors better, cleanup the internal API
bagder Nov 12, 2025
e496bcf
FILEFORMAT.md: drop some text from the `command` section
vszakats Nov 12, 2025
4415e86
libtests: replace `atoi()` with `curlx_str_number()`
vszakats Nov 13, 2025
e18ad59
runtests: add missing Perl semicolon
vszakats Nov 13, 2025
85cfc15
RELEASE-NOTES: codespell
vszakats Nov 13, 2025
ca27404
tests/data: add `%includetext`, dedupe XML payloads into external file
vszakats Nov 13, 2025
78a610c
lib: rename curlx_timediff to curlx_timeleft_ms
icing Nov 12, 2025
cb2bcb6
lib: eliminate size_t casts
icing Nov 12, 2025
833c429
wolfssl: simplify wssl_send_earlydata
bagder Nov 13, 2025
bb1391f
tests/server: replace `atoi()` and `atol()` with `curlx_str_number()`
vszakats Nov 13, 2025
6384e2a
checksrc: disallow `atoi` and `atol` globally
vszakats Nov 12, 2025
f2a75a1
sws: repair --port, and accept any port
bagder Nov 13, 2025
75955c0
tool_operate: exit on curl_share_setopt errors
bagder Nov 13, 2025
0afb52a
code: minor indent fixes before closing braces
bagder Nov 13, 2025
42098d1
checksrc: verify close brace indent level
bagder Nov 11, 2025
e3e0559
config2setopts: exit if curl_url_set() fails on OOM
bagder Nov 13, 2025
96500f4
tidy-up: result code variable names in tests and examples
vszakats Nov 13, 2025
ae7b4ee
curl_setup.h: drop stray `#undef stat` (Windows)
vszakats Nov 13, 2025
3fc31c4
config2setopts: bail out if curl_url_get() returns OOM
bagder Nov 13, 2025
5f4cd4c
DEPRECATE: remove RTMP support in April 2026
bagder Nov 10, 2025
971e8d6
examples/multithread: fix race condition
icing Nov 14, 2025
9a633ec
connect: reshuffle Curl_timeleft_ms to avoid 'redundant condition'
bagder Nov 14, 2025
0abb722
getinfo: improve perf in debug mode
icing Nov 14, 2025
9f979ea
vtls: pinned key check
icing Nov 14, 2025
dc34498
cf-socket: trace ignored errors
icing Nov 14, 2025
3d91ca8
vquic-tls/gnutls: call Curl_gtls_verifyserver unconditionally
bagder Nov 14, 2025
f37c956
test07_22: fix flakiness
icing Nov 14, 2025
57b4fe1
limit-rate: add example using --limit-rate and --max-time together
nait-furry Nov 11, 2025
f3095f0
GHA/checksrc: check XML files for errors
vszakats Nov 14, 2025
af4c789
badwords: fix two exceptions and drop them
vszakats Nov 14, 2025
231e8a7
docs: fix checksrc warning, fix checkdocs CI filter
vszakats Nov 14, 2025
7bb59a7
badwords.pl: fix variable in printf mask
vszakats Nov 14, 2025
8a96809
mk-ca-bundle.pl: default to SHA256 fingerprints with `-t` option
vszakats Nov 4, 2025
2dc71ba
badwords: check indented lines in source code, fix fallouts
vszakats Nov 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 39 additions & 6 deletions .github/scripts/badwords.pl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,29 @@
my @whitelist;
my %alt;
my %exactcase;
my $skip_indented = 1;

if($ARGV[0] eq "-a") {
shift @ARGV;
$skip_indented = 0;
}
my %wl;
if($ARGV[0] eq "-w") {
shift @ARGV;
my $file = shift @ARGV;
open(W, "<$file");
while(<W>) {
if(/^#/) {
# allow #-comments
next;
}
if(/^([^:]*):(\d+):(.*)/) {
$wl{"$1:$2:$3"}=1;
#print STDERR "whitelisted $1:$2:$3\n";
}
}
close(W);
}

my @w;
while(<STDIN>) {
Expand All @@ -30,7 +53,7 @@
if($_ =~ /^---(.*)/) {
push @whitelist, $1;
}
elsif($_ =~ /^([^:=]*)([:=])(.*)/) {
elsif($_ =~ /^(.*)([:=])(.*)/) {
my ($bad, $sep, $better)=($1, $2, $3);
push @w, $bad;
$alt{$bad} = $better;
Expand All @@ -50,7 +73,7 @@ sub file {
my $in = $_;
$l++;
chomp $in;
if($in =~ /^ /) {
if($skip_indented && $in =~ /^ /) {
next;
}
# remove the link part
Expand All @@ -67,8 +90,16 @@ sub file {
($in =~ /^(.*)$w/ && $case) ) {
my $p = $1;
my $c = length($p)+1;

my $ch = "$f:$l:$w";
if($wl{$ch}) {
# whitelisted
print STDERR "$ch found but whitelisted\n";
next;
}

print STDERR "$f:$l:$c: error: found bad word \"$w\"\n";
printf STDERR " %4d | $in\n", $l;
printf STDERR " %4d | %s\n", $l, $in;
printf STDERR " | %*s^%s\n", length($p), " ",
"~" x (length($w)-1);
printf STDERR " maybe use \"%s\" instead?\n", $alt{$w};
Expand All @@ -79,9 +110,11 @@ sub file {
close(F);
}

my @files = @ARGV;

foreach my $each (@files) {
my @filemasks = @ARGV;
open(my $git_ls_files, '-|', 'git', 'ls-files', '--', @filemasks) or die "Failed running git ls-files: $!";
while(my $each = <$git_ls_files>) {
chomp $each;
file($each);
}
close $git_ls_files;
exit $errors;
61 changes: 32 additions & 29 deletions .github/scripts/badwords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,64 +3,63 @@
# SPDX-License-Identifier: curl
#
back-end:backend
e-mail:email
\be-mail[^/]:email
run-time:runtime
set-up:setup
tool chain:toolchain
tool-chain:toolchain
wild-card:wildcard
wild card:wildcard
\bit's:it is
aren't:are not
can't:cannot
could've:could have
couldn't:could not
didn't:did not
doesn't:does not
don't=do not
i'm:I am
you've:You have
we've:we have
we're:we are
we'll:we will
we'd:we would
they've:They have
they're:They are
they'll:They will
isn't:is not
it'd:it would
should've:should have
that's:that is
there's:there is
they'd:They would
you've:you have
they'll:They will
they're:They are
they've:They have
we'd:we would
we'll:we will
we're:we are
we've:we have
won't:will not
you'd:you would
you'll:you will
you're:you are
should've:should have
don't=do not
could've:could have
doesn't:does not
isn't:is not
aren't:are not
you've:you have
a html: an html
a http: an http
a ftp: an ftp
a IPv4: an IPv4
a IPv6: an IPv6
url =URL
internet\b=Internet
url [^=]=URL
[^/]internet\b=Internet
isation:ization
\bit's:it is
it'd:it would
there's:there is
[^.]\. And: Rewrite it somehow?
^(And|So|But) = Rewrite it somehow?
\. But: Rewrite it somehow?
\. So : Rewrite without "so" ?
dir :directory
dir [^=]=directory
Dir [^=]=Directory
sub-director:subdirector
can't:cannot
that's:that is
web page:webpage
host name\b:hostname
host names\b:hostnames
file name\b:filename
[^;<]file name\b:filename
file names\b:filenames
\buser name\b:username
\buser names\b:usernames
\bpass phrase:passphrase
didn't:did not
doesn't:does not
won't:will not
couldn't:could not
\bwill\b:rewrite to present tense
\b32bit=32-bit
\b64bit=64-bit
Expand All @@ -70,7 +69,11 @@ couldn't:could not
32-bits:32 bits or 32-bit
\bvery\b:rephrase using an alternative word
\bCurl\b=curl
\bcURL\b=curl
\bLibcurl\b=libcurl
\bLibCurl\b=libcurl
---WWW::Curl
---NET::Curl
---Curl Corporation
\bmanpages[^./&:-]:man pages
\bmanpage[^si./&:-]:man page
6 changes: 5 additions & 1 deletion .github/scripts/cleancmd.pl
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ sub process {
}
}

for my $f (@ARGV) {
my @filemasks = @ARGV;
open(my $git_ls_files, '-|', 'git', 'ls-files', '--', @filemasks) or die "Failed running git ls-files: $!";
while(my $f = <$git_ls_files>) {
chomp $f;
process($f);
}
close $git_ls_files;
4 changes: 2 additions & 2 deletions .github/scripts/codespell.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ set -eu

cd "$(dirname "${0}")"/../..

# shellcheck disable=SC2046
git ls-files -z | xargs -0 -r \
codespell \
--skip '.github/scripts/pyspelling.words' \
--skip '.github/scripts/typos.toml' \
Expand All @@ -16,4 +16,4 @@ codespell \
--skip 'scripts/wcurl' \
--ignore-regex '.*spellchecker:disable-line' \
--ignore-words '.github/scripts/codespell-ignore.words' \
$(git ls-files)
--
4 changes: 3 additions & 1 deletion .github/scripts/pyspelling.words
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ CSeq
csh
cshrc
CTRL
cURL
CURLcode
curldown
CURLE
Expand Down Expand Up @@ -245,6 +244,7 @@ et
etag
ETag
ETags
exa
exe
executables
EXPN
Expand Down Expand Up @@ -418,6 +418,7 @@ kerberos
Keychain
keychain
KiB
kibibyte
kickstart
Kirei
Knauf
Expand Down Expand Up @@ -492,6 +493,7 @@ Mavrogiannopoulos
Mbed
mbedTLS
md
mebibyte
Meglio
memdebug
MesaLink
Expand Down
10 changes: 7 additions & 3 deletions .github/scripts/shellcheck.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
#
# SPDX-License-Identifier: curl

# shellcheck disable=SC2046
shellcheck --exclude=1091 \
set -eu

cd "$(dirname "${0}")"/../..

git grep -z -l -E '^#!(/usr/bin/env bash|/bin/sh|/bin/bash)' | xargs -0 -r \
shellcheck --exclude=1091,2248 \
--enable=avoid-nullary-conditions,deprecate-which \
$(grep -l -E '^#!(/usr/bin/env bash|/bin/sh|/bin/bash)' $(git ls-files))
--
4 changes: 2 additions & 2 deletions .github/scripts/spacecheck.pl
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ sub eol_detect {

my $issues = 0;

open my $git_ls_files, '-|', 'git ls-files' or die "Failed running git ls-files: $!";
open(my $git_ls_files, '-|', 'git ls-files') or die "Failed running git ls-files: $!";
while(my $filename = <$git_ls_files>) {
chomp $filename;

open my $fh, '<', $filename or die "Cannot open '$filename': $!";
open(my $fh, '<', $filename) or die "Cannot open '$filename': $!";
my $content = do { local $/; <$fh> };
close $fh;

Expand Down
8 changes: 5 additions & 3 deletions .github/scripts/yamlcheck.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@

set -eu

# shellcheck disable=SC2046
cd "$(dirname "${0}")"/../..

git ls-files '*.yaml' '*.yml' -z | xargs -0 -r \
yamllint \
--format standard \
--strict \
--config-data "$(dirname "$0")/yamlcheck.yaml" \
$(git ls-files '*.yaml' '*.yml')
--config-data .github/scripts/yamlcheck.yaml \
--
14 changes: 6 additions & 8 deletions .github/workflows/checkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ name: 'Docs'
- '*/ci'
paths:
- '.github/workflows/checkdocs.yml'
- '.github/scripts/**'
- '.github/scripts/mdlinkcheck'
- '/scripts/**'
- '**.md'
Expand All @@ -25,6 +26,7 @@ name: 'Docs'
- '.github/workflows/checkdocs.yml'
- '.github/scripts/**'
- '.github/scripts/mdlinkcheck'
- '/scripts/**'
- '**.md'
- 'docs/*'

Expand Down Expand Up @@ -66,10 +68,10 @@ jobs:
# JSON
#
# - name: 'trim headers off all *.md files'
# run: git ls-files -z '*.md' | xargs -0 -n1 .github/scripts/trimmarkdownheader.pl
# run: git ls-files '*.md' -z | xargs -0 -n1 .github/scripts/trimmarkdownheader.pl
#
# - name: 'check prose'
# run: git ls-files -z '*.md' | grep -Evz 'CHECKSRC\.md|DISTROS\.md|curl_mprintf\.md|CURLOPT_INTERFACE\.md|interface\.md' | xargs -0 proselint -- README
# run: git ls-files '*.md' -z | grep -Evz 'CHECKSRC\.md|DISTROS\.md|curl_mprintf\.md|CURLOPT_INTERFACE\.md|interface\.md' | xargs -0 proselint -- README
#
# # This is for CHECKSRC and files with aggressive exclamation mark needs
# - name: 'create second proselint config'
Expand Down Expand Up @@ -109,9 +111,7 @@ jobs:
persist-credentials: false

- name: 'trim all *.md files in docs/'
run: |
# shellcheck disable=SC2046
.github/scripts/cleancmd.pl $(find docs -name '*.md')
run: .github/scripts/cleancmd.pl 'docs/*.md'

- name: 'install'
run: |
Expand Down Expand Up @@ -140,9 +140,7 @@ jobs:
persist-credentials: false

- name: 'badwords'
run: |
# shellcheck disable=SC2046
.github/scripts/badwords.pl < .github/scripts/badwords.txt $(git ls-files '**.md') docs/TODO docs/KNOWN_BUGS packages/OS400/README.OS400
run: .github/scripts/badwords.pl '**.md' docs/TODO docs/KNOWN_BUGS packages/OS400/README.OS400 < .github/scripts/badwords.txt

- name: 'verify synopsis'
run: .github/scripts/verify-synopsis.pl docs/libcurl/curl*.md
Expand Down
28 changes: 19 additions & 9 deletions .github/workflows/checksrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ jobs:
- name: 'pytype'
run: |
source ~/venv/bin/activate
find . -name '*.py' -exec pytype -j auto -k {} +
find . -name '*.py' -exec pytype -j auto -k -- {} +

- name: 'ruff'
run: |
Expand All @@ -103,10 +103,6 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false

- name: 'install pmccabe'
run: |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
Expand All @@ -115,9 +111,25 @@ jobs:
sudo apt-get -o Dpkg::Use-Pty=0 install \
pmccabe

- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false

- name: 'check scores'
run: ./scripts/top-complexity

xmllint:
name: 'xmllint'
runs-on: macos-latest
timeout-minutes: 1
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false

- name: 'check'
run: git grep -z -i -l -E '^<\?xml' | xargs -0 -r xmllint >/dev/null

miscchecks:
name: 'misc checks'
runs-on: ubuntu-latest
Expand Down Expand Up @@ -162,9 +174,7 @@ jobs:
- name: 'yamlcheck'
run: .github/scripts/yamlcheck.sh

# we allow some extra in source code
- name: 'badwords'
run: |
# shellcheck disable=SC2046
grep -Ev '(\\bwill| url | dir )' .github/scripts/badwords.txt | \
.github/scripts/badwords.pl $(git ls-files -- src lib include)
# we allow some extra in source code
grep -Ev '(\\bwill| But: | So : )' .github/scripts/badwords.txt | .github/scripts/badwords.pl -a src lib include docs/examples
Loading