diff --git a/libexec/rbenv-version-file-read b/libexec/rbenv-version-file-read index 69ec78b9..5a1d7a3f 100755 --- a/libexec/rbenv-version-file-read +++ b/libexec/rbenv-version-file-read @@ -8,13 +8,8 @@ VERSION_FILE="$1" if [ -e "$VERSION_FILE" ]; then # Read the first non-whitespace word from the specified version file. # Be careful not to load it whole in case there's something crazy in it. - version="" - while read -a words; do - word="${words[0]}" - if [ -z "$version" ] && [ -n "$word" ]; then - version="$word" - fi - done < <( cat "$VERSION_FILE" && echo ) + words=( $(head -c 1024 "$VERSION_FILE") ) + version="${words[0]}" if [ -n "$version" ]; then echo "$version" diff --git a/test/version-file-read.bats b/test/version-file-read.bats index 8002388d..66bd46fa 100644 --- a/test/version-file-read.bats +++ b/test/version-file-read.bats @@ -17,12 +17,24 @@ setup() { assert_failure "" } +@test "fails for blank file" { + echo > my-version + run rbenv-version-file-read my-version + assert_failure "" +} + @test "reads simple version file" { cat > my-version <<<"1.9.3" run rbenv-version-file-read my-version assert_success "1.9.3" } +@test "ignores leading spaces" { + cat > my-version <<<" 1.9.3" + run rbenv-version-file-read my-version + assert_success "1.9.3" +} + @test "reads only the first word from file" { cat > my-version <<<"1.9.3-p194@tag 1.8.7 hi" run rbenv-version-file-read my-version @@ -37,3 +49,18 @@ IN run rbenv-version-file-read my-version assert_success "1.8.7" } + +@test "ignores leading blank lines" { + cat > my-version < my-version + run rbenv-version-file-read my-version + assert_success "1.8.7" +}