commit bash-20181019 snapshot

This commit is contained in:
Chet Ramey
2018-10-22 16:47:48 -04:00
parent f19b1b7334
commit b577a7bc74
9 changed files with 177 additions and 9 deletions
+60
View File
@@ -1,6 +1,66 @@
This document details the changes between this version, bash-5.0-beta, and
the previous version, bash-5.0-alpha.
1. Changes to Bash
a. Fixed a bug that could cause a seg fault while parsing a subshell command
inside a command substitution.
b. Fixed several small memory leaks uncovered by coverity.
c. Fixed a problem with command substitution inside an interactive shell that
could cause the parent to receive a SIGHUP.
d. Fixed a problem with using `*' and `@' as subscripts when assigning values
to an associative array with assoc_expand_once enabled.
e. Fixed a bug that could cause a huge memory allocation when completing a
word beginning with an invalid tilde expansion.
f. Cleaned up some incompatiblities with bash-4.4 when expanding indexed array
subscripts used in arithmetic expansions when assoc_expand_once is enabled.
g. The ${parameter@a} expansion will display attributes even if `parameter' is
unset.
2. Changes to Readline
a. Fixed a bug with adding multibyte characters to an incremental search string.
b. Fixed a bug with redoing text insertions in vi mode.
c. Fixed a bug with pasting text into an incremental search string if bracketed
paste mode is enabled. ESC cannot be one of the incremental search
terminator characters for this to work.
3. New Features in Bash
a. Associative and indexed arrays now allow subscripts consisting solely of
whitespace.
b. `checkwinsize' is now enabled by default.
c. The `localvar_unset' shopt option is now visible and documented.
d. The `progcomp_alias' shopt option is now visible and documented.
e. The signal name processing code now understands `SIGRTMIN+n' all the way
up to SIGRTMAX.
f. There is a new `seq' loadable builtin.
g. Trap execution now honors the (internal) max invocations of `eval', since
traps are supposed to be executed as if using `eval'.
4. New Features in Readline
a. Readline now allows application-defined keymap names; there is a new public
function, rl_set_keymap_name(), to do that.
------------------------------------------------------------------------------
This document details the changes between this version, bash-5.0-beta, and
the previous version, bash-5.0-alpha.
1. Changes to Bash
a. Fixed a bug that allowed subshells to "inherit" enclosing loops -- this
+28
View File
@@ -4587,3 +4587,31 @@ arrayfunc.c
array subscript -- we already figure out whether or not we are
[bumped release status to beta2]
10/20
-----
builtins/setattr.def
- set_or_show_attributes: after isolating NAME, make sure to restore
the "[+]=" in case we need the word later. Issue pointed out by
Grisha Levit <grishalevit@gmail.com>
10/21
-----
lib/readline/search.c
- noninc_search_from_pos: if we are supposed to be searching for a
pattern (vi mode), make sure to pass S to _hs_history_patsearch,
since that has any leading `^' stripped
lib/readline/histsearch.c
- _hs_history_patsearch: if the search isn't anchored, put a `*' at
the beginning to force fnmatch to match anywhere in the line (could
look at this later to make a change to history_search_internal that
would avoid the need to add the leading `*')
subst.c
- parameter_brace_expand_rhs: treat a failure to assign a variable with
a ${param:=value} expansion as an expansion error, and, in a non-
interactive posix-mode shell, exit the shell
- param_expand: don't set W_SPLITSPACE for $* unless IFS is NULL;
consistent with other uses of W_SPLITSPACE
+6
View File
@@ -277,6 +277,12 @@ set_or_show_attributes (list, attribute, nodefs)
}
set_var_attribute (name, attribute, undo);
if (assign) /* restore word */
{
name[assign] = '=';
if (aflags & ASS_APPEND)
name[assign-1] = '+';
}
list = list->next;
}
}
+22
View File
@@ -3473,9 +3473,31 @@ execute_case_command (case_command)
}
#endif
#if 0 /* TAG: bash-5.1 */
/* Use the same expansions (POSIX leaves them unspecified) as the patterns
but dequote the resulting string, since the quotes are handled specially
below. */
if (posixly_correct)
{
wlist = expand_word_leave_quoted (case_command->word, 0);
if (wlist)
{
char *t;
t = string_list (wlist);
word = dequote_string (t);
free (t);
}
else
word = savestring ("");
dispose_words (wlist);
}
else
#endif
{
wlist = expand_word_unsplit (case_command->word, 0);
word = wlist ? string_list (wlist) : savestring ("");
dispose_words (wlist);
}
retval = EXECUTION_SUCCESS;
ignore_return = case_command->flags & CMD_IGNORE_RETURN;
+17 -3
View File
@@ -199,7 +199,7 @@ int
_hs_history_patsearch (const char *string, int direction, int flags)
{
char *pat;
size_t len;
size_t len, start;
int ret, unescaped_backslash;
#if defined (HAVE_FNMATCH)
@@ -216,12 +216,26 @@ _hs_history_patsearch (const char *string, int direction, int flags)
}
if (unescaped_backslash)
return -1;
pat = (char *)xmalloc (len + 2);
pat = (char *)xmalloc (len + 3);
/* If the search string is not anchored, we'll be calling fnmatch (assuming
we have it). Prefix a `*' to the front of the search string so we search
anywhere in the line. */
if ((flags & ANCHORED_SEARCH) == 0 && string[0] != '*')
{
pat[0] = '*';
start = 1;
len++;
}
else
{
start = 0;
}
/* Attempt to reduce the number of searches by tacking a `*' onto the end
of a pattern that doesn't have one. Assume a pattern that ends in a
backslash contains an even number of trailing backslashes; we check
above */
strcpy (pat, string);
strcpy (pat + start, string);
if (pat[len - 1] != '*')
{
pat[len] = '*'; /* XXX */
+1 -1
View File
@@ -135,7 +135,7 @@ noninc_search_from_pos (char *string, int pos, int dir, int flags, int *ncp)
sflags |= ANCHORED_SEARCH;
s++;
}
ret = _hs_history_patsearch (string, dir, sflags);
ret = _hs_history_patsearch (s, dir, sflags);
}
else if (*string == '^')
ret = history_search_prefix (string + 1, dir);
+3 -3
View File
@@ -12,10 +12,10 @@ msgstr ""
"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
"Language: pt\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=n !=1;\n"
"X-Generator: Gtranslator 2.91.6\n"
@@ -542,7 +542,7 @@ msgstr "posição do histórico"
#: builtins/history.def:264
#, c-format
msgid "%s: invalid timestamp"
msgstr "%s: carimbo inválido"
msgstr "%s: datação inválida"
#: builtins/history.def:375
#, c-format
@@ -4233,7 +4233,7 @@ msgstr ""
" EXPR1 -o EXPR2 Verdadeiro se EXPR1 OU EXPR2 forem verdadeiros.\n"
" \n"
" arg1 OP arg2 Testes aritméticos. OP é um de -eq, -ne,\n"
"  -lt, -le, -gt, ou -ge.\n"
" -lt, -le, -gt, ou -ge.\n"
" \n"
" Operadores binários aritméticos devolvem verdadeiro se ARG1 for igual, não\n"
" igual, menor que, menor ou igual que, maior que ou maior ou igual que\n"
+38 -2
View File
@@ -4276,6 +4276,21 @@ quote_list (list)
return list;
}
WORD_DESC *
dequote_word (word)
WORD_DESC *word;
{
register char *s;
s = dequote_string (word->word);
if (QUOTED_NULL (word->word))
word->flags &= ~W_HASQUOTEDNULL;
free (word->word);
word->word = s;
return word;
}
/* De-quote quoted characters in each word in LIST. */
WORD_LIST *
dequote_list (list)
@@ -6821,6 +6836,7 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
WORD_LIST *l;
char *t, *t1, *temp, *vname;
int l_hasdollat, sindex;
SHELL_VAR *v;
/*itrace("parameter_brace_expand_rhs: %s:%s pflags = %d", name, value, pflags);*/
/* If the entire expression is between double quotes, we want to treat
@@ -6950,10 +6966,26 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
#if defined (ARRAY_VARS)
if (valid_array_reference (vname, 0))
assign_array_element (vname, t1, 0);
v = assign_array_element (vname, t1, 0);
else
#endif /* ARRAY_VARS */
bind_variable (vname, t1, 0);
v = bind_variable (vname, t1, 0);
if (v == 0 || readonly_p (v) || noassign_p (v)) /* expansion error */
{
if ((v == 0 || readonly_p (v)) && interactive_shell == 0 && posixly_correct)
{
last_command_exit_value = EXECUTION_FAILURE;
exp_jump_to_top_level (FORCE_EOF);
}
else
{
if (vname != name)
free (vname);
last_command_exit_value = EX_BADUSAGE;
exp_jump_to_top_level (DISCARD);
}
}
stupidly_hack_special_variables (vname);
@@ -9244,7 +9276,11 @@ param_expand (string, sindex, quoted, expanded_something,
temp = string_list_dollar_at (list, quoted, 0);
/* Set W_SPLITSPACE to make sure the individual positional
parameters are split into separate arguments */
#if 0
if (quoted == 0 && (ifs_is_set == 0 || ifs_is_null))
#else /* change with bash-5.0 */
if (quoted == 0 && ifs_is_null)
#endif
tflag |= W_SPLITSPACE;
/* If we're not quoted but we still don't want word splitting, make
we quote the IFS characters to protect them from splitting (e.g.,
+2
View File
@@ -194,6 +194,8 @@ extern char *dequote_string __P((char *));
/* De-quote CTLESC-escaped CTLESC or CTLNUL characters in STRING. */
extern char *dequote_escapes __P((const char *));
extern WORD_DESC *dequote_word __P((WORD_DESC *));
/* De-quote quoted characters in each word in LIST. */
extern WORD_LIST *dequote_list __P((WORD_LIST *));