From: Chet Ramey Date: Mon, 23 Sep 2024 22:19:55 +0000 (-0400) Subject: Bash-5.2 patch 37: fix issue where comparing quoted and unquoted words to be complete... X-Git-Tag: bash-5.3~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5c97b371044a44b701b6efa35984a3e1956344e;p=thirdparty%2Fbash.git Bash-5.2 patch 37: fix issue where comparing quoted and unquoted words to be completed results in readline not displaying possible matches --- diff --git a/lib/readline/complete.c b/lib/readline/complete.c index e5d224ed..2daac8c6 100644 --- a/lib/readline/complete.c +++ b/lib/readline/complete.c @@ -2031,9 +2031,25 @@ rl_complete_internal (int what_to_do) text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); + /* If TEXT contains quote characters, it will be dequoted as part of + generating the matches, and the matches will not contain any quote + characters. We need to dequote TEXT before performing the comparison. + Since compare_match performs the dequoting, and we only want to do it + once, we don't call compare_matches after dequoting TEXT; we call + strcmp directly. */ /* nontrivial_lcd is set if the common prefix adds something to the word being completed. */ - nontrivial_lcd = matches && compare_match (text, matches[0]) != 0; + if (rl_filename_completion_desired && rl_filename_quoting_desired && + rl_completion_found_quote && rl_filename_dequoting_function) + { + char *t; + t = (*rl_filename_dequoting_function) (text, rl_completion_quote_character); + xfree (text); + text = t; + nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; + } + else + nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; if (what_to_do == '!' || what_to_do == '@') tlen = strlen (text); xfree (text); diff --git a/patchlevel.h b/patchlevel.h index 0134ea1a..d8817d14 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 36 +#define PATCHLEVEL 37 #endif /* _PATCHLEVEL_H_ */