threads / patch / 56264

patchcompletion: avoid config variable name lookup error in nounset mode

Subject: [PATCH] completion: avoid config variable name lookup error in nounset mode

## tl;dr

3 messages between Aug 11, 2021 and Aug 11, 2021. Diffs are folded; open one to read it.

replies: 2people: 3as markdown or json

Ville Skyttä· Aug 11, 2021, 19:16 UTC · lore

Config variable name lookup accesses the `sfx` variable before it has been set, causing an error in "nounset" mode. Initialize to an empty string to avoid that.

    $ git config submodule.<Tab>bash: sfx: unbound variable
Signed-off-by: Ville Skyttä <ville.skytta@iki.fi>
---
 contrib/completion/git-completion.bash | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to contrib/completion/git-completion.bash +1 −1
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 4bdd27ddc8..ecc9352755 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2631,7 +2631,7 @@ __git_complete_config_variable_value ()
 #                 subsections) instead of the default space.
 __git_complete_config_variable_name ()
 {
-	local cur_="$cur" sfx
+	local cur_="$cur" sfx=""
 
 	while test $# != 0; do
 		case "$1" in
-- 
2.25.1
Junio C Hamano· Aug 11, 2021, 19:35 UTC · re: Ville Skyttä · lore

Re: [PATCH] completion: avoid config variable name lookup error in nounset mode

Ville Skyttä <ville.skytta@iki.fi> writes:
> Config variable name lookup accesses the `sfx` variable before it has

The above sounds as if the function always makes an access to an uninitialized variable, which puzzled me. The problem exists only when called from some callers that do not use the --sfx=X option, which may be worth mentioning.

I see that, ever since the helper function was introduced at e1e00089 (completion: complete configuration sections and variable names for 'git -c', 2019-08-13), it would have upset 'set -u' when the caller does not pass --sfx=X option, and even in that original version, there was such a caller (the original author Cc'ed).

And the fix looks trivially correct.

I'll be busy preparing the -rc2 today, and will not be queuing this patch right now, though. As this is not a recent regression, waiting for the current release cycle to be over and sending a reroll later next week would be greatly appreciated.

Thanks.
Show 23 quoted lines
> been set, causing an error in "nounset" mode. Initialize to an empty
> string to avoid that.
>
>     $ git config submodule.<Tab>bash: sfx: unbound variable
>
> Signed-off-by: Ville Skyttä <ville.skytta@iki.fi>
> ---
>  contrib/completion/git-completion.bash | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 4bdd27ddc8..ecc9352755 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2631,7 +2631,7 @@ __git_complete_config_variable_value ()
>  #                 subsections) instead of the default space.
>  __git_complete_config_variable_name ()
>  {
> -	local cur_="$cur" sfx
> +	local cur_="$cur" sfx=""
>  
>  	while test $# != 0; do
>  		case "$1" in
Felipe Contreras· Aug 11, 2021, 19:40 UTC · re: Ville Skyttä · lore

RE: [PATCH] completion: avoid config variable name lookup error in nounset mode

Ville Skyttä wrote:
Show 21 quoted lines
> Config variable name lookup accesses the `sfx` variable before it has
> been set, causing an error in "nounset" mode. Initialize to an empty
> string to avoid that.
> 
>     $ git config submodule.<Tab>bash: sfx: unbound variable
> 
> Signed-off-by: Ville Skyttä <ville.skytta@iki.fi>
> ---
>  contrib/completion/git-completion.bash | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 4bdd27ddc8..ecc9352755 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2631,7 +2631,7 @@ __git_complete_config_variable_value ()
>  #                 subsections) instead of the default space.
>  __git_complete_config_variable_name ()
>  {
> -	local cur_="$cur" sfx
> +	local cur_="$cur" sfx=""

For what it's worth this would break a fix I've sent several times already [1].

The proper fix requires changing __gitcomp as well, after that sfx can simply be " ".

All the patches that fix all these issues have been sent, and if you want to try them out check git-completion [2].

Cheers.

[1] https://lore.kernel.org/git/20210707023146.3132162-5-felipe.contreras@gmail.com/ [2] https://github.com/felipec/git-completion

-- 
Felipe Contreras

← back to recent threads