Fix error "bad array subscript"
Caused by _get_comp_words_by_ref() with cursor at position 0. Patch by Igor Murzov (Debian: #559953)
This commit is contained in:
parent
6e4912d9cc
commit
fc96a951b7
2
CHANGES
2
CHANGES
@ -40,6 +40,8 @@ bash-completion (2.x)
|
||||
[ Freddy Vulto ]
|
||||
* Improve __reassemble_comp_words_by_ref() to not create words of
|
||||
characters-to-exclude (Alioth: #313057)
|
||||
* Improve _get_comp_words_by_ref() with cursor at position 0. Patch by
|
||||
Igor Murzov (Debian: #559953)
|
||||
|
||||
[ Mattias Ulbrich ]
|
||||
* Make java class completion suggest packages.
|
||||
|
@ -450,7 +450,7 @@ _get_comp_words_by_ref()
|
||||
|
||||
[[ $vcur ]] && { upvars+=("$vcur" ); upargs+=(-v $vcur "$cur" ); }
|
||||
[[ $vcword ]] && { upvars+=("$vcword"); upargs+=(-v $vcword "$cword"); }
|
||||
[[ $vprev ]] && { upvars+=("$vprev" ); upargs+=(-v $vprev
|
||||
[[ $vprev && $cword -ge 1 ]] && { upvars+=("$vprev" ); upargs+=(-v $vprev
|
||||
"${words[cword - 1]}"); }
|
||||
[[ $vwords ]] && { upvars+=("$vwords"); upargs+=(-a${#words[@]} $vwords
|
||||
"${words[@]}"); }
|
||||
|
@ -48,16 +48,27 @@ assert_bash_list {" a"} $cmd $test
|
||||
sync_after_int
|
||||
|
||||
|
||||
set test "|a "; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE='a '; COMP_POINT=0; _get_comp_words_by_ref cur prev; echo "$cur $prev"}
|
||||
set test "|a"; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE='a'; COMP_POINT=0; \
|
||||
unset cur prev; _get_comp_words_by_ref cur prev; echo "$cur $prev"}
|
||||
assert_bash_list {" "} $cmd $test
|
||||
|
||||
|
||||
sync_after_int
|
||||
|
||||
|
||||
set test " | a "; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE=' a '; COMP_POINT=1; _get_comp_words_by_ref cur prev; echo "$cur $prev"}
|
||||
set test "|a \$"; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE='a '; COMP_POINT=0; \
|
||||
unset cur prev; _get_comp_words_by_ref cur prev; echo "$cur $prev"}
|
||||
assert_bash_list {" "} $cmd $test
|
||||
|
||||
|
||||
sync_after_int
|
||||
|
||||
|
||||
set test " | a \$"; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE=' a '; COMP_POINT=1; \
|
||||
unset cur prev; _get_comp_words_by_ref cur prev; echo "$cur $prev"}
|
||||
assert_bash_list {" "} $cmd $test
|
||||
|
||||
|
||||
|
35
test/unit/_init_completion.exp
Normal file
35
test/unit/_init_completion.exp
Normal file
@ -0,0 +1,35 @@
|
||||
proc setup {} {
|
||||
save_env
|
||||
}
|
||||
|
||||
|
||||
proc teardown {} {
|
||||
assert_bash_exec { \
|
||||
unset COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS cur prev words cword\
|
||||
}
|
||||
assert_env_unmodified {
|
||||
/COMPREPLY=/d
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
setup
|
||||
|
||||
|
||||
set test "function should not pollute environment"
|
||||
# NOTE: A possible environment pollution is detected by assert_env_modified() in teardown()
|
||||
assert_bash_exec {foo() { local cur prev words cword; _init_completion; }; foo; unset foo} $test
|
||||
|
||||
|
||||
sync_after_int
|
||||
|
||||
|
||||
set test "|a"; # | = cursor position
|
||||
set cmd {COMP_WORDS=(a); COMP_CWORD=0; COMP_LINE='a'; COMP_POINT=0; _init_completion; echo "$cur $prev"}
|
||||
assert_bash_list {" "} $cmd $test
|
||||
|
||||
|
||||
sync_after_int
|
||||
|
||||
|
||||
teardown
|
Loading…
x
Reference in New Issue
Block a user