From ccf19d59e7da30ddc7bdbd0c83a439361ec9113b Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 23 Jun 2026 23:14:24 +0200 Subject: [PATCH] scripts: use end-of-options marker in `cd`, `mkdir`, `mv`, `sha256sum` commands Where missing. To avoid passing an option by accident. End-of-option marker (`--`) is not POSIX, but most of these scripts are internal and/or CI-focused, where this is fine. `maketgz` and `verify-release` are meant for public use, and I asses this is fine too, but let us know if this causes issues in real world envs. Also: - maketgz: pass args with `:?` to `rm -rf`, where missing. Cannot cause an actual issue with current code. - verified `cp`, `rm` instances too, but none were affected. - tests/cmake/test.sh: replace `$PWD` with `$(pwd)` for sturdiness. - appveyor.sh: replace `$PWD` with `$(pwd)` for sturdiness. Assisted-by: Dan Fandrich Follow-up to 6aab1dc2639d4fc8aaaa1190914b0491e029dace #19450 Closes #22150 --- .github/scripts/codespell.sh | 2 +- .github/scripts/shellcheck.sh | 2 +- .github/scripts/typos.sh | 2 +- .github/scripts/yamlcheck.sh | 2 +- appveyor.sh | 4 ++-- scripts/cmakelint.sh | 2 +- scripts/maketgz | 8 ++++---- scripts/perlcheck.sh | 2 +- scripts/verify-release | 6 +++--- tests/cmake/test.sh | 10 +++++----- tests/ech_tests.sh | 2 +- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/scripts/codespell.sh b/.github/scripts/codespell.sh index c5ddf90a47..f93a788a1e 100755 --- a/.github/scripts/codespell.sh +++ b/.github/scripts/codespell.sh @@ -5,7 +5,7 @@ set -eu -cd "$(dirname "${0}")"/../.. +cd -- "$(dirname "${0}")"/../.. git ls-files -z | xargs -0 -r \ codespell \ diff --git a/.github/scripts/shellcheck.sh b/.github/scripts/shellcheck.sh index 59b49131ac..3153a2c7a8 100755 --- a/.github/scripts/shellcheck.sh +++ b/.github/scripts/shellcheck.sh @@ -5,7 +5,7 @@ set -eu -cd "$(dirname "${0}")"/../.. +cd -- "$(dirname "${0}")"/../.. git grep -z -l -E '^#!(/usr/bin/env bash|/bin/sh|/bin/bash)' | xargs -0 -r \ shellcheck --exclude=1091,2248 \ diff --git a/.github/scripts/typos.sh b/.github/scripts/typos.sh index 76735c1d9f..39a7faa81e 100755 --- a/.github/scripts/typos.sh +++ b/.github/scripts/typos.sh @@ -5,7 +5,7 @@ set -eu -cd "$(dirname "${0}")"/../.. +cd -- "$(dirname "${0}")"/../.. git ls-files | typos \ --isolated \ diff --git a/.github/scripts/yamlcheck.sh b/.github/scripts/yamlcheck.sh index 4bdeff45cb..402aa088fc 100755 --- a/.github/scripts/yamlcheck.sh +++ b/.github/scripts/yamlcheck.sh @@ -5,7 +5,7 @@ set -eu -cd "$(dirname "${0}")"/../.. +cd -- "$(dirname "${0}")"/../.. git ls-files '*.yaml' '*.yml' -z | xargs -0 -r \ yamllint \ diff --git a/appveyor.sh b/appveyor.sh index 8852caec9b..e9900191c5 100644 --- a/appveyor.sh +++ b/appveyor.sh @@ -61,7 +61,7 @@ if [ -n "${CMAKE_GENERATOR:-}" ]; then curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 --retry-connrefused \ --location --proto-redir =https "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${fn}.zip" --output pkg.bin sha256sum pkg.bin && sha256sum pkg.bin | grep -qwF -- "${CMAKE_SHA256}" && 7z x -y pkg.bin >/dev/null && rm -f pkg.bin - PATH="$PWD/${fn}/bin:$PATH" + PATH="$(pwd)/${fn}/bin:$PATH" fi # Set env CHKPREFILL to the value '_chkprefill' to compare feature detection @@ -89,7 +89,7 @@ if [ -n "${CMAKE_GENERATOR:-}" ]; then fi echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 - [[ "${CMAKE_GENERATE:-}" != *'-DBUILD_SHARED_LIBS=OFF'* ]] && PATH="$PWD/_bld/lib/${PRJ_CFG}:$PATH" + [[ "${CMAKE_GENERATE:-}" != *'-DBUILD_SHARED_LIBS=OFF'* ]] && PATH="$(pwd)/_bld/lib/${PRJ_CFG}:$PATH" [[ "${CMAKE_GENERATE:-}" = *'-DCURL_USE_OPENSSL=ON'* ]] && { PATH="${openssl_root}:$PATH"; cp "${openssl_root}"/*.dll "_bld/src/${PRJ_CFG}"; } curl="_bld/src/${PRJ_CFG}/curl.exe" else diff --git a/scripts/cmakelint.sh b/scripts/cmakelint.sh index 3fe258346d..150c21f291 100755 --- a/scripts/cmakelint.sh +++ b/scripts/cmakelint.sh @@ -41,7 +41,7 @@ set -eu -cd "$(dirname "$0")"/.. +cd -- "$(dirname "$0")"/.. { if [ -n "${1:-}" ]; then diff --git a/scripts/maketgz b/scripts/maketgz index e6bc53dcdc..5ee69983fd 100755 --- a/scripts/maketgz +++ b/scripts/maketgz @@ -180,7 +180,7 @@ fi retar() { tempdir=$1 - rm -rf "$tempdir" + rm -rf "${tempdir:?}" mkdir "$tempdir" cd "$tempdir" gzip -dc "../$targz" | tar -xf - @@ -188,7 +188,7 @@ retar() { tar --create --format=ustar --owner=0 --group=0 --numeric-owner --sort=name curl-* | gzip --best --no-name > out.tar.gz mv out.tar.gz ../ cd .. - rm -rf "$tempdir" + rm -rf "${tempdir:?}" } retar ".tarbuild" @@ -218,14 +218,14 @@ gzip -dc "$targz" | xz -6e - > "$xz" # Now make a zip archive from the tar.gz original # makezip() { - rm -rf "$tempdir" + rm -rf "${tempdir:?}" mkdir "$tempdir" cd "$tempdir" gzip -dc "../$targz" | tar -xf - find . | sort | zip -9 -X "$zip" -@ >/dev/null mv "$zip" ../ cd .. - rm -rf "$tempdir" + rm -rf "${tempdir:?}" } zip="curl-$version.zip" diff --git a/scripts/perlcheck.sh b/scripts/perlcheck.sh index 28c5be2c16..92970e4015 100755 --- a/scripts/perlcheck.sh +++ b/scripts/perlcheck.sh @@ -30,7 +30,7 @@ set -eu -cd "$(dirname "$0")"/.. +cd -- "$(dirname "$0")"/.. procs=6 command -v nproc >/dev/null && procs="$(nproc)" diff --git a/scripts/verify-release b/scripts/verify-release index fd7aa3ded6..5a231c485e 100755 --- a/scripts/verify-release +++ b/scripts/verify-release @@ -63,7 +63,7 @@ mkdir -p _tarballs rm -rf _tarballs/* # checksum the original tarball to compare with later -sha256sum "$tarball" >_tarballs/checksum +sha256sum -- "$tarball" >_tarballs/checksum # extract version number from file name tarver=$(echo "$tarball" | sed 's/curl-\([0-9.]*\)\..*/\1/') @@ -85,7 +85,7 @@ if test "$withgit" = 0; then tar xf "$tarball" # move away the original tarball - mv "$tarball" "_tarballs/orig-$tarball" + mv -- "$tarball" "_tarballs/orig-$tarball" pwd=$(pwd) cd "curl-$curlver" @@ -101,7 +101,7 @@ else echo "*** Use git tag $tag" # move away the original tarball - mv "$tarball" "_tarballs/orig-$tarball" + mv -- "$tarball" "_tarballs/orig-$tarball" prevtag=$(git symbolic-ref -q --short HEAD || git rev-parse HEAD) git checkout -f "$tag" diff --git a/tests/cmake/test.sh b/tests/cmake/test.sh index bcc1bd37dc..b9bb1fc771 100755 --- a/tests/cmake/test.sh +++ b/tests/cmake/test.sh @@ -7,7 +7,7 @@ set -eu -cd "$(dirname "$0")" +cd -- "$(dirname "$0")" mode="${1:-all}"; shift @@ -31,7 +31,7 @@ runresults() { if [ "${mode}" = 'all' ] || [ "${mode}" = 'ExternalProject' ]; then (cd "${src}"; git archive --format=tar HEAD) | gzip > source.tar.gz - src="${PWD}/source.tar.gz" + src="$(pwd)/source.tar.gz" sha="$(sha256sum "${src}" | grep -a -i -o -w -E '[0-9a-f]{64}')" bldc='bld-externalproject' rm -rf "${bldc}" @@ -43,7 +43,7 @@ if [ "${mode}" = 'all' ] || [ "${mode}" = 'ExternalProject' ]; then fi if [ "${mode}" = 'all' ] || [ "${mode}" = 'FetchContent' ]; then - src="${PWD}/${src}" + src="$(pwd)/${src}" bldc='bld-fetchcontent' rm -rf "${bldc}" "${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \ @@ -70,9 +70,9 @@ if [ "${mode}" = 'all' ] || [ "${mode}" = 'add_subdirectory' ]; then fi if [ "${mode}" = 'all' ] || [ "${mode}" = 'find_package' ]; then - src="${PWD}/${src}" + src="$(pwd)/${src}" bldp='bld-curl' - prefix="${PWD}/${bldp}/_pkg" + prefix="$(pwd)/${bldp}/_pkg" rm -rf "${bldp}" "${cmake_provider}" -B "${bldp}" -S "${src}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} ${TEST_CMAKE_FLAGS_PROVIDER:-} "$@" \ -DBUILD_SHARED_LIBS=ON \ diff --git a/tests/ech_tests.sh b/tests/ech_tests.sh index 5b6f60d555..72a2d454e4 100755 --- a/tests/ech_tests.sh +++ b/tests/ech_tests.sh @@ -211,7 +211,7 @@ have_portsblocked="no" NOW=$(whenisitagain) BINNAME=$(basename "$0" .sh) if [ ! -d "$LTOP" ]; then - mkdir -p "$LTOP" + mkdir -p -- "$LTOP" fi if [ ! -d "$LTOP" ]; then echo "Cannot see $LTOP for logs - exiting"