diff --git a/nvm.sh b/nvm.sh index cc8beee..aafb13a 100644 --- a/nvm.sh +++ b/nvm.sh @@ -821,6 +821,9 @@ nvm() { echo "System version of node not found." >&2 return 127 fi + elif [ "_$VERSION" = "_∞" ]; then + echo "The alias \"$2\" leads to an infinite loop. Aborting." >&2 + return 8 fi local NVM_VERSION_DIR diff --git "a/test/fast/Running \"nvm use foo\" where \"foo\" is circular aborts" "b/test/fast/Running \"nvm use foo\" where \"foo\" is circular aborts" new file mode 100755 index 0000000..53f67fa --- /dev/null +++ "b/test/fast/Running \"nvm use foo\" where \"foo\" is circular aborts" @@ -0,0 +1,22 @@ +#!/bin/sh + +die () { echo $@ ; cleanup ; exit 1; } + +cleanup() { + rm -rf ../../alias/foo +} + +. ../../nvm.sh + +echo 'foo' > ../../alias/foo + +OUTPUT="$(nvm use foo 2>&1)" +EXPECTED_OUTPUT='The alias "foo" leads to an infinite loop. Aborting.' +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ + || die "'nvm use foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" + +EXIT_CODE="$(nvm use foo 2>/dev/null ; echo $?)" +[ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8; got $EXIT_CODE" + +cleanup; +