mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-04-03 11:34:50 +08:00
- Use `=` instead of `==` for string comparison (POSIX compliance) - Use `printf '%b'` instead of variable as format string (prevents `%` characters in paths from being interpreted as format specifiers) - Fix `TRIED_PROFILE` to reference `PROFILE` instead of `NVM_PROFILE` which is known to be empty at that point Bugs introduced ina24ff3e605,b6f1c156da, anda461a0fffc(PR https://github.com/nvm-sh/nvm/pull/1605).
71 lines
1.8 KiB
Bash
Executable File
71 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () { echo "$@" ; cleanup ; exit 1; }
|
|
|
|
cleanup() {
|
|
unset -f install_nvm_from_git install_nvm_as_script nvm_detect_profile nvm_has nvm_install_dir
|
|
unset -f nvm_check_global_modules nvm_install_node
|
|
unset -f setup cleanup die
|
|
unset NVM_ENV METHOD PROFILE
|
|
rm -rf "${TMPDIR_FOR_TEST-}" 2>/dev/null
|
|
}
|
|
|
|
setup() {
|
|
NVM_ENV=testing \. ../../install.sh
|
|
|
|
# Mock installation functions to do nothing
|
|
install_nvm_from_git() { :; }
|
|
install_nvm_as_script() { :; }
|
|
nvm_check_global_modules() { :; }
|
|
nvm_install_node() { :; }
|
|
|
|
# Mock nvm_has to return true for git
|
|
nvm_has() {
|
|
case "$1" in
|
|
git) return 0 ;;
|
|
xcode-select) return 1 ;;
|
|
*) return 1 ;;
|
|
esac
|
|
}
|
|
}
|
|
|
|
setup
|
|
|
|
#
|
|
# Test: printf calls in nvm_do_install should not interpret % in paths
|
|
# When NVM_DIR contains printf format specifiers like %s or %d,
|
|
# the output should contain them literally, not interpret them.
|
|
#
|
|
|
|
TMPDIR_FOR_TEST="$(mktemp -d)"
|
|
PERCENT_DIR="${TMPDIR_FOR_TEST}/nvm_%s_test"
|
|
mkdir -p "${PERCENT_DIR}"
|
|
|
|
# Copy nvm.sh to the temp dir so sourcing succeeds
|
|
cp ../../nvm.sh "${PERCENT_DIR}/nvm.sh"
|
|
|
|
# Mock nvm_install_dir to return our percent-containing path
|
|
nvm_install_dir() {
|
|
nvm_echo "${PERCENT_DIR}"
|
|
}
|
|
|
|
# Mock nvm_detect_profile to return empty so we hit the "Profile not found" branch
|
|
# which calls: command printf '%b' "${SOURCE_STR}"
|
|
nvm_detect_profile() {
|
|
echo ""
|
|
}
|
|
|
|
OUTPUT="$(PROFILE='' METHOD='' NVM_DIR="${PERCENT_DIR}" nvm_do_install 2>&1)"
|
|
|
|
# The SOURCE_STR should contain the %s from the path literally
|
|
if ! echo "${OUTPUT}" | grep -q '%s'; then
|
|
die "printf should not have consumed the %s in the path. Output: ${OUTPUT}"
|
|
fi
|
|
|
|
# Also verify via the "Profile not found" branch that SOURCE_STR was printed correctly
|
|
if ! echo "${OUTPUT}" | grep -q 'nvm_%s_test'; then
|
|
die "Expected nvm_%s_test in output but got: ${OUTPUT}"
|
|
fi
|
|
|
|
cleanup
|