1
0
mirror of https://github.com/nvm-sh/nvm.git synced 2026-10-24 23:33:43 +08:00
Commit Graph

60 Commits

Author SHA1 Message Date
Jordan Harband
b17550a0b9 [Robustness] install.sh: nvm_download: avoid eval so arguments aren't re-parsed by the shell
`install.sh` has its own `nvm_download`,
which joined `"$@"` into a single string with `nvm_echo` and rewrote the curl-style flags with `sed`,
then ran the result through `eval command wget $ARGS`.
Flattening argv into a string is the root cause: every argument was re-parsed by the shell,
so any shell metacharacter in a legitimate value was interpreted rather than passed through.
An `$NVM_DIR` containing a space silently word-split and wrote to the wrong path,
an apostrophe or parentheses were a syntax error,
a glob character expanded against the cwd,
and an `$NVM_SOURCE` mirror URL with an `&` in its query string backgrounded `wget` and ran the remainder as a bogus command.
The `sed` rewrites were also unanchored substring replacements that would mangle a URL legitimately containing `-o `,
and `ARGS` was an undeclared global that `nvm_reset` never unset.

Translate the flags per-argument with a POSIX `set --` loop and invoke `command wget "$@"` instead,
so each argument stays a literal argv element.
This is the same shape `nvm.sh`'s `nvm_download` has used since 6d870d18,
and it stops the two implementations from diverging.

Unlike `nvm.sh`, no mirror-supplied data reaches this function:
its arguments come only from `$NVM_SOURCE`, `$NVM_INSTALL_GITHUB_REPO`, `$NVM_INSTALL_VERSION`, `$NVM_DIR`, `$XDG_CONFIG_HOME`, and `$HOME`, and `install.sh`'s `nvm_latest_version` is a hardcoded string rather than `nvm.sh`'s `nvm_get_latest`.
This is therefore a robustness fix and not a security one,
since the only party who can influence these arguments is the one already running the installer.
2026-07-15 15:55:21 -07:00
Jordan Harband
52047edfb1 [Tests] install_nvm_from_git: don't fail when master is at the latest release tag
The avoid_ref check read HEAD's tags via `git for-each-ref` with no --git-dir,
so it inspected the caller's checkout instead of the installed clone.
Whether it passed then depended on which ref triggered the workflow
(the same commit passed when built as the v0.40.6 tag but failed when built as master, since only the former had the tag present),
not on the install result.
Query the installed clone and compare commits,
so a HEAD that is legitimately the latest release commit
(eg master right after a release)
is exempted deterministically.
2026-07-15 15:02:22 -07:00
Jordan Harband
84079dbff3 [Tests] install_nvm_from_git: stop git background gc/maintenance racing with cleanup
The test's `rm -rf "$NVM_DIR"` intermittently failed with
`rm: cannot remove...: Directory not empty`
and aborted under `set -e`.
Cause: after the clone/fetch, git can spawn a detached background gc/maintenance process that keeps writing into the clone dir while `rm -rf` runs (a concurrent writer makes the final rmdir fail).
It is not egress- or version-related
(it reproduces with all endpoints allowed),
and it is environment-timing dependent
(recently became consistent on the GitHub runners).

Disable git's background work for the test (gc.autoDetach / maintenance.auto)
so all git operations finish synchronously, and retry the rm once as a safety net.
2026-06-03 20:12:26 -07:00
Jordan Harband
61c9ff7371 [Tests] install_nvm_from_git: fix malformed test command (missing space before ])
`[ "${head_ref}" != "${avoid_ref}"]` is missing the space before the closing bracket,
so the shell prints `[: missing ']'` and the avoid_ref assertion never actually runs
(it is inside an `if` condition, so the error was non-fatal and silently disabled the check)
2026-06-03 14:53:48 -07:00
Jordan Harband
25f836f81b [Fix] install.sh: check mkdir return codes
If directory creation fails (e.g., permissions), the script would continue and fail with confusing errors later.
Fail early with a clear error message instead.

Bugs introduced in 68bf93514b, 6cee20a071, and 703babe60a.
2026-03-14 14:44:24 -07:00
Jordan Harband
581317d05c [Fix] install.sh: fix POSIX compliance, printf format strings, and profile detection
- 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 in a24ff3e605, b6f1c156da, and a461a0fffc (PR https://github.com/nvm-sh/nvm/pull/1605).
2026-03-14 14:41:11 -07:00
Wes Todd
ec8906b284 [Fix] install.sh: do not log when user has requested no profile modifications
[Tests] `install.sh`: add tests for PROFILE=/dev/null profile skip

Verify that when PROFILE="/dev/null" is set:
- The "Profile not found" warning is suppressed
- Profile modification is skipped as expected

Co-authored-by: Wes Todd <wes@wesleytodd.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2019-12-05 19:30:26 -08:00
Jordan Harband
0641363102 [Tests] install.sh: clean up nvm_detect_profile tests 2024-11-08 10:52:41 +00:00
Jordan Harband
9659af6c16 [Tests] nvm_detect_profile: refactor 2024-11-12 13:31:36 -08:00
menaechmi
abd02e5aae [Fix] install.sh: fix failing install tests (#3458) 2024-11-12 11:57:02 -06:00
menaechmi
cd22c84026 [New] install.sh: add $ZDOTDIR to zsh search
Fixes #3128
2024-11-06 16:53:58 -06:00
Jordan Harband
0ce8f5a52f [Fix] nvm_download: ensure all args are quoted
Fixes #3411.
2024-08-20 22:33:38 -07:00
Jordan Harband
0d53381666 [Tests] move sourcing suite to GHA 2024-08-22 13:30:55 -07:00
Jordan Harband
4bdd57ba0f [Fix] install.sh: when NVM_INSTALL_GITHUB_REPO is set, issue a warning
This should only annoy those testing their PRs; real users should never set this env var
2023-11-02 21:10:09 -07:00
Jordan Harband
55075db96d [Tests] add some nvm_do_install tests 2022-12-27 22:57:07 -08:00
Jordan Harband
dc691121b8 [Tests] improve debug output on failure 2022-12-27 21:41:39 -08:00
Jordan Harband
788c0a425e [meta] use HEAD instead of master where possible 2022-12-23 12:53:40 -08:00
Maxim Lepekha
7c929f8742 [Fix] install.sh: support ~/.zprofile 2022-09-21 22:38:50 +02:00
Thomas Geirhovd
e98e9d9e4b [Fix] install: Detect correct profile based on $SHELL var 2021-08-12 15:51:32 +02:00
Sladyn Nunes
2b5e53fcd5 [Fix] install script: check the proper version; fetch tags also
Co-authored-by: Sladyn Nunes <sladynnunes98@gmail.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2021-04-01 19:06:40 +05:30
nmarghetti
502089ae30 [New] install script: Allow installation from other repository also for git method 2021-01-14 00:10:19 +01:00
nmarghetti
60e78d3ec1 [Tests] Add unit test for nvm_download 2021-01-13 02:26:38 +01:00
nmarghetti
9f3397afa4 [Tests] add nvm_grep to install script, fix tests 2021-01-08 18:54:40 +01:00
nmarghetti
4e9df33cb7 [New] install script: Allow installation from other repository 2020-12-27 10:09:29 +01:00
David Moles
d4eba354b5 [Fix] install: Ignore npm command under $NVM_DIR when checking for global modules 2020-11-30 15:22:24 -08:00
Erik Lilja
8542df4ac5 [New] add support for $XDG_CONFIG_HOME 2018-08-14 21:45:40 +02:00
Spike Grobstein
9854928ba9 [New] install.sh: allow user to explicitly opt out of nvm adding the source string
this is done by checking if the user supplies `PROFILE=/dev/null` when running `install.sh`, the `nvm_detect_profile` function will not output any strings, causing `nvm_do_install` to skip adding `SOURCE_STR`.
2018-05-03 08:22:07 -07:00
Brian M. Jemilo II
68fe26a5e4 [Fix] Add autocompletion support to zsh
Fixes #1707.
2018-04-09 14:54:28 -05:00
Peter Dave Hello
750571056c [Fix] Correct most of the wrong indentation 2018-02-26 02:20:21 +08:00
Peter Dave Hello
9f34b3e95c Remove trailing space 2018-02-26 01:03:01 +08:00
Peter Dave Hello
2cd2c0f72e Remove useless trailing newlines 2018-02-26 01:01:30 +08:00
Yannick Ihmels
7ca8acc98d [Docs] [Tests] Add escape sequences; add test for aliased . 2018-01-13 21:25:30 +01:00
Ahmad Magdy
bacdd95591 Update test/install_script/nvm_install_with_node_version to use nvm ls 8 instead of grep! 2017-11-30 15:33:01 +01:00
Ahmad Magdy
4b0563093c Add test nvm_install_with_node_version under test/install_script 2017-11-30 15:23:37 +01:00
Peter Dave Hello
9593616b8c [Fix] NVM_PROFILE bash/zsh detection in installation 2017-03-15 14:34:28 +08:00
Jordan Harband
6fc0241c21 [Fix] install.sh: only un-interpolate $HOME for the profile source string.
Fixes #1384.
2017-02-12 00:32:49 -08:00
Ryan Wheale
1b2305232f [install script] Use $HOME variable in NVM_DIR 2017-01-12 10:55:56 -07:00
Peter Dave Hello
f7763c8ba9 [Tests] die() in tests should quote "$@" for echo 2016-11-07 03:34:36 +08:00
Qiangjun Ran
cadbbced20 [Tests] Replace all dots with backslash dots 2016-11-03 23:44:59 -07:00
Jordan Harband
ecba036cbf [Tests] show type output for debugging 2015-12-21 23:59:44 -08:00
Xavier Cambar
6cee20a071 testing NVM_DIR 2016-06-28 12:36:08 +02:00
Matthew Campbell
4f4ff208eb Improve error messages 2016-01-02 11:16:50 -05:00
Matthew Campbell
78fee866f5 Remove usage of declare 2016-01-01 22:33:45 -05:00
Matthew Campbell
8dc53d4dd5 Refactor and fix nvm_detect_profile tests
close #833
close #957
2016-01-01 20:45:36 -05:00
Matthew Campbell
645bda4987 Addresses comments to close #833 2016-01-01 14:09:35 -05:00
David Mankin
918fcb4bd2 PROFILE env var should override detected profile
Add tests for PROFILE overriding detected files
2016-01-01 14:00:36 -05:00
David Mankin
cb138a1815 Fix error messages in tests 2016-01-01 13:34:34 -05:00
Cristian Consonni
c37dbbecb4 Detect shell type from $SHELL variable instead of .$SHELLrc files 2015-07-19 02:03:15 +02:00
Jordan Harband
bb2fe618cb The install script only runs in bash. 2015-04-27 16:55:21 -07:00
Jordan Harband
f0d81e2d33 Revert "install: adding some debugging output"
This reverts commit c8efe3d28a.

Conflicts:
	install.sh
2015-02-09 17:16:56 -08:00