X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fpatches%2Fbash%2Fbash43-010;fp=src%2Fpatches%2Fbash%2Fbash43-010;h=0000000000000000000000000000000000000000;hp=835a96ead33117d9f59c1b7bd2a8487d82bb761e;hb=a15dbe44971a47d8749497d75cbfd829ba09e9a3;hpb=699381b6993b9428e99a0055dae03e7a222ea9f9 diff --git a/src/patches/bash/bash43-010 b/src/patches/bash/bash43-010 deleted file mode 100644 index 835a96ead3..0000000000 --- a/src/patches/bash/bash43-010 +++ /dev/null @@ -1,157 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-010 - -Bug-Reported-by: Albert Shih -Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html - -Bug-Description: - -Patch (apply with `patch -p0'): - -This patch changes the behavior of programmable completion to compensate -for two assumptions made by the bash-completion package. Bash-4.3 changed -to dequote the argument to programmable completion only under certain -circumstances, to make the behavior of compgen more consistent when run -from the command line -- closer to the behavior when run by a shell function -run as part of programmable completion. Bash-completion can pass quoted -arguments to compgen when the original word to be completed was not quoted, -expecting programmable completion to dequote the word before attempting -completion. - -This patch fixes two cases: - -1. An empty string that bash-completion passes to compgen as a quoted null - string (''). - -2. An unquoted word that bash-completion quotes using single quotes or - backslashes before passing it to compgen. - -In these cases, since readline did not detect a quote character in the original -word to be completed, bash-4.3 - -*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500 ---- externs.h 2014-03-13 14:42:57.000000000 -0400 -*************** -*** 325,328 **** ---- 325,329 ---- - extern char *sh_backslash_quote_for_double_quotes __P((char *)); - extern int sh_contains_shell_metas __P((char *)); -+ extern int sh_contains_quotes __P((char *)); - - /* declarations for functions defined in lib/sh/spell.c */ -*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400 ---- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400 -*************** -*** 312,313 **** ---- 312,327 ---- - return (0); - } -+ -+ int -+ sh_contains_quotes (string) -+ char *string; -+ { -+ char *s; -+ -+ for (s = string; s && *s; s++) -+ { -+ if (*s == '\'' || *s == '"' || *s == '\\') -+ return 1; -+ } -+ return 0; -+ } -*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400 ---- pcomplete.c 2014-03-25 17:23:23.000000000 -0400 -*************** -*** 184,187 **** ---- 184,188 ---- - COMPSPEC *pcomp_curcs; - const char *pcomp_curcmd; -+ const char *pcomp_curtxt; - - #ifdef DEBUG -*************** -*** 754,757 **** ---- 755,784 ---- - dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - } -+ /* Intended to solve a mismatched assumption by bash-completion. If -+ the text to be completed is empty, but bash-completion turns it into -+ a quoted string ('') assuming that this code will dequote it before -+ calling readline, do the dequoting. */ -+ else if (iscompgen && iscompleting && -+ pcomp_curtxt && *pcomp_curtxt == 0 && -+ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && -+ rl_filename_dequoting_function) -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); -+ /* Another mismatched assumption by bash-completion. If compgen is being -+ run as part of bash-completion, and the argument to compgen is not -+ the same as the word originally passed to the programmable completion -+ code, dequote the argument if it has quote characters. It's an -+ attempt to detect when bash-completion is quoting its filename -+ argument before calling compgen. */ -+ /* We could check whether gen_shell_function_matches is in the call -+ stack by checking whether the gen-shell-function-matches tag is in -+ the unwind-protect stack, but there's no function to do that yet. -+ We could simply check whether we're executing in a function by -+ checking variable_context, and may end up doing that. */ -+ else if (iscompgen && iscompleting && rl_filename_dequoting_function && -+ pcomp_curtxt && text && -+ STREQ (pcomp_curtxt, text) == 0 && -+ variable_context && -+ sh_contains_quotes (text)) /* guess */ -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - else - dfn = savestring (text); -*************** -*** 1523,1527 **** - { - COMPSPEC *cs, *oldcs; -! const char *oldcmd; - STRINGLIST *ret; - ---- 1550,1554 ---- - { - COMPSPEC *cs, *oldcs; -! const char *oldcmd, *oldtxt; - STRINGLIST *ret; - -*************** -*** 1546,1552 **** ---- 1573,1581 ---- - oldcs = pcomp_curcs; - oldcmd = pcomp_curcmd; -+ oldtxt = pcomp_curtxt; - - pcomp_curcs = cs; - pcomp_curcmd = cmd; -+ pcomp_curtxt = word; - - ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); -*************** -*** 1554,1557 **** ---- 1583,1587 ---- - pcomp_curcs = oldcs; - pcomp_curcmd = oldcmd; -+ pcomp_curtxt = oldtxt; - - /* We need to conditionally handle setting *retryp here */ -*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 ---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */