mirror of https://github.com/n-hys/bash.git
9183 lines
341 KiB
Plaintext
9183 lines
341 KiB
Plaintext
|
||
9/15/2016
|
||
---------
|
||
[bash-4.4 released]
|
||
|
||
9/17
|
||
----
|
||
builtins/common.c
|
||
- display_signal_list: if 0 is supplied as an argument to kill -l,
|
||
display a signal-out-of-range error. Fixes bug reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
9/18
|
||
----
|
||
print_cmd.c
|
||
- print_heredoc_bodies: take a list of redirections, all here documents,
|
||
and print the here-document bodies including the ending delimiter,
|
||
followed by a newline
|
||
- print_redirection_list: print the heredoc headers the first time
|
||
through the list of redirections so we print them in the same left-
|
||
to-right order they're supplied; print the bodies and delimiters with
|
||
print_heredoc_bodies after we print all the redirections if we're
|
||
not printing a list of commands (printing_connection == 0). Fix for
|
||
problem reported by Isabella Parakiss <izaberina@gmail.com>
|
||
- print_deferred_heredocs: don't print heredoc headers, since they're
|
||
now printed in print_redirection_list
|
||
- print_deferred_heredocs: use print_heredoc_bodies
|
||
|
||
9/20
|
||
----
|
||
builtins/mapfile.def
|
||
- readarray: update usage synopsis to include -d delim. Report and
|
||
fix from jhankins@homewood.k12.al.us
|
||
|
||
test.c
|
||
- test_binop: if op[0] == '-', make sure op[1] != 0 before checking
|
||
op[2] or op[3]. Fixes out-of-bounds read reported by Franco
|
||
Costantini <franco.costantini.20@gmail.com>
|
||
|
||
parse.y
|
||
- cond_term: if yylval.word->word[0] == '-' make sure word[1] != 0
|
||
before checking word[2] and calling test_unop. Fixes out-of-bounds
|
||
read reported by Franco Costantini <franco.costantini.20@gmail.com>
|
||
- make sure to check all instances of the return value of the
|
||
simple_command production before trying to hook redirections onto it,
|
||
since it can potentially return NULL.
|
||
Reported by Franco Costantini <franco.costantini.20@gmail.com>
|
||
|
||
9/21
|
||
----
|
||
parse.y
|
||
- token_is_assignment: make sure to check that the return value from
|
||
assignment() finds the `=' we just added at index I to avoid false
|
||
positives from g=g=g=g=g=g=(). Reported by Franco Costantini
|
||
<franco.costantini.20@gmail.com>
|
||
|
||
9/22
|
||
----
|
||
parse.y
|
||
- token_is_assignment: if we're not using the bash malloc (which has
|
||
guard bytes after the requested allocation size), use a new
|
||
buffer so we can make sure it's big enough to hold the current
|
||
token and at least two additional characters. Reported by
|
||
Franco Costantini <franco.costantini.20@gmail.com>
|
||
|
||
9/23
|
||
----
|
||
execute_cmd.c
|
||
- execute_in_subshell: call without_job_control for both job control
|
||
and non-job-control builds to avoid waiting for last_made_pid
|
||
inherited from parent shell. Related to fix from 8/4 to
|
||
initialize_subshell. Fixes bug reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
builtins/declare.def
|
||
- local_builtin: allow `local --help' to work even when not executing
|
||
a function. Suggestion from Norm Abramovitz <norm@starkandwayne.com>
|
||
|
||
9/25
|
||
----
|
||
builtins/printf.def
|
||
- bexpand: if passed a null or empty string, return a newly-allocated
|
||
empty string (so the return value can always be freed) instead of
|
||
NULL.
|
||
- printstr: if passed a null string, treat it as if it were an empty
|
||
string so any precision or fieldwidth arguments are handled
|
||
correctly. Report from isabella parakiss <izaberina@gmail.com>
|
||
|
||
subst.c
|
||
- skip_matched_pair: make the flags argument of 1 affect whether or
|
||
not backslash can quote characters in the string, so it affects
|
||
all quoting mechanisms
|
||
|
||
arrayfunc.c
|
||
- unbind_array_element: now takes a third (flags) argument; flags&1
|
||
means to not expand an associative array index. This is only called
|
||
from a shell builtin context, which means the argument should have
|
||
already undergone word expansion, so it should be ok. Will still
|
||
be a problem for uses like "unset -v 'var[$ind]'", quoted to avoid
|
||
globbing
|
||
- valid_array_reference: pass second flags argument to skipsubscript;
|
||
still set to 0 by all callers
|
||
|
||
arrayfunc.h
|
||
- unbind_array_element: updated prototype
|
||
|
||
builtins/set.def
|
||
- unset_builtin: add third argument of 1 to unbind_array_element calls
|
||
[TEMPORARILY DISABLED]
|
||
- unset_builtin: call valid_array_reference with second arg of 1 to
|
||
handle unmatched pairs of quotes and [/]
|
||
|
||
array.c
|
||
- array_reference: optimize access locality as well as sequential
|
||
access by adding ability to start from last-accessed element and move
|
||
backwards or forwards depending on the desired index. Inspired by
|
||
report from Tom McCurdy <tom.j.mccurdy@gmail.com> and followup from
|
||
Christian Franke <Christian.Franke@t-online.de>
|
||
|
||
variables.c
|
||
- all_array_variables: include associative arrays, not just indexed
|
||
arrays. Reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
execute_cmd.c
|
||
- execute_disk_command: if we're optimizing out the fork (CMD_NO_FORK),
|
||
decrement the shell level so we don't end up incrementing it twice.
|
||
We should decrement the shell level for an implicit exec like an
|
||
explicit one. Reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
|
||
builtins/exec.def
|
||
- exec_builtin: don't bother to decrement the shell level if we are
|
||
already in a `(command)' subshell. Reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
|
||
lib/readline/macro.c
|
||
- macro_level: count of macro nesting level, maintained by
|
||
_rl_push_executing_macro and _rl_pop_executing macro
|
||
- _rl_with_macro_input: if current nesting level exceeds
|
||
MAX_MACRO_LEVEL, abort the current command line with _rl_abort_internal
|
||
and return to the top level. Reported by Christian Klomp
|
||
<christianklomp@gmail.com>
|
||
|
||
lib/readine/history.c
|
||
- add_history: if allocating the history list for the first time,
|
||
make sure the max history list size isn't so large that it will
|
||
cause allocation errors. Cap it at MAX_HISTORY_INITIAL_SIZE
|
||
(8192). Reported by Sean Zha <freeman_cha@hotmail.com>
|
||
|
||
jobs.c
|
||
- wait_for: if a foreground job with job control enabled is killed by a
|
||
SIGINT and sourcelevel != 0, act as if we received the SIGINT so the
|
||
file sourcing can be terminated. Reported by PePa
|
||
<peterkelly@passchier.net>
|
||
|
||
9/26
|
||
----
|
||
subst.c
|
||
- read_comsub: only warn once for null bytes in command substitution
|
||
output, instead of once for every null byte
|
||
|
||
arrayfunc.c
|
||
- array_variable_part: now takes a `flags' argument; changed all callers
|
||
to initially pass 0
|
||
- array_variable_name: now takes a `flags' argument; changed all callers
|
||
to initially pass 0
|
||
- array_variable_name: pass `flags' argument to skipsubscript instead
|
||
of just passing 0
|
||
|
||
arrayfunc.h
|
||
- array_variable_{name,part}: added new argument to prototypes
|
||
|
||
9/29
|
||
----
|
||
bashline.c
|
||
- bash_directory_completion_hook: don't bother to try and expand a
|
||
${ or $( that isn't complete; expand_prompt_string will complain.
|
||
Fixes reports from John Passaro <john.a.passaro@gmail.com> and
|
||
Valentin Bajrami <valentin.bajrami@gmail.com>
|
||
|
||
lib/readline/history.c
|
||
- _hs_append_history_line: use a strategy that attempts to avoid
|
||
realloc copying memory to a newly-allocated block if the history
|
||
line we're appending to gets `too long' (currently 256 bytes).
|
||
We reallocate in powers of 2 starting at 512, and rely on realloc
|
||
not allocating a new block and copying into it if the size is the
|
||
same as the last call to realloc. Addresses issue raised by
|
||
Hubert Schmid <h.schmid@gmx.de>
|
||
|
||
trap.h
|
||
- check_signals: new extern declaration
|
||
- trapped_signal_received: new extern declaration
|
||
|
||
builtins/read.def
|
||
- read_builtin: if one of the zread* functions returns < 0 (which
|
||
usually only happens in Posix mode), make sure we call check_signals()
|
||
before eventually calling run_pending_traps() because zread() isn't
|
||
going to call it
|
||
- include trap.h for correct extern functions and variable declarations
|
||
|
||
lib/sh/zread.c
|
||
- zread: if executing a builtin, call check_signals_and_traps() for
|
||
backwards compatibility. If not, call check_signals() only, because
|
||
we don't want to run traps during, for instance, reading command
|
||
substitution output. Fixes race condition bug reported by Luiz Angelo
|
||
Daros de Luca <luizluca@gmail.com>
|
||
|
||
9/30
|
||
----
|
||
subst.c
|
||
- command_substitute: reset parse_and_execute_level to 0 in the child
|
||
process, since it's independent of the other parse_and_execute
|
||
calls. Adds command substitution inside other parse_and_execute
|
||
calls optimizations to suppress forks, as suggested by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
10/3
|
||
----
|
||
configure.ac
|
||
- SHOBJ_STATUS: make sure it defaults to unsupported and is substituted
|
||
if the shobj-conf script isn't run. Fixes `make install' bug with
|
||
a minimal config reported by Andrew Tomazos <andrewtomazos@gmail.com>
|
||
|
||
10/5
|
||
----
|
||
support/shobj-conf
|
||
- darwin: set compatibility_version for a shared build of the readline
|
||
library (the standalone readline distribution shares this file) to
|
||
$(SHLIB_MAJOR)$(SHLIB_MINOR). Recommendation from Max Horn
|
||
<max@quendi.de>
|
||
|
||
10/6
|
||
----
|
||
array.h
|
||
- array_first_index: new convenience define
|
||
|
||
array.c
|
||
- ADD_AFTER: new define, complement of ADD_BEFORE
|
||
- UNSET_LASTREF: now takes an array as an argument, prepping for move
|
||
of lastref pointer into the array struct
|
||
- array_insert: check whether we are adding at the beginning of the
|
||
array and take a fast path if so
|
||
- array_insert: use same strategy as array_reference to find the place
|
||
to insert, starting from the last-referenced element and moving
|
||
forward or back from there; use ADD_AFTER if moving backward
|
||
- array_insert: if replacing an existing element, just replace the
|
||
value with new->value instead of the entire element
|
||
- array_reference: short-circuit quickly if looking for an element
|
||
before the first assigned index
|
||
- array_reference: if we don't find the element, leave lastref pointing
|
||
to the closest element under the assumption we will be assigning or
|
||
looking for something close
|
||
- array_reference: take advantage of ordered indexes to short-circuit
|
||
when looking for element that is not set
|
||
|
||
10/7
|
||
----
|
||
array.c
|
||
- array_remove: short-circuit if asked to remove index after max
|
||
index or before first index
|
||
|
||
10/10
|
||
-----
|
||
lib/malloc/malloc.c
|
||
- internal_realloc: if we are requesting reallocation to the same size
|
||
as the block's current size, short-circuit and return `mem' right
|
||
after doing bounds check
|
||
- internal_realloc: if we are reducing the size of an allocation, and
|
||
the new size fits in the next lower bin, just keep the same block
|
||
and adjust the size, so we can avoid some copies
|
||
|
||
parse.y
|
||
- set_line_mbstate: keep track of the allocated size of
|
||
shell_input_line_property, only request reallocation if the size
|
||
increases, but don't let it get too big
|
||
|
||
10/11
|
||
-----
|
||
jobs.c
|
||
- wait_for_background_pids: make sure we wait for pid in
|
||
last_procsub_child since it's not found in any job -- still needs
|
||
more work to wait for multiple process substitutions
|
||
|
||
subst.c
|
||
- process_substitute: if make_child fails, make sure we call
|
||
restore_pipeline to undo the previous save_pipeline()
|
||
|
||
10/15
|
||
-----
|
||
subst.c
|
||
- process_substitute,command_substitute: leave subshell_level (reflected
|
||
as $BASH_SUBSHELL) intact for any exit trap instead of decrementing
|
||
it. Suggested by Martijn Dekker <martijn@inlv.org>
|
||
|
||
builtins/evalstring.c
|
||
- optimize_subshell_command: new function, framework for optimizing
|
||
out forks for command that have already forked and are executing
|
||
in a subshell. Not used yet
|
||
|
||
expr.c
|
||
- readtok: if we have a post-increment or post-decrement, and the
|
||
previous token is not a string, check whether the previous token is
|
||
a number that results from a pre-increment or pre-decrement, and
|
||
make that an error. Report from Conrad Hoffmann <ch@bitfehler.net>
|
||
|
||
10/16
|
||
-----
|
||
aclocal.m4
|
||
- BASH_JOB_CONTROL_MISSING: convert from AC_TRY_RUN to AC_TRY_COMPILE
|
||
with existing set of preprocessor defines, so it can work when
|
||
cross-compiling. Suggested by Felix Janda <felix.janda@posteo.de>
|
||
|
||
10/19
|
||
-----
|
||
variables.c
|
||
- get_bashpid: BASHPID is no longer readonly; assignments to it are
|
||
just ignored.
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- BASHPID: note that assignments are ignored and unsetting BASHPID
|
||
causes it to lose its special properties
|
||
|
||
10/28
|
||
-----
|
||
builtins/pushd.def
|
||
- popd_builtin: make sure to check the normalized stack offset
|
||
(i.e., negatives counting back from the end of the stack) is within
|
||
bounds before trying to free that stack entry. Report from
|
||
Fernando Muñoz <fernando@null-life.com>
|
||
|
||
lib/readline/histfile.c
|
||
- chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from
|
||
J. Peter Mugaas <jpmugaas@suddenlink.net>
|
||
|
||
lib/readline/colors.c
|
||
- S_ISDIR: add define if missing
|
||
- S_ISUID, S_ISGID, S_ISLNK, S_ISSOCK: don't use unless defined.
|
||
Fixes for MinGW{64,32} from J. Peter Mugaas <jpmugaas@suddenlink.net>
|
||
|
||
bashhist.c
|
||
- current_command_line_comment: set to the most recent line in a
|
||
possibly multi-line command that contains a shell comment; set in
|
||
maybe_add_history and bash_add_history to either the current
|
||
command number or -2
|
||
- maybe_add_history: set current_command_line_comment for first line
|
||
of command
|
||
- bash_add_history: chars_to_add set to "\n" if the current command line
|
||
is one greater than the previous line containing a comment
|
||
(current_command_line_comment). Fixes complaint from back in
|
||
January, 2016 from Dave Rutherford <dave@evilpettingzoo.com>
|
||
|
||
array.h
|
||
- lastref: move last-referenced pointer into each array struct, so all
|
||
arrays can have reference locality
|
||
|
||
array.c
|
||
- array_create: set lastref element to 0
|
||
- array_copy: if copying the lastref in array a, set the new lastref
|
||
in the copy to the same element
|
||
- IS_LASTREF, LASTREF_START, LASTREF, INVALIDATE_LASTREF, SET_LASTREF,
|
||
UNSET_LASTREF: change to use new array `lastref' member
|
||
|
||
pathexp.c
|
||
- quote_string_for_globbing: if quoting for a regexp, make sure to
|
||
skip and copy a leading `^' in a bracket expression, and skip and
|
||
copy a subsequent `]' (after an optional `^'), so that leading
|
||
bracket doesn't close the bracket expression. Report from
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
10/29
|
||
-----
|
||
subst.c
|
||
- extract_delimited_string: add calls to CHECK_STRING_OVERRUN for
|
||
$( inside $((, nested OPENERs, nested ALT_OPENERs, and backquotes
|
||
- skip_to_delim: add calls to CHECK_STRING_OVERRUN for $(, ${,
|
||
process substitution
|
||
- extract_dollar_brace_string: add calls to CHECK_STRING_OVERRUN for
|
||
$(
|
||
- extract_dollar_brace_string: use skipsubscript to skip over the
|
||
array subscript in ${var[sub]} (non-quoted case uses string_extract,
|
||
which already uses skipsubscript). Tagged for bash-5.0
|
||
|
||
10/30
|
||
-----
|
||
variables.c
|
||
- EPOCHSECONDS: new dynamic variable, time in seconds since Unix
|
||
epoch; assignments are ignored. Can be used on systems where
|
||
strftime() doesn't support '%s'
|
||
- EPOCHREALTIME: new dynamic variable, time in seconds since Unix
|
||
epoch with microsecond granularity
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- EPOCHSECONDS documentation
|
||
- EPOCHREALTIME documentation
|
||
|
||
execute_cmd.c
|
||
- decpoint: moved to locale.c, renamed locale_decpoint; changed callers
|
||
|
||
{bashintl,externs}.h
|
||
- locale_decpoint: extern declaration or #define if support for
|
||
localeconv() not there
|
||
|
||
10/31
|
||
-----
|
||
lib/malloc/malloc.c
|
||
- posix_memalign: add new posix-mandated interface
|
||
|
||
examples/loadables/rm.c
|
||
- rm: minimal loadable builtin, removes files and directories, only
|
||
handles -r and -f options. Original from Tim Ruehsen
|
||
<tim.ruehsen@gmx.de>, heavily rewritten for inclusion as loadable
|
||
|
||
examples/loadables/Makefile.in
|
||
- rm: add rules to build rm as one of the `other' targets
|
||
|
||
examples/loadables/stat.c
|
||
- stat: new loadable builtin that takes a filename and loads the info
|
||
returned by stat(2) into an associative array specified by the -A
|
||
argument (default STAT)
|
||
|
||
11/1
|
||
----
|
||
variables.c
|
||
- BASH_ARGV0: new dynamic variable, returns $0 on reference and sets
|
||
$0 on assignment. From a suggestion from Rocky Bernstein <rocky@gnu.org>
|
||
a few years ago
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- BASH_ARGV0: document
|
||
|
||
11/2
|
||
----
|
||
lib/glob/sm_loop.c
|
||
- parse_collsym: make sure to not return an out-of-bounds read if a
|
||
collating symbol is unterminated. Fixes OOB read reported by
|
||
Jerzy Kramarz <op7ica@gmail.com>
|
||
- brackmatch: after incrementing p, before checking whether it's a
|
||
character range, check whether *p was NULL before the increment
|
||
and short-circuit the bracket expression if it is
|
||
|
||
jobs.c
|
||
- discard_last_procsub_child: new function, safely discards
|
||
last_procsub_child and sets it to NULL
|
||
|
||
subst.c
|
||
- process_substitute: call discard_last_procsub_child instead of
|
||
calling discard_pipeline directly. Fixes bug reported by
|
||
Christian Weisgerber <naddy@mips.inka.de>
|
||
|
||
11/3
|
||
----
|
||
shell.h
|
||
- EX_DISKFALLBACK: new special return status available to builtins;
|
||
means to attempt to execute a disk command with the same name as
|
||
the builtin
|
||
|
||
examples/loadables/rm.c
|
||
- if we see the -i option, return EX_DISKFALLBACK
|
||
|
||
execute_cmd.c
|
||
- execute_simple_command: if executing a builtin returns EX_DISKFALLBACK,
|
||
try running execute_disk_command instead
|
||
|
||
bashline.c
|
||
- shell_expand_line: use expand_word to expand the readline line
|
||
buffer, which allows us to pass flags with the word. If a numeric
|
||
argument is supplied, do not perform quote removal (pass
|
||
Q_HERE_DOCUMENT since here-doc quoting does the right thing) and
|
||
do not perform command or process subsitution. From a suggestion
|
||
by Dabrien 'Dabe' Murphy <dabe@dabe.com> based on an old bug-bash
|
||
discussion
|
||
|
||
subst.c
|
||
- expand_word_internal: note that we have added a quoted IFS char to
|
||
istring by setting sentinel has_quoted_ifs. Usually we only add
|
||
one if we are not going to be performing word splitting, but we
|
||
will not perform word splitting if there's no expansion, so we need
|
||
to take care of that case
|
||
- expand_word_internal: when performing final word split, if there are
|
||
no expansions but has_quoted_ifs is non-zero, call remove_quoted_ifs()
|
||
to remove any quoted ifs characters we added while processing
|
||
- remove_quoted_ifs: new function, removes CTLESC chars preceding
|
||
(single-byte) chars in IFS. Used when we are not performing word
|
||
splitting. Fixes bug reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
11/4
|
||
----
|
||
lib/readline/macro.c
|
||
- _rl_peek_macro_key: return the next character from the current
|
||
keyboard macro; the next character from the `next' keyboard macro,
|
||
if there is one, if at the end of the current macro; or 0 to
|
||
indicate that we are at the end of a keyboard macro sequence
|
||
|
||
lib/readline/rlprivate.h
|
||
- _rl_peek_macro_key: extern declaration
|
||
|
||
lib/readline/readline.c
|
||
- _rl_dispatch_subseq: add test for ESC at the end of a keyboard macro,
|
||
which should cause the keyboard timeout for ESC to kick in. The
|
||
previous test didn't run the timeout code if executing from a macro,
|
||
even if we had read the last character of the macro. Fixes bug
|
||
reported by Clark Wang <clarkw@vmware.com>
|
||
|
||
lib/glob/sm_loop.c
|
||
- GMATCH: allow trailing backslash in pattern to explicitly match a
|
||
backslash that is the last character in the string. Bug report from
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
11/5
|
||
----
|
||
builtins/common.c
|
||
- display_signal_list: if displaying a signal name corresponding to an
|
||
exit status > 128, don't display the SIG prefix at all. Old code
|
||
made displaying the SIG prefix dependent on JOB_CONTROL define.
|
||
Report and fix from Martijn Dekker <martijn@inlv.org>
|
||
|
||
execute_cmd.c
|
||
- execute_subshell_builtin_or_function: call without_job_control even
|
||
if JOB_CONTROL is not defined. Similar to fix from 9/23.
|
||
Report from Martijn Dekker <martijn@inlv.org>
|
||
|
||
execute_cmd.c
|
||
- execute_simple_command: free memory allocated and passed to
|
||
make_child in the child process if JOB_CONTROL is defined
|
||
- execute_command_internal: free memory allocated and passed to
|
||
make_child in the child process created to run a () subshell or a
|
||
compound command within a pipeline if JOB_CONTROL is defined
|
||
- execute_coproc: free memory allocated and passed to make_child in
|
||
the child process if JOB_CONTROL is defined
|
||
- execute_disk_command: free memory allocated and passed to
|
||
make_child in the child process if JOB_CONTROL is defined. This
|
||
series of fixes is the result of reports from
|
||
Eduardo A. Bustamante López <dualbus@gmail.com>
|
||
|
||
11/6
|
||
----
|
||
lib/sh/unicode.c
|
||
- u32toutf16: fix to prevent outputting broken surrogate pairs for
|
||
Japanese locales (ja_JP.UTF-8) on cygwin (which uses UTF-16 natively).
|
||
Report and fix from Koichi MURASE <myoga.murase@gmail.com>
|
||
|
||
builtins/trap.def
|
||
- trap_builtin: if OP is `-' (revert), set the SIGINT signal handler
|
||
to sigint_sighandler if the shell is interactive and sourcing a
|
||
file (interactive_shell && sourcelevel) or running a trap
|
||
(interactive_shell && running_trap) even if it's not currently
|
||
interactive. Report from Martijn Dekker <martijn@inlv.org>
|
||
|
||
builtins/read.def
|
||
- check for and read multibyte characters in all cases, not just when
|
||
we are reading a specific number of characters, as long as
|
||
mb_cur_max > 1
|
||
|
||
subst.c
|
||
- expand_word_internal: some improvements to code that converts istring
|
||
into a WORD_LIST * to avoid multiple allocations and copies of
|
||
istring, which is already malloc'ed memory -- reduce number of malloc
|
||
and free calls
|
||
|
||
test.c
|
||
- unary_test: make sure if we test -v array[@] or array[*] that we
|
||
free the return value from array_value
|
||
|
||
11/8
|
||
----
|
||
expr.c
|
||
- expcond: make sure to set `noeval' before reading tokens depending on
|
||
the result of the conditional test, since readtok() can evaluate
|
||
identifiers (and recursively those containing expressions). Report
|
||
and fix from Koichi MURASE <myoga.murase@gmail.com>
|
||
|
||
builtins/evalstring.c
|
||
- should_suppress_fork: make sure to check for traps on EXIT and
|
||
ERR, since any_signals_trapped() only checks for `real' signals,
|
||
not the fake shell ones. Fixes bug reported by Werner Fink
|
||
<werner@suse.de>
|
||
- optimize_subshell_command: ditto
|
||
|
||
11/9
|
||
----
|
||
eval.c
|
||
- reader_loop: change so that we don't reset the SIGINT handler every
|
||
time through the command loop in an interactive shell if the signal
|
||
is trapped (as the comment noted). Reported by Report from Martijn
|
||
Dekker <martijn@inlv.org>
|
||
|
||
subst.c
|
||
- parameter_brace_{patsub,remove_pattern,transform,casemod}: save and
|
||
restore this_command_name while temporarily setting it for use in
|
||
error messages. Fixes use-after-free error reported by
|
||
Jerzy Kramarz <op7ica@gmail.com>
|
||
- string_extract_verbatim: make sure when we increment i by 2 due to
|
||
a CTLESC or CTLESC-CTLNUL that we don't read past the end of the
|
||
string. This can happen if the string ends with an odd number of
|
||
CTLESC chars. Fixes oob-read error reported by
|
||
Jerzy Kramarz <op7ica@gmail.com>
|
||
|
||
11/11
|
||
-----
|
||
configure.ac,aclocal.m4
|
||
- BASH_FUNC_SBRK: make sure sbrk actually works, instead of being just
|
||
a stub function like on several Linux distributions
|
||
|
||
lib/malloc/malloc.c
|
||
- malloc_usable_size: return the maximum number of bytes available for
|
||
a particular memory allocation (size of block allocated for it)
|
||
|
||
11/12
|
||
-----
|
||
configure.ac
|
||
- changes to make --enable-profiling work on Linux (-pg, no static link,
|
||
no -static in LDFLAGS)
|
||
|
||
Makefile.in
|
||
- changes to make --enable-profiling work on Linux (take
|
||
${PROFILE_FLAGS} out of BASE_CCFLAGS, add to CCFLAGS instead; add
|
||
BASE_LDFLAGS define that doesn't include -pg or -static; use
|
||
BASE_LDFLAGS in LDFLAGS; move ${PROFILE_FLAGS} and ${STATIC_LD} to
|
||
LDFLAGS)
|
||
|
||
tests/run-gprof
|
||
- changes to make profiling test suite with gprof work on Linux (set
|
||
GMON_OUT_PREFIX to handle multiple profiled processes per test;
|
||
change default filename to gmon.out from bash.gmon; look for
|
||
gprof output files in ${TMPDIR} instead of /tmp; handle multiple
|
||
profiling files starting with $GMON_OUT_PREFIX)
|
||
|
||
locale.c
|
||
- locale_isutf8: use locale_charset() if it's available and nl_langinfo
|
||
isn't
|
||
- locale_isutf8: add code to parse a locale specification and determine
|
||
whether the encoding is UTF-8 (or utf8) in the absence of
|
||
nl_langinfo and locale_charset
|
||
- set_default_locale: make sure to set locale_utf8locale early on
|
||
- locale_utf8locale: set via call to locale_isutf8 wherever LANG,
|
||
LC_ALL, or LC_CTYPE is set
|
||
|
||
11/13
|
||
-----
|
||
lib/readline/display.c
|
||
- rl_redisplay: handle report of potential integer overflow in
|
||
horizontal display mode from Mateusz Lenik <mlen@mlen.pl>
|
||
|
||
lib/sh/mbschr.c
|
||
- mbschr: if in a UTF-8 locale (locale_utf8locale) and we are looking
|
||
for an ASCII character, use (essentially) strchr as a shortcut
|
||
|
||
lib/sh/shmbchar.c
|
||
- utf8_{mbstrlen,mblen,mbsmbchar,mbsnlen}: UTF-8-specific replacement
|
||
functions (should also be able to use utf8_mblen in subst.c:
|
||
string_extract_verbatim)
|
||
- mbsmbchar: if locale_utf8locale is true, call utf8_mbsmbchar
|
||
- mbsmbchar: in UTF-8 locale, use utf8_mblen instead of mbrlen (not
|
||
used if earlier shortcut taken)
|
||
|
||
lib/sh/unicode.c
|
||
- u32cconv: don't use nl_langinfo early to call u32toutf8()
|
||
- u32cconv: use locale_utf8locale to set utf8locale
|
||
- u32cconv: when initializing (u32init == 0), use locale_charset, then
|
||
nl_langinfo, then stub_charset to determine the charset
|
||
- u32cconv: even if we don't have iconv, if locale_utf8locale is non-
|
||
zero, return u32toutf8
|
||
|
||
11/15
|
||
-----
|
||
lib/readline/nls.c
|
||
- _rl_init_locale: new function, split off code that determines current
|
||
locale from _rl_init_eightbit, use it to set _rl_utf8locale
|
||
|
||
lib/readiline/rlprivate.h
|
||
- _rl_init_locale: new extern declaration
|
||
|
||
lib/readline/readline.c
|
||
- rl_initialize: if not initializing everything the first time, call
|
||
_rl_init_locale to check current locale and set _rl_utf8locale
|
||
|
||
lib/readline/text.c
|
||
- _rl_insert_char: optimize cases where we are inserting a single-byte
|
||
character in a locale with multibyte characters
|
||
- _rl_insert_char: check whether character is single byte if we know
|
||
we are in a UTF-8 locale, optimize single-byte case to avoid calls
|
||
to mbrtowc and memmove/memcpy
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_char_value: if we are in a UTF-8 locale (_rl_utf8locale) and the
|
||
current character does not have the eighth bit set ((c & 0x80) == 0),
|
||
return that char without bothering to call mbrtowc
|
||
- _rl_adjust_point: don't bother calling mbrlen if we are in a UTF-8
|
||
locale and the current character is not a multibyte character
|
||
- _rl_find_next_mbchar_internal: if we are in a UTF-8 locale, use that
|
||
to avoid calls to mbrtowc
|
||
|
||
lib/readline/display.c
|
||
- _rl_col_width: if in a UTF-8 locale, take advantage of that to avoid
|
||
calls to mbrlen and mbrtowc
|
||
- rl_redisplay: if in a UTF-8 locale, take advantage of that to avoid
|
||
calls to mbrtowc
|
||
|
||
11/17
|
||
-----
|
||
lib/readline/histlib.h
|
||
- PATTERN_SEARCH: new flag for history search interfaces, means to
|
||
search for a pattern as Posix specifies
|
||
|
||
lib/readline/histsearch.c
|
||
- history_search_internal: now takes a `flags' argument instead of just
|
||
an `anchored' argument to accommodate PATTERN_SEARCH
|
||
- _hs_history_patsearch: new internal interface to use when flags
|
||
specify PATTERN_SEARCH
|
||
|
||
lib/readline/rlprivate.h
|
||
- SF_PATTERN: new flag for non-incremental search contexts, means to
|
||
treat search string as a pattern (maps to PATTERN_SEARCH)
|
||
|
||
lib/readline/search.c
|
||
- noninc_dosearch: takes an additional `flags' argument for SF_PATTERN
|
||
- noninc_search_from_pos: takes an additional `flags' argument for
|
||
SF_PATTERN
|
||
- noninc_dosearch: pass flags argument through to noninc_search_from_pos
|
||
- _rl_nsearch_init: if we are in vi command mode, and `pchar' (key used
|
||
to invoke the search) is `?' or `/', add SF_PATTERN to the flags
|
||
to conform to Posix spec for vi-mode editing
|
||
- _rl_nsearch_dosearch: if cxt->sflags indicates that we should do a
|
||
pattern search, pass SF_PATTERN to noninc_search_from_pos
|
||
- rl_noninc_forward_search_again: if in vi command mode and key == `N',
|
||
make sure flags arg passed to noninc_dosearch includes SF_PATTERN
|
||
- rl_noninc_reverse_search_again: if in vi command mode and key == `n',
|
||
make sure flags arg passed to noninc_dosearch includes SF_PATTERN
|
||
- rl_history_search_internal: pass extra flags arg to noninc_search_from_pos
|
||
|
||
11/18
|
||
-----
|
||
lib/readline/search.c
|
||
- noninc_search_from_pos: takes a new argument, a pointer to int where
|
||
it stores the offset of the match in the history line (if non-NULL),
|
||
modified callers
|
||
- rl_history_search_internal: pass newcol pointer to
|
||
noninc_search_from_pos to avoid having to recompute the match offset
|
||
in the matching history entry
|
||
|
||
config.h.in
|
||
- define HAVE_FNMATCH if we have the fnmatch function (configure was
|
||
already checking for it)
|
||
|
||
lib/readline/histsearch.c
|
||
- _hs_history_patsearch: transform the pattern into one ending in a
|
||
`*' to avoid having to perform multiple match attempts from each
|
||
index in the history line
|
||
- history_search_internal: changes to handle pattern matching if
|
||
PATTERN_SEARCH is in the flags and HAVE_FNMATCH is defined. This
|
||
makes vi-mode history searching treat the user-specified search
|
||
string as an fnmatch pattern, as Posix requires. Fixes issue
|
||
reported by <jwdevel@gmail.com>
|
||
|
||
11/19
|
||
-----
|
||
builtins/shopt.def
|
||
- shopt_enable_hostname_completion: only declare this if READLINE
|
||
defined, since that's the only time it's used. Reported by
|
||
isabella parakiss <izaberina@gmail.com>
|
||
|
||
11/20
|
||
-----
|
||
builtins/common.c
|
||
- display_signal_list: make `kill -l 0' print `EXIT', modifying change
|
||
from 9/17
|
||
|
||
11/21
|
||
-----
|
||
subst.c
|
||
- expand_word_internal: when the shell encounters a backslash as the
|
||
last character of the string, don't try to add a '\'0' to the end
|
||
of the string if the string is quoted, just add a <CTLESC><\> and
|
||
skip to the end of string processing. Fixes oob-read error
|
||
reported by Jerzy Kramarz <op7ica@gmail.com>
|
||
|
||
test.c
|
||
- two_arguments: check argv[pos][1] before checking argv[pos][2] when
|
||
looking for a unary argument. Fixes oob-read error on single `-'
|
||
in unary operator position reported by Jerzy Kramarz
|
||
<op7ica@gmail.com>
|
||
- ANDOR: check s[1] before checking s[2] in case s[1] == end of string.
|
||
Fixes oob-read error reported by Jerzy Kramarz <op7ica@gmail.com>
|
||
|
||
subst.c
|
||
- command_substitute: now takes additional flags argument, changed one
|
||
caller (param_expand) to pass through PF_ASSIGNRHS flag; other callers
|
||
pass 0
|
||
- command_substitute: pass through flags argument to read_comsub
|
||
- read_comsub: now takes additional new flags argument to indicate
|
||
whether or not the word is in a context where word splitting will
|
||
eventually be performed
|
||
- read_comsub: if we are running in a context where word splitting
|
||
will not take place (PF_ASSIGNRHS), we read a CTLESC, and CTLESC is
|
||
in $IFS, add a CTLESC to make sure it gets through a round of
|
||
dequoting
|
||
|
||
11/23
|
||
-----
|
||
parse.y
|
||
- xparse_dolparen: since reset_parser frees the pushed string list,
|
||
and this is supposed to be a separate parsing context, we need to
|
||
save and restore pushed_string_list around the call to parse_string
|
||
and reset_parser. Fixes bug reported by Dan Douglas
|
||
<ormaaj@gmail.com>
|
||
|
||
bashhist.h
|
||
- HISTEXPAND_DEFAULT: default value of history_expansion, moved here
|
||
from flags.c
|
||
|
||
flags.[ch]
|
||
- histexp_flag: new variable, this is what set -H/set -o histexpand
|
||
sets; history_expansion set to value of this variable; defaults to 0
|
||
- history_expansion: now set to HISTEXPAND_DEFAULT
|
||
|
||
bashhist.c
|
||
- bash_history_reinit: if interact == 0, set history_expansion to the
|
||
value of histexp_flag, to allow -H option to enable history
|
||
expansion
|
||
- bash_history_reinit: if interact == 0, make sure
|
||
history_expansion_inhibited is set opposite of histexp_flag, so
|
||
enabling history expansion with -H invocation option turns off
|
||
inhibited expansion. If interactive shell, we turn it off so
|
||
history_expansion controls whether or not history expansion takes
|
||
place. In practice, this function is always called with interact == 0,
|
||
and -c command still doesn't perform history expansion
|
||
|
||
shell.c
|
||
- init_interactive: make sure histexp_flag and history_expansion are
|
||
identical in an interactive shell; allows both -H/+H option and
|
||
default compilation options (HISTEXPAND_DEFAULT) to work
|
||
|
||
11/24
|
||
-----
|
||
subst.c
|
||
- get_word_from_string: take advantage of the fact that SEPARATORS is
|
||
always a (possibly local) copy of IFS, so build a local charmap of
|
||
separators and use it instead of the (cached and possibly stale)
|
||
ifs_cmap map and isifs macro. Fixes bug with -N stripping leading
|
||
whitespace reported by Clark Wang <clarkw@vmware.com>
|
||
|
||
11/25
|
||
-----
|
||
builtins/read.def
|
||
- read_builtin: make `i' volatile, since auto variables are technically
|
||
undefined after a longjmp, and a timeout on SIGALRM causes one.
|
||
Fix suggested by Dmitry Goncharov <dgoncharov@users.sf.net>
|
||
|
||
11/27
|
||
-----
|
||
parse.y
|
||
- shell_getc: if we are reading input from a string, and we get the
|
||
ending '\0', and we are not expanding an alias, return EOF right
|
||
away. It might be an eval'ed string that has a syntax error.
|
||
Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
|
||
|
||
11/28
|
||
-----
|
||
subst.c
|
||
- expand_word_internal: if we're expanding a quoted string containing
|
||
a tilde as the first character of a word, only expand the tilde if
|
||
we're expanding an array subscript (Q_ARRAYSUB), not if we're
|
||
expanding any arithmetic expression (Q_ARITH). This fixes a
|
||
backwards compatibility issue with expressions like ~0 reported by
|
||
Bize Ma <binaryzebra@gmail.com>
|
||
|
||
subst.c
|
||
- parameter_brace_expand_indir: if the variable is not special and
|
||
the indirect variable is unset (!variable where variable is unset),
|
||
report an error. This is a slight incompatibility with previous
|
||
versions, which did not differentiate between indirecting an unset
|
||
variable and an indirect expansion resulting in an unset variable.
|
||
Fixes omission reported by otenba@protonmail.com
|
||
|
||
11/30
|
||
-----
|
||
lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
|
||
- do-uppercase-version: since this doesn't actually exist, replace it
|
||
with do-lowercase-version, with the caveat that do-lowercase-version
|
||
results in undefined behavior if bound to a character that's
|
||
already lowercase. Suggested by Branden Robinson
|
||
<g.branden.robinson@gmail.com>
|
||
|
||
lib/readline/doc/rluser.texi
|
||
- history-substring-search-forward: was misspelled as "substr-search";
|
||
ditto for search-backward
|
||
|
||
doc/bash.1
|
||
- history-substring-search-{backward,forward}: add documentation, text
|
||
straight from readline.3
|
||
|
||
jobs.c
|
||
- initialize_job_control: if the terminal's process group is valid,
|
||
but the shell is not the foreground process, check for terminating
|
||
signals (like SIGHUP, which the kernel would send if the process
|
||
group were orphaned) during the loop where we try to stop the shell
|
||
if it's not in the foreground. Not a perfect solution; the kernel
|
||
might not send SIGHUP
|
||
|
||
12/1
|
||
----
|
||
jobs.c
|
||
- initialize_job_control: only go through the SIGTTIN loop 16 times at
|
||
most before deciding we're in the background and probably a member of
|
||
an orphaned process group; set original_pgrp to the terminal's pgrp
|
||
(so the eventual give_terminal_to doesn't leave the terminal in the
|
||
wrong pgrp); and bail on job control initialization
|
||
|
||
tests/run-all
|
||
- unset SHELLOPTS to avoid its options `polluting' the test
|
||
environment. Suggestion from Vladimir Marek
|
||
<Vladimir.Marek@oracle.com>
|
||
|
||
tests/execscript
|
||
- use $PWD/exec8.sub to protect against someone who has a cd command
|
||
in his bashrc. Report from Vladimir Marek
|
||
<Vladimir.Marek@oracle.com>
|
||
|
||
12/2
|
||
----
|
||
shell.c
|
||
- open_shell_script: call end_job_control before exiting the shell in
|
||
case we were run as `bash -i script' and there is a problem with
|
||
executing `script'. If we don't, the terminal ends up in the wrong
|
||
process group. Fix from Clark Wang <clarkw@vmware.com>
|
||
|
||
12/3
|
||
----
|
||
parse.y
|
||
- read_comsub: if we look for a character following a `<' and it's
|
||
not `<' (indicating that we don't have to read a here-document),
|
||
make sure we push that character back and go through the loop again
|
||
so we note the right word start location. Fixes bug reported by
|
||
parasite parasite <42parasite@gmail.com>
|
||
|
||
subst.c
|
||
- parameter_brace_expand_indir: clean up checks for unset variables to
|
||
minimize incompatibilities with previous versions
|
||
|
||
12/5
|
||
----
|
||
lib/readline/history.c
|
||
- add_history: don't update history_length until all of the updates to
|
||
the_history are complete, so history_length is always consistent.
|
||
Report and fix from Hong Cho <hong.cho@citrix.com>
|
||
|
||
bashline.c
|
||
- bash_backward_shellword: fix to work better at the end of the line,
|
||
with multiple trailing whitespace characters. Inspired by report
|
||
from Kirill Timofeev <kt97679@gmail.com>
|
||
|
||
Makefile.in
|
||
- bashbug: use `^' as the sed delimiter instead of `%'; some compilers
|
||
use `%' in CFLAGS. Report from Vladimir Marek
|
||
<Vladimir.Marek@oracle.com>
|
||
|
||
12/6
|
||
----
|
||
test.c
|
||
- test_unop: make sure op[1] != 0 before testing op[2]
|
||
- term: make sure argv[pos][1] != 0 before testing argv[pos][2]. Fixes
|
||
oob-read reported by Jerzy Kramarz <op7ica@gmail.com>
|
||
|
||
12/7
|
||
----
|
||
lib/glob/glob.c
|
||
- glob_filename: assign the return value of realloc (results, ...) to
|
||
a temp pointer, so if realloc returns NULL, we make sure we free
|
||
results. Report from Kirill Timofeev <kt97679@gmail.com>
|
||
|
||
12/12
|
||
-----
|
||
lib/sh/shquote.c
|
||
- sh_backslash_quote: if FLAGS&2, backslash-quote other single-byte
|
||
characters that are in the current locale's <blank> character class
|
||
|
||
builtins/printf.def
|
||
- printf_builtin: when processing the `%q' format, make sure to
|
||
backslash quote all <blank> characters by making sure that FLAGS
|
||
passed to sh_backslash_quote includes 2. Fixes issue for certain
|
||
iso-8859-1 locales where character 160 (octal 240, hex 0xa0) is a
|
||
non-breaking space. Report from Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
|
||
lib/sh/eaccess.c
|
||
- sh_stat: if DEV_FD_STAT_BROKEN is defined, take /dev/fd/N and turn
|
||
it into a stat on file descriptor N, as if /dev/fd were not
|
||
available. This is the case on some old versions of SunOS. Report
|
||
and patch from Dmitry Goncharov <dgoncharov@users.sf.net>
|
||
|
||
config.h.in
|
||
- DEV_FD_STAT_BROKEN: add define
|
||
|
||
configure.ac
|
||
- --enable-dev-fd-stat-broken: new command-line option, defines
|
||
DEV_FD_STAT_BROKEN if supplied at configure time
|
||
|
||
doc/bashref.texi
|
||
- --enable-dev-fd-stat-broken: document new command-line option for
|
||
configure
|
||
|
||
arrayfunc.c
|
||
- assoc_expand_once: new variable, declared here just because
|
||
|
||
arrayfunc.h
|
||
- assoc_expand_once: extern declaration
|
||
- AV_NOEXPAND: new flag value for the array_value family of functions:
|
||
means to not run associative array subscripts through word expansion
|
||
|
||
builtins/set.def
|
||
- unset_builtin: call unbind_array_element with assoc_expand_once as
|
||
third arg, controls whether we expand associative array subscripts
|
||
(if 1, we suppress the usual expansion). With accompanying shopt,
|
||
provides backwards compatible option to solve problem with quotes
|
||
and other characters in associative array subscripts pointed out
|
||
most recently by Mingye Wang (Arthur2e5) <arthur200126@gmail.com>
|
||
|
||
builtins/shopt.def
|
||
- assoc_expand_once: new option, controls value of internal variable
|
||
with the same name. Currently undocumented because I'm not completely
|
||
sold on the name
|
||
|
||
expr.c
|
||
- evalexp: now takes a second argument, flags. Changed all callers in
|
||
multiple other files (builtins/let.def,execute_cmd.c,arrayfunc.c,
|
||
subst.c,test.c,variables.c)
|
||
|
||
externs.h
|
||
- EXP_EXPANDED, new flag for second argument to evalexp
|
||
|
||
builtins/let.def
|
||
- let_builtin: add EXP_EXPANDED to flags passed to evalexp
|
||
|
||
execute_cmd.c
|
||
- execute_arith_command: add EXP_EXPANDED to flags passed to evalexp,
|
||
since the command string is run through expand_words_no_vars before
|
||
being evaluated
|
||
|
||
expr.c
|
||
- set expression-global variable already_expanded if flags arg to
|
||
evalexp contains EXP_EXPANDED
|
||
- if assoc_expand_once option set and already_expanded flag set, pass
|
||
1 in flags to array_variable_part to skip over quotes and expansions
|
||
in the subscript
|
||
- if those two variables set, pass AV_NOEXPAND as flag to
|
||
get_array_value to prevent word expansions on the subscript
|
||
|
||
arrayfunc.c
|
||
- if flags passed to unbind_array_element includes 1, pass flag on to
|
||
skipsubscript so we don't expect matched quotes or process
|
||
expansions in the subscript
|
||
- if flags to array_value_internal include AV_NOEXPAND, pass 1 as flag
|
||
to array_variable_part to pass along to skipsubscript
|
||
- if flags to array_value_internal include AV_NOEXPAND, don't call
|
||
expand_assignment_string_to_string; just use the unexpanded subscript
|
||
to produce the key [THIS IS A WORK IN PROGRESS]
|
||
|
||
12/14
|
||
-----
|
||
subst.h
|
||
- ASS_NOEXPAND: assignment flag that inhibits expansion of associative
|
||
array subscripts
|
||
|
||
variables.c
|
||
- bind_int_variable: takes new flags arg; flags are taken from the
|
||
ASS_ set of assignment flags, changed callers (bashline.c, expr.c,
|
||
pcomplete.c)
|
||
- bind_int_variable: if flags includes ASS_NOEXPAND, pass 1 as flag to
|
||
valid_array_reference and array_variable_part to pass along to
|
||
skipsubscript, so we don't try to skip over quoted strings in the
|
||
subscript
|
||
- bind_int_variable: pass flags along to assign_array_element
|
||
|
||
variables.h
|
||
- bind_int_variable: updated extern declaration with new flags arg
|
||
|
||
expr.c
|
||
- expr_bind_variable: if the assoc_expand_once option is enabled, and
|
||
the flags to evalexp indicate that we have already run the expression
|
||
through word expansion, pass ASS_NOEXPAND as flag to bind_int_variable
|
||
|
||
arrayfunc.c
|
||
- assign_array_element: if flags includes ASS_NOEXPAND, pass 1 as flag
|
||
to array_variable_name to pass along to skipsubscript
|
||
- assign_array_element: if flags includes ASS_NOEXPAND, don't run an
|
||
associative array subscript through word expansion, just use as-is
|
||
|
||
subst.c
|
||
- param_expand: call evalexp with EXP_EXPANDED flag for arithmetic
|
||
substitution because the string has already been expanded with
|
||
expand_arith_string
|
||
|
||
12/15
|
||
-----
|
||
builtins/read.def
|
||
- read_builtin: use value of assoc_expand_once for valid_array_reference
|
||
as with other uses
|
||
- bind_read_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
|
||
to assign_array_element
|
||
|
||
general.c
|
||
- assignment: instead of checking whether flags == 0 to allow a `[',
|
||
explicitly check for (flags&1) to disallow it. This leaves the door
|
||
open for additional flag values
|
||
|
||
builtins/printf.def
|
||
- printf_builtin: use value of assoc_expand_once for
|
||
valid_array_reference as with other uses
|
||
- bind_printf_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
|
||
to assign_array_element
|
||
|
||
12/16
|
||
-----
|
||
builtins/history.def
|
||
- change history -d option to handle negative arguments; negative
|
||
arguments offset from the end of the history list (last_position + 1
|
||
so history -d -1 deletes the history -d command that just got
|
||
added). Original patch from Piotr Grzybowski <narsil.pl@gmail.com>
|
||
|
||
doc/bash.1,lib/readline/doc/hsuser.texi
|
||
- documented new behavior of negative offsets for `history -d'
|
||
|
||
12/17
|
||
-----
|
||
lib/readline/history.c
|
||
- remove_history: use memmove to move the history list around instead
|
||
of a loop that copies pointers one at a time, similar to add_history
|
||
|
||
12/19
|
||
-----
|
||
configure.ac
|
||
- linux: make sure PGRP_PIPE is defined unconditionally for all kernel
|
||
versions greater than 2.3.*
|
||
|
||
lib/readline/history.c
|
||
- clear_history: when clearing the history, reset history_base to 1
|
||
(its default)
|
||
- remove_history_range: new function, removes a set of history entries
|
||
and returns them all for deallocation
|
||
|
||
lib/readline/history.h
|
||
- remove_history_range: extern declaration
|
||
|
||
12/20
|
||
-----
|
||
execute_cmd.c
|
||
- eval_arith_for_expr: pass EXP_EXPANDED to evalexp, since we run the
|
||
expression through expand_words_no_vars
|
||
|
||
12/21
|
||
-----
|
||
input.c
|
||
- b_fill_buffer: when read returns EOF or error, and we reset the
|
||
buffer and pointers, reset the input pointer to 0. Fixes issue
|
||
reported by Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
12/22
|
||
-----
|
||
arrayfunc.[ch],subst.c
|
||
- array_expand_index: added new FLAGS argument, reserved for future use,
|
||
changed callers
|
||
|
||
|
||
12/24
|
||
-----
|
||
variables.c
|
||
- can_optimize_assignment,optimized_assignment: see if we can detect
|
||
whether or not we're trying to append a string to a string variable,
|
||
and optimize that using realloc/strcpy. Based on a log-ago
|
||
suggestion from Aharon Robbins <arnold@skeeve.com>
|
||
|
||
12/27
|
||
-----
|
||
builtins/help.def
|
||
- help_builtin: don't pass return value from ngettext() directly to
|
||
printf
|
||
|
||
12/28
|
||
-----
|
||
sig.c
|
||
- set_signal_handler: set SA_RESTART for SIGWINCH, so window size
|
||
changes don't interrupt open/read/write. Suggested by
|
||
Andriy Prystupa <andriy.prystupa@globallogic.com> back in 10/2016
|
||
|
||
12/30
|
||
-----
|
||
execute_cmd.c
|
||
- coproc_pidchk: if MULTIPLE_COPROCS, call cpl_search to find coproc
|
||
associated with pid, don't remove it from the list with cpl_delete.
|
||
Just mark as dead and wait for coproc_reap/cpl_reap to take care
|
||
of disposing it
|
||
- execute_coproc: NEW FEATURE: run the coproc name through word
|
||
expansion before creating the coproc; this allows unique coprocs
|
||
to be created in loops. Originally requested way back in 2012 by
|
||
Erik Brandsberg <ebrandsberg@juniper.net>
|
||
|
||
command.h
|
||
- subshell_com: now has a line number member: line
|
||
|
||
make_cmd.c
|
||
- make_subshell_command: assign current line number (line number of the
|
||
ending right paren) to `line' member
|
||
|
||
copy_cmd.c
|
||
- copy_subshell_command: copy the `line' member
|
||
|
||
execute_command.c
|
||
- execute_command_internal: when executing a user subshell (`(command)'),
|
||
set the line number and line number for the ERR trap from the line
|
||
number saved in the subshell command struct. Fix from
|
||
Eduardo A. Bustamante López <dualbus@gmail.com>
|
||
- execute_arith_command: set line number for ERR trap from line number
|
||
saved in the arith command struct. Fix from
|
||
Eduardo A. Bustamante López <dualbus@gmail.com>
|
||
- execute_cond_command: set line number for ERR trap from line number
|
||
saved in the cond command struct. Fix from
|
||
Eduardo A. Bustamante López <dualbus@gmail.com>
|
||
|
||
variables.c
|
||
- bind_variable_internal: move can_optimize_assignment call to the
|
||
right place
|
||
|
||
12/31
|
||
-----
|
||
variables.c
|
||
- find_variable_nameref: treat a circular variable reference as
|
||
referring to a variable of that name in the global scope (for now),
|
||
if one exists. PROVISIONAL change: inspired by suggestion back in
|
||
6/2016 by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
1/2/2017
|
||
--------
|
||
{expr,general,hashcmd}.c
|
||
- include flags.h for flag values
|
||
|
||
make_cmd.c
|
||
- include shell.h instead of the files it includes
|
||
|
||
flags.h
|
||
- new extern declarations for want_pending_command, read_from_stdin
|
||
|
||
subst.h
|
||
- add extern declaration for expanding_redir, assigning_in_environment
|
||
|
||
trap.h
|
||
- add extern declaration for running_trap
|
||
|
||
execute_cmd.h
|
||
- added extern declarations for variables declared in execute_cmd.c,
|
||
changed files that declare lots of extern variables
|
||
|
||
shell.h
|
||
- added extern declarations for variables declared in shell.c,
|
||
changed files that declare lots of extern variables
|
||
|
||
parser.h
|
||
- added extern declarations for variables declared in parse.y,
|
||
changed files that declare lots of extern variables
|
||
|
||
[lots of changes to reduce the number of extern declarations in C and DEF files]
|
||
|
||
parse.y
|
||
- xparse_dolparen: need ALIAS or DPAREN_ARITHMETIC to be defined to
|
||
use STRING_SAVER
|
||
|
||
1/3
|
||
---
|
||
sig.c
|
||
- termsig_handler: don't call end_job_control if subshell_environment
|
||
indicates that we're in a command or process substitution.
|
||
Provisional fix for bug reported by Russell King <rmk@armlinux.org.uk>
|
||
|
||
jobs.c
|
||
- end_job_control: only attempt to give the terminal back to
|
||
original_pgrp if job_control != 0; don't test interactive_shell
|
||
|
||
execute_cmd.c
|
||
- execute_disk_command: call QUIT after search_for_command, since
|
||
the only time QUIT gets called is when the path is actually
|
||
searched. It doesn't happen for an absolute pathname. Fix for
|
||
bug reported by Russell King <rmk@armlinux.org.uk>
|
||
|
||
1/16
|
||
----
|
||
lib/glob/glob.c
|
||
- extglob_skipname,wextglob_skipname: if we don't find a reason to
|
||
not skip the name in any subpattern (r returns 0 for any subpattern),
|
||
return 1 because we should skip the name
|
||
- extglob_skipname,wextglob_skipname: if we don't find a reason to
|
||
not skip the name in any subpattern, but the first part of the extglob
|
||
pattern is a wildcard (`*(pat)'), check the rest of the pattern, if
|
||
any, to decide whether or not to skip the name. Fixes bug reported
|
||
by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
lib/glob/glob_loop.c
|
||
- CHAR -> GCHAR (unsigned char); change uses of CHAR to GCHAR
|
||
|
||
lib/glob/glob.c
|
||
- wchkname -> wskipname
|
||
- wskipname: now takes a third `flags' argument, like the other variants
|
||
of skipname
|
||
|
||
1/17
|
||
----
|
||
redir.c
|
||
- here_document_to_fd: set the file descriptor open for writing to the
|
||
here document to be close-on-exec. Fixes bug reported by
|
||
Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
1/18
|
||
----
|
||
{gmisc,gm_loop}.c
|
||
- match_pattern_char,match_pattern_wchar: moved to gm_loop.c (new file),
|
||
compile twice for single and wide characters as with the rest of
|
||
the functions
|
||
- umatchlen,wmatchlen: ditto
|
||
- extglob_pattern_p: move to gm_loop.c, generalize for regular and
|
||
wide-char versions
|
||
|
||
1/19
|
||
----
|
||
lib/readline/complete.c
|
||
- stat_char: fix small memory leak if stat/lstat returns -1
|
||
|
||
bashline.c
|
||
- bash_filename_stat_hook,bash_directory_completion_hook: make sure
|
||
expand_prompt_string is caled wth W_NOPROCSUB flag
|
||
- directory_exists: don't dequote the filename passed as an argument;
|
||
this function should never get quoted pathnames
|
||
|
||
subst.c
|
||
- expand_word_internal: when calling expand_word_internal recursively
|
||
after reading a double-quoted string, make sure the W_NOCOMSUB and
|
||
W_NOPROCSUB flags make it to the recursive invocation. Fixes bug
|
||
reported by Jens Heyens <jens.heyens@cispa.saarland>
|
||
|
||
1/23
|
||
----
|
||
lib/readline/signals.c
|
||
- _rl_orig_sigset: original signal mask, set and restored by
|
||
rl_set_signals (rl_clear_signals doesn't block signals). If we
|
||
are not installing signal handlers, just save signal mask each
|
||
time rl_set_signals is called
|
||
|
||
lib/readline/input.c
|
||
- rl_getc: use _rl_orig_sigmask in the call to pselect(), so we block
|
||
the set of signals originally blocked by the calling application.
|
||
Fixes bug reported by Frédéric Brière <fbriere@fbriere.net>
|
||
|
||
parse.y
|
||
- yy_readline_get: try to unset NONBLOCK mode on readline's input
|
||
file descriptor before calling readline(). Inspired by report from
|
||
Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
1/30
|
||
----
|
||
parse.y
|
||
- parse_comsub: don't unconditionally set the LEX_WASDOL flag when we
|
||
see a `$'; we should toggle it to accommodate things like $$.
|
||
Fixes bug reported by Christian Weisgerber <naddy@mips.inka.de>
|
||
- parse_matched_pair: do the same thing with LEX_WASDOL
|
||
|
||
2/1
|
||
---
|
||
jobs.h
|
||
- JWAIT_PERROR,JWAIT_FORCE: new defines for the wait_for_ family of
|
||
functions
|
||
|
||
jobs.c
|
||
- wait_for_job, wait_for_any_job: take new flags argument for use by
|
||
the wait builtin
|
||
- wait_for_job: if JWAIT_FORCE flag supplied, loop waiting for job to
|
||
terminate instead of change state
|
||
- wait_for_single_pid: if JWAIT_FORCE flag supplied, loop waiting for
|
||
child process to terminate instead of change state
|
||
|
||
builtins/wait.def
|
||
- takes a new `-f' option, signifying to wait until the specified job
|
||
or process terminates, instead of changes state
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- wait: document the new -f option and its behavior when job control
|
||
is enabled
|
||
- job control: add a paragraph describing how the wait builtin changes
|
||
behavior when job control is enabled: it returns when a job changes
|
||
state
|
||
|
||
2/2
|
||
---
|
||
examples/loadables/fdflags.c
|
||
- fdflags: new loadable builtin to set and unset file descriptor flags
|
||
(such as non-blocking, though bash undoes that) for descriptors bash
|
||
has open. Developed in consultation with Christos Zoulas
|
||
<christos@zoulas.com>
|
||
|
||
2/3
|
||
---
|
||
|
||
lib/readline/text.c
|
||
- rl_previous_screen_line: attempt to move to the same column on the
|
||
previous screen line of the current readline buffer by moving back
|
||
a number of characters equal to the screen width
|
||
- rl_next_screen_line: attempt to move to the same column on the
|
||
next screen line of the current readline buffer by moving forward
|
||
a number of characters equal to the screen width. Both originally
|
||
suggested by Hans Ginzel <hans@matfyz.cz>
|
||
|
||
lib/readline/readline.h
|
||
- rl_{next,previous}_screen_line: extern declarations
|
||
|
||
lib/readline/funmap.c
|
||
- {next,previous}-screen-line: new bindable command names
|
||
|
||
lib/readline/doc/{rluser.texi,readline.3}
|
||
- {next,previous}-screen-line: document behavior, including limitations
|
||
|
||
2/5
|
||
---
|
||
lib/readline/input.c
|
||
- rl_read_key: when reading input from a macro, make sure to return
|
||
the next character as an unsigned char, so we handle multibyte
|
||
character sequences correctly. Report and fix from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
2/6
|
||
---
|
||
shell.c
|
||
- --pretty-print: new invocation option, currently undocumented, dumps
|
||
a pretty-printed version of a shell script given as an argument to
|
||
stdout
|
||
- main: call pretty_print_loop() if we're in pretty-printing mode in
|
||
a non-interactive shell
|
||
|
||
eval.c
|
||
- pretty_print_loop: new function, similar to reader_loop, reads
|
||
commands and prints them by displaying the result from
|
||
make_command_string()
|
||
|
||
externs.h
|
||
- pretty_print_loop: new extern declaration
|
||
|
||
2/9
|
||
---
|
||
doc/{bash.1,bashref.texi}
|
||
- here strings: correct documentation to note they do not undergo
|
||
brace expansion. Report from Conor McCarthy <mr.spuratic@gmail.com>
|
||
|
||
2/9
|
||
---
|
||
lib/readline/display.c
|
||
- expand_prompt: instead of recomputing the line break offsets for
|
||
prompts that span multiple screen lines on every call to rl_redisplay,
|
||
do it here. Manage a local array local_prompt_newlines; set an offset
|
||
every time `physchars' hits a multiple of the screen width. Inspired
|
||
by https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843819
|
||
- rl_redisplay: don't calculate multi-line prompt line break indices
|
||
here; use the values calculated by expand_prompt
|
||
- rl_{save,restore}_prompt: save and restore local_prompt_newlines
|
||
|
||
2/11
|
||
----
|
||
lib/readline/mbutil.c
|
||
- _rl_find_prev_mbchar_internal: since we're traversing the string
|
||
from the beginning, shortcut non-multibyte characters in a UTF-8
|
||
locale
|
||
|
||
parse.y
|
||
- parse_comsub: if we are parsing a here document with a quoted
|
||
delimiter (LEX_QUOTEDDOC), we should not remove <backslash><newline>
|
||
pairs from the body of the here document. Need to add LEX_QUOTEDDOC
|
||
to the values in tflags when calling shell_getc. Fixes bug reported
|
||
by Michael Homer <michael.homer@ecs.vuw.ac.nz>, patch was originally
|
||
contributed by Geir Hauge <geir.hauge@gmail.com>
|
||
|
||
2/15
|
||
----
|
||
jobs.c
|
||
- bgp_add: if hashed pid collides with bgpids.head index, print a
|
||
warning and move to the next index. Attempt to avoid collision
|
||
problem reported by Graham Northup <northug@clarkson.edu>
|
||
|
||
2/17
|
||
----
|
||
subst.c
|
||
- process_substitute: call remove_quoted_escapes on the command string
|
||
like command substitution does, since the string will be run through
|
||
the parser again. Fixes bug reported by David Simmons
|
||
<bug-bash@tmp.davidsimmons.com>
|
||
|
||
config-top.h
|
||
- STATIC_PATH_VALUE: new config variable, undefined by default
|
||
|
||
variables.c
|
||
- shell_initialize: if STATIC_PATH_VALUE is defined, use it to set the
|
||
PATH variable at shell startup, overriding the environment and any
|
||
value for DEFAULT_PATH_VALUE. Based on a suggestion from
|
||
Lonnie Abelbeck <lonnie@abelbeck.com>
|
||
|
||
2/18
|
||
----
|
||
shell.c
|
||
- maybe_make_restricted: clear the hash table before making the PATH
|
||
variable read-only by calling stupidly_hack_special_variables.
|
||
Suggestion from Lonnie Abelbeck <lonnie@abelbeck.com>
|
||
|
||
subst.c
|
||
- expand_string_for_pat: change expansion of WORD in ${param[%[%]][#[#]]word}
|
||
to use this new function, initially identical to
|
||
expand_string_for_rhs
|
||
- getpattern: use expand_string_for_pat to expand the pattern
|
||
|
||
2/19
|
||
----
|
||
subst.c
|
||
- expand_string_for_rhs: now that this is only used to expand the RHS
|
||
of the various non-pattern ${paramOPword} expansions, set
|
||
expand_no_split_dollar_star depending on whether or not the entire
|
||
brace expansion is going to be subjected to word splitting: if it's
|
||
quoted or if IFS is set but null, we will not be splitting so we set
|
||
this to 1 and let $* expand to separate fields separated by a space.
|
||
This was heavily debated back in October 2014 and resulted in Posix
|
||
interp 888. Reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
2/20
|
||
----
|
||
subst.c
|
||
- expand_string_for_rhs: now takes `op' (brace expansion operator) as
|
||
an additional argument; changed call in parameter_brace_expand_rhs
|
||
- expand_string_for_rhs: make sure to set expand_no_split_dollar_star
|
||
if `op' is `=', since we are supposed to preserve the assignment
|
||
statement expansion semantics on the RHS of ${param=word}
|
||
|
||
jobs.c
|
||
- bgp_delindex: make sure to set ps->pid to NO_PID so we more
|
||
effectively remove it from the hash table. It shouldn't matter as
|
||
long as nothing in pidstat_table points to it, but better to be safe
|
||
- bgp_delete,bgp_search: generalize previous collision detection to
|
||
loop detection: abort search if we are going to go back to the
|
||
first index we tried
|
||
|
||
2/21
|
||
----
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_bword: if we're trying to move backward to non-whitespace
|
||
in a line that begins with whitespace, make sure we don't move
|
||
point to 0 and test memory locations before the start of the
|
||
buffer. Report and fix from Jason Hood <jadoxa@yahoo.com.au>
|
||
|
||
lib/readline/display.c
|
||
- expand_prompt: if _rl_screenwith == 0, call rl_reset_screen_size to
|
||
initialize it. If it's still 0 after that, guess that the screen
|
||
width is 80 and use that to guess how many screen lines the prompt
|
||
consumes
|
||
|
||
lib/readline/readline.c
|
||
- readline_internal_setup: if in emacs editing mode, and we are
|
||
showing the editing mode in the prompt, call _rl_reset_prompt() to
|
||
make sure that the updated setting of _rl_show_mode_in_prompt
|
||
(presumably set in an inputrc file) is reflected in the redisplay
|
||
performed by rl_callback_newline via readline_internal_setup.
|
||
Fix from Jason Hood <jadoxa@yahoo.com.au>
|
||
|
||
2/22
|
||
----
|
||
builtins/complete.def
|
||
- print_one_completion,print_compopts: make sure to display the
|
||
`nosort' and `noquote' options if they've been set for a particular
|
||
compspec. Fix from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
builtins/read.def
|
||
- read_builtin: if -e is supplied, read needs to free rlbuf before
|
||
returning, since it uses discard_unwind_frame at that point. Bug
|
||
and fix from ZhangXiao <xiao.zhang@windriver.com>
|
||
|
||
execute_cmd.c
|
||
- execute_for_command: when using a nameref as the for loop control
|
||
variable, make sure we check for readonly namerefs and make sure
|
||
that we force bind_variable to enforce restrictions on nameref
|
||
assignments. Fix from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
2/23
|
||
----
|
||
general.c
|
||
- make_absolute: convert deprecated cygwin_conv_to_full_posix_path
|
||
to cygwin_conv_path (CCP_WIN_A_TO_POSIX, ...)
|
||
|
||
{shell,variables}.c,config-top.h
|
||
- modify change from 2/17: rename STATIC_PATH_VALUE to RBASH_STATIC_PATH_VALUE;
|
||
don't use it in shell_initialize; set PATH to it just before
|
||
imposing restricted shell restrictions
|
||
|
||
2/24
|
||
----
|
||
subst.c
|
||
- expand_string_for_rhs: revert change from 2/19 concerning setting
|
||
expand_no_split_dollar_star so we are consistent with the Posix
|
||
examples. This anticipates Martijn Dekker initiating an austin
|
||
group discussion about this case
|
||
|
||
2/25
|
||
----
|
||
pcomplete.c
|
||
- gen_shell_function_matches: if COMPREPLY is an associative array,
|
||
don't coerce it to an indexed array, which will fail to produce any
|
||
matches anyway. Report from Grisha Levit <grishalevit@gmail.com>
|
||
- bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore
|
||
the nameref attribute. Report from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
subst.c
|
||
- parameter_brace_expand: if expand_no_split_dollar_star is set, make
|
||
sure chk_atstar treats ${var[*]} as quoted by passing Q_DOUBLE_QUOTES
|
||
as the second argument. Fixes differing treatment of $* and ${v[*]}
|
||
reported by Grisha Levit <grishalevit@gmail.com>, because otherwise
|
||
*contains_dollar_at gets set to 1 and the word is inappropriately
|
||
split
|
||
|
||
3/1
|
||
---
|
||
subst.c
|
||
- expand_word_list_internal: if a variable assignment fails (e.g., due
|
||
to a readonly variable) in a non-interactive posix mode shell, don't
|
||
abort the shell if the assignment is being performed by the command
|
||
builtin, even if it's something like `command eval v=1'. Fixes
|
||
RedHat bug https://bugzilla.redhat.com/show_bug.cgi?id=1389838
|
||
(reported by Denys Vlasenko)
|
||
|
||
3/3
|
||
---
|
||
builtins/shopt.def
|
||
- set_compatibility_level: make sure that changing the compatibility
|
||
level sets or modifies BASH_COMPAT. Fixes bug reported by
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
lib/glob/smatch.c
|
||
- is_cclass: broke into two functions: is_valid_cclass and cclass_test,
|
||
for future expansion. No functionality change
|
||
|
||
lib/glob/sm_loop.c
|
||
- BRACKMATCH: when testing a character against a character class name,
|
||
use the unfolded (original) character, since we're not performing a
|
||
comparison. This is what glibc does. Fixes bug reported by
|
||
Lukáš Ba<42>inka <lukas.barinka@boxtrap.net>
|
||
|
||
3/4
|
||
---
|
||
doc/{bash.1,bashref.texi}
|
||
- note that the arguments to -eq and the rest of the arithmetic
|
||
operators are evaluated as expressions when using [[. Report from
|
||
Rob la Lau <rob@ohreally.nl>
|
||
|
||
|
||
3/7
|
||
---
|
||
lib/readline/display.c
|
||
- update_line: completely rewrote the code that handles line wrapping
|
||
in the presence of multibyte/double-width characters; punts to a
|
||
dumb update in cases where the number of screen positions doesn't
|
||
match
|
||
- update_line: in one case, where we are deleting characters from the
|
||
line, if we are writing a non-space into the last screen character
|
||
position, note that we are no longer using a space as a placeholder
|
||
for a line wrap where there is a multi-width character that won't
|
||
fit on the screen line (wrapped_line[current_line+1] = 0)
|
||
|
||
3/10
|
||
----
|
||
lib/readline/readline.c
|
||
- bind_arrow_keys_internal: add default key bindings for control-
|
||
arrow keys, suggested by Per Bothner <per@bothner.com>
|
||
|
||
3/13
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- clarify the prompt strings the undergo expansion (PS0, PS1, PS2, and
|
||
PS4) before being displayed. Based on a report from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
3/14
|
||
----
|
||
input.c
|
||
- bufstream_ungetc: return EOF if being asked to unget a character to
|
||
a NULL buffer
|
||
- buffered_getchar: check buffered_fd is valid and buffers[buffered_fd]
|
||
is non-NULL before trying to dereference. Fixes bug reported by
|
||
floyd <floyd@floyd.ch>
|
||
|
||
execute_cmd.c
|
||
- execute_null_command: if we fork to execute the command, the subshell
|
||
is not interactive
|
||
- execute_null_command: for safety's sake, if a redirection attached
|
||
to a null command affects fd 0 or the fd the shell is reading for
|
||
input, and the redirection can potentially change or close that file
|
||
descriptor, force a fork so the redirection is done in a subshell
|
||
|
||
3/15
|
||
----
|
||
lib/readline/display.c
|
||
- update_line: if we have to output some bytes, and we are outputting
|
||
the prompt string, make sure we correct _rl_last_c_pos if we are
|
||
at the wrap offset -- what if all of the characters in the prompt
|
||
are invisible, so the visible length is 0? Fixes display bug
|
||
reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
execute_cmd.c
|
||
- undo_partial_redirects: new function, performs redirections specified
|
||
in redirection_undo_list and disposes of them. Intended to be used
|
||
to unwind redirections performed before a redirection error
|
||
- dispose_partial_redirects: new function, disposes of
|
||
redirection_undo_list and nulls the list
|
||
- execute_command_internal: use undo_partial_redirects
|
||
|
||
execute_cmd.h
|
||
- undo_partial_redirects: extern declaration
|
||
- dispose_partial_redirects: extern declaration
|
||
|
||
subst.c
|
||
- exp_jump_to_top_level: if we are throwing an expansion error while
|
||
expanding a redirection (expanding_redir != 0), undo any undoable
|
||
redirections by calling undo_partial_redirects() so we don't leave
|
||
any in place
|
||
|
||
variables.c
|
||
- initialize_shell_variables: if SHELLOPTS is in the environment,
|
||
unset the readonly attribute on any existing variable with that
|
||
name. It may have been created by processing a -o option on the
|
||
command line. Fixes issue reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
|
||
3/16
|
||
----
|
||
lib/readline/histfile.c
|
||
- read_history_range: short-circuit and do nothing if the history file
|
||
is of 0 size
|
||
- read_history_range: make sure the buffer is zero-terminated so the
|
||
timestamp tests work right for history files of 1 character. Report
|
||
and recommended fix from Denis Martinez <denis.martinez@gmx.com>
|
||
|
||
lib/readline/complete.c
|
||
- compute_lcd_of_matches: when trying to compute the common prefix
|
||
of a set of matches while performing case-insensitive completion
|
||
matching, don't sort the match list unless rl_sort_completion_matches
|
||
is non-zero. Fixes problem reported by Roee Bar <roee@arista.com>
|
||
|
||
3/18
|
||
----
|
||
subst.c
|
||
- extract_dollar_brace_string: handle process substitution embedded in
|
||
a ${...} expansion in the same way as command substitution. Reported
|
||
by D630 <d630@posteo.net>
|
||
|
||
parse.y
|
||
- LEX_GTLT: new flag, set by parse_matched_pair when a `<' or '>' is
|
||
read
|
||
- parse_matched_pair: handle an embedded process substitution like an
|
||
embedded command substitution if we are parsing an array index or
|
||
a dollar-brace expansion. Reported by D630 <d630@posteo.net>
|
||
|
||
3/21
|
||
----
|
||
subst.h
|
||
- ASS_NOEVAL, ASS_NOLONGJMP: new values for assignments, used by
|
||
make_variable_value
|
||
|
||
variables.c
|
||
- make_variable_value: ASS_NOEVAL: if this is set, don't attempt
|
||
arithmetic evaluation or case modification, just produce the value
|
||
(still honor ASS_APPEND)
|
||
- make_variable_value: ASS_NOLONGJMP: don't longjmp back to top_level
|
||
if arithmetic evaluation fails due to a syntax error
|
||
- bind_variable_internal: make sure aflags is passed to all calls to
|
||
make_variable_value
|
||
- push_temp_var: add ASS_NOLONGJMP to the flags passed to
|
||
bind_variable_internal. Fixes bug reported by D630 <d630@posteo.net>
|
||
|
||
bashline.c
|
||
- bash_execute_unix_command: don't bother to attempt optimization by
|
||
checking whether the call to parse_and_execute changes $READLINE_LINE;
|
||
it can be defeated by the new code that optimizes appends to string
|
||
variables. Bug reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/22
|
||
----
|
||
subst.c
|
||
- expand_string_for_rhs: re-apply change from 2/19 based on discussion
|
||
on the austin-group mailing list about how unquoted ${var-$*}
|
||
expands when IFS is null. Originally reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
3/25
|
||
----
|
||
parse.y
|
||
- read_token_word: if we read a WORD immediately after a CASE, FOR, or
|
||
SELECT, increment `expecting_in_token' to note that we're going to
|
||
be reading IN as the next non-newline token
|
||
- special_case_tokens: if we're expecting an IN (expecting_in_token > 0)
|
||
and we have an "in", return IN and decrement expecting_in_token. This
|
||
is a better implementation of Posix grammar rule 6 than the previous
|
||
code in that function (which is still there for posterity, but should
|
||
eventually be removed). Fixes bug reported by Torka Noda
|
||
<kanito.tasoga@gmail.com>
|
||
|
||
subst.c
|
||
- string_list_pos_params: if the expansion is not quoted, and IFS is
|
||
null, return a string containing the quoted positional parameters
|
||
separated by spaces. Callers know what to do with the string
|
||
- parameter_brace_substring,parameter_brace_remove_pattern,
|
||
parameter_brace_transform,parameter_brace_patsub,parameter_brace_casemod:
|
||
for the VT_POSPARMS case, after calling the operator-specific
|
||
expansion function, which eventually calls string_list_pos_params,
|
||
leave the returned string alone, since it's already quoted properly
|
||
- parameter_brace_expand: after calling the above functions to perform
|
||
expansions, if the expansion is being performed on an unquoted $*
|
||
when IFS is null, set the W_SPLITSPACE flag in the return WORD_DESC
|
||
so that splitting on spaces is performed on the already-quoted word.
|
||
Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/28
|
||
----
|
||
subst.c
|
||
- process_substitute: change so the subshell doesn't inherit the 'v'
|
||
option, like command substitution now does (as of bash-4.4).
|
||
Suggested by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/30
|
||
----
|
||
subst.c
|
||
- parameter_brace_casemod: now takes a pflags parameter, like
|
||
parameter_brace_patsub; changed callers
|
||
- parameter_brace_transform: now takes a pflags parameter, like
|
||
parameter_brace_patsub; changed callers
|
||
- pos_params_pat_subst,pos_params_modcase: if mflags indicates we're
|
||
on the rhs of an assignment statement and not going to perform
|
||
word splitting, we're expanding $*, and $IFS is null, make sure
|
||
string_list_pos_params treats the expansion as double-quoted, so
|
||
the positional parameters will be concatenated. Fixes bug reported
|
||
by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/31
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- add notes to the description of pipelines emphasizing that each
|
||
element of a pipeline is executed in a subshell, referring to the
|
||
description of a command execution environment, and that the
|
||
lastpipe option can modify that behavior. From a discussion with
|
||
Jean Delvare <jdelvare@suse.de>
|
||
|
||
4/1
|
||
---
|
||
subst.c
|
||
- expand_word_internal: set had_quoted_null to note for later if we
|
||
expand '', "", or "$x" when x is unset
|
||
- expand_word_internal: if we expand "$param" (or "${param}") and we
|
||
come back with a single word with the W_HAVEQUOTEDNULL flag set,
|
||
make sure we set had_quoted_null to remember it for later. In this
|
||
case, if we already have seen a quoted null and we expanded $@ in
|
||
this (sub)string expansion, we don't want to do any of the special
|
||
$@ handling. In particular, we don't want to set *expanded_something,
|
||
because that will result in word splitting and quoted null removal.
|
||
Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
|
||
- parameter_brace_patsub: when expanding ${*/pat/sub} in the case
|
||
where ifs_is_null != 0 and (pflags & PF_NOSPLIT2) (meaning we aren't
|
||
going to be doing word splitting), pass MATCH_ASSIGNRHS so we do
|
||
the right thing in this case. Part of a set of cases inspired by
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
- param_expand: case '*': if we are on the rhs of an assignment
|
||
(PF_ASSIGNRHS) and ifs is unset, and $1 == " ", we need to make sure
|
||
string_list_dollar_at gets called with Q_DOUBLE_QUOTES so it quotes
|
||
the positional parameters before joining them into a string with
|
||
string_list_internal. Otherwise, that first space gets removed by
|
||
the implicit word splitting that gets performed. Reported by
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
|
||
array.c
|
||
- array_patsub,array_modcase: handle ${A[*]} identically to $* when
|
||
not quoted and IFS is null (separate with spaces). Makes things
|
||
like ${A[*]/x/y} behave the same as ${*/x/y} when IFS is null
|
||
|
||
subst.c
|
||
- parameter_brace_patsub,parameter_brace_casemod: if expanding ${A[*]}
|
||
when the match is on the rhs of an assignment statement (PF_ASSIGNRHS)
|
||
and ifs is null, make sure the match is performed as if it were
|
||
quoted
|
||
- parameter_brace_substring: now takes a PFLAGS argument
|
||
- parameter_brace_substring: if expanding $* in a context where we
|
||
don't want to do word splitting (expand_no_split_dollar_star &&
|
||
PF_NOSPLIT2), make sure we expand $* as if it were quoted
|
||
- parameter_brace_substring: if expanding an unquoted $* on the rhs of
|
||
an assignment statement when IFS is null, make sure we expand the $*
|
||
as if it were quoted
|
||
|
||
4/4
|
||
---
|
||
doc/{bash.1,bashref.texi}
|
||
- read: document that a delim argument of '' terminates each line when
|
||
a NUL character appears
|
||
|
||
4/5
|
||
---
|
||
subst.c
|
||
- parameter_brace_expand_word: handle case where unquoted $@ is
|
||
expanded in a context where word splitting is not performed (PF_NOSPLIT2)
|
||
and IFS is not equal to the standard value
|
||
- param_expand: handle case where unquoted $@ is expanded in a context
|
||
where word splitting is not performed (PF_NOSPLIT2) and IFS is not
|
||
equal to the standard value. Fixes bug with IFS == $1 when expanding
|
||
unquoted $@ reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
4/7
|
||
---
|
||
subst.c
|
||
- pos_params_pat_subst: if MATCH_ASSIGNRHS is set, don't expand $*
|
||
as quoted unless expand_no_split_dollar_star is also set. Fixes
|
||
expansion bug reported on 4/4 by Grisha Levit <grishalevit@gmail.com>
|
||
- parameter_brace_transform: if we transform unquoted A[@] or A[*]
|
||
when IFS is null, don't quote the result of array_transform in the
|
||
same way we don't quote the result of parameter_list_transform,
|
||
since it will come back quoted. Fixes bug reported by
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
- list_transform: if we transform unquoted $* or ${a[*]} when IFS is
|
||
null and expand_no_split_dollar_star is non-zero, call
|
||
string_list_pos_params with Q_DOUBLE_QUOTES to inhibit splitting.
|
||
We do this in all cases except @Q, which is inconsistent but more
|
||
intuitive.
|
||
Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
4/8
|
||
---
|
||
builtins/read.def
|
||
- read_mbchar: if unbuffered == 2, we are running read -N and need to
|
||
use zreadn to read the rest of the multibyte char, since the
|
||
previous call to zreadn may have buffered characters. Fixes bug
|
||
reported by Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
pathexp.h
|
||
- QGLOB_CTLESC: new flag for quote_string_for_globbing: means to turn
|
||
CTLESC CTLESC (quoted CTLESC that's usually removed as part of
|
||
word splitting or quote removal) into CTLESC
|
||
|
||
pathexp.c
|
||
- quote_string_for_globbing: if QGLOB_CTLESC is present in flags,
|
||
turn CTLESC CTLESC into CTLESC, even if the first CTLESC is preceded
|
||
by a backslash. Callers can't do this because the remaining CTLESC
|
||
will be treated as a quoting character and turned into a backslash
|
||
|
||
execute_cmd.c
|
||
- execute_case_command: if the pattern is not quoted, make sure to tell
|
||
quote_string_for_globbing to turn CTLESC CTLESC into CTLESC by
|
||
passing QGLOB_CTLESC. Fixes bug reported 4/2 by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
4/9
|
||
---
|
||
subst.c
|
||
- string_transform: after calling ansiexpand for the `E' transformation,
|
||
need to call dequote_escapes because ansiexpand assumes it is being
|
||
called by the parser and arranges for ansicstr to quote CTLESC and
|
||
CTLNUL with CTLESC. Reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
variables.c
|
||
- mk_env_string: when exporting functions, run them through
|
||
dequote_escapes because any strings containing CTLESC or CTLNUL are
|
||
still quoted with CTLESC. Reported by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
subst.[ch]
|
||
- quote_escapes,dequote_escapes: now take const char * argument
|
||
|
||
execute_cmd.c
|
||
- execute_intern_function: if the function name contains CTLESC, run
|
||
it through dequote_escapes just in case it got CTLESC quoting
|
||
CTLESC or CTLNUL from the parser
|
||
|
||
4/11
|
||
----
|
||
eval.c
|
||
- reader_loop: make sure PS0 is expanded and displayed before
|
||
incrementing the command number
|
||
|
||
parse.y
|
||
- prompt_history_number: function to make history number as reported
|
||
by \!, or posix mode !!, be the same index that the (possibly multi-
|
||
line) command will be stored with. The history library increments
|
||
history_offset as soon as a new line is entered, and it's up to the
|
||
history code to store the second and subsequent lines of a command
|
||
in the same history entry. If we are expanding PS0 or PS4, or
|
||
a ${var@P} expansion, we're already past the history entry no
|
||
matter what. Inspired by patch from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
- decode_prompt_string: call prompt_history_number
|
||
- decode_prompt_string: if expanding PS4 or ${var@P}, make the
|
||
command number the same as reported by PS0/PS1/PS2
|
||
|
||
4/12
|
||
----
|
||
support/Makefile.in
|
||
- clean: remove man2html.o as part of this production instead of
|
||
waiting until `distclean'. Reported by chrlis <chrlis@sbrella.com>
|
||
|
||
subst.c
|
||
- string_list_pos_params: if we are expanding $* in a context where
|
||
IFS is null and expand_no_split_dollar_star is set (no word
|
||
splitting), use string_list_dollar_star to force the positional
|
||
parameters to be joined without first separating them into a list
|
||
and attempting to join them later. Fixes problem with constructs
|
||
like ${var=${*:1}}, pointed out by Grisha Levit
|
||
<grishalevit@gmail.com>. This undoes change to @Q from 4/7, so
|
||
list_transform change reverted
|
||
|
||
4/19
|
||
----
|
||
builtins.h
|
||
- added BUILTINS_H include guard
|
||
|
||
examples/loadables/Makefile.in
|
||
- install loadables.h as sample include file, along with Makefile.inc
|
||
|
||
4/23
|
||
----
|
||
bashline.c
|
||
- maybe_make_readline_line: don't try to do anything if the passed
|
||
NEW_LINE is NULL. Report from Jaren Stangret <sirjaren@gmail.com>,
|
||
fix from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
4/24
|
||
----
|
||
parse.y
|
||
- xparse_dolparen: if the current token (the last thing read_token
|
||
returned to yylex) is shell_eof_token, assume that it is the new
|
||
bison lookahead token and clear it. Fixes bug reported by
|
||
Werner Fink <werner@suse.de>
|
||
|
||
4/25
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- cmdhist: clarify that this option only has an effect if history is
|
||
enabled. Suggested by Matthew Braun <matthew@powerplug.com>
|
||
|
||
4/26
|
||
----
|
||
jobs.c
|
||
- wait_for: if a non-interactive shell with job control enabled (set -m)
|
||
detects that a foreground job died due to SIGINT, act as if the shell
|
||
also received the SIGINT. Prompted by an austin-group-l discussion
|
||
- waitchld: run SIGCHLD trap for each child exited even if job control
|
||
is not enabled when in Posix mode. Prompted by an austin-group-l
|
||
discussion
|
||
|
||
4/27
|
||
----
|
||
lib/readline/histfile.c
|
||
- read_history_range: if the history file is empty, free the history
|
||
filename before returning. Report and fix from Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
lib/readline/bind.c
|
||
- rl_parse_and_bind: make sure there is something, even if it's a
|
||
quoted empty string, before the `:' in a key binding. Report from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
- rl_parse_and_bind: if the right side of a key binding starts with a
|
||
quote, make sure there's a matching close quote before treating it
|
||
as a macro definition
|
||
- rl_translate_keyseq: if a key sequence ends with \C- or \M- (or
|
||
\C-\M-) make sure we break out of the loop if moving to the character
|
||
to be translated is a NUL. Old code did this only in the \C-\M-
|
||
case. Report from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
4/28
|
||
----
|
||
lib/glob/sm_loop.c
|
||
- GMATCH: implement a clever technique from glibc that avoids
|
||
backtracking past a `*' if we've already chosen to use it and need
|
||
matches beyond it. Look at https://research.swtch.com/glob for a
|
||
longer explanation. This results in a significant speedup for globs
|
||
with multiple instances of `*', especially with more than 4.
|
||
|
||
5/2
|
||
---
|
||
lib/readline/bind.c
|
||
- rl_translate_keyseq: make sure a trailing backslash in the key
|
||
sequence is preserved. Report from Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
5/3
|
||
---
|
||
builtins/builtin.def
|
||
- builtin_builtin: make sure to set this_shell_builtin to the builtin
|
||
command being executed, overwriting `builtin'. Leave
|
||
last_shell_builtin alone. Fixes bug reported by Luiz Angelo Daros
|
||
de Luca <luizluca@gmail.com>
|
||
|
||
jobs.c
|
||
- waitchld: modify change of 4/26 to run SIGCHLD traps even if job
|
||
control is not enabled
|
||
|
||
lib/readline/misc.c
|
||
- rl_get_previous_history: if we didn't find a previous history entry
|
||
to use, call rl_maybe_unsave_line before returning because we
|
||
aren't going to use the saved line, and it has the same undo list
|
||
as rl_undo_list. Fixes fuzzing bug reported by Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
- rl_get_{next,previous}_history: if there is no history list, don't
|
||
bother doing anything
|
||
|
||
5/4
|
||
---
|
||
expr.c
|
||
- popexp: if we error out due to stack underflow, make sure to zero out
|
||
expression and lasttp; they may contain undefined values we don't
|
||
want evalerror to print
|
||
- expr_unwind: handle expr_depth decrementing below zero
|
||
- evalexp: restore the old value of evalbuf even if we error and
|
||
longjmp; we may have called evalexp recursively
|
||
- evalerror: make sure expression is non-NULL before trying to print it.
|
||
These fix fuzzing bug reported by Eduardo Bustamante
|
||
<dualbus@gmail.com>, happens only in cases where we don't longjmp on
|
||
a fatal expansion error
|
||
|
||
5/5
|
||
---
|
||
parse.y
|
||
- read_token_word: when checking for a word that's a target of a
|
||
redirection, we can potentially call valid_array_reference, which
|
||
can end up calling the parser recursively. If it does that, we
|
||
need to make sure that yylval.word doesn't change, so we set it back
|
||
to the_word. Fixes another fuzzing bug
|
||
|
||
parse.y
|
||
- arith_for_command: make syntax errors in the arithmetic for command
|
||
(signaled by make_arith_for_command returning NULL) more like
|
||
language syntax errors by calling YYERROR. Avoids complicated
|
||
attempts at error recovery and dealing with NULL returns from
|
||
command productions. Pointed out by Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
lib/readline/kill.c
|
||
- _rl_copy_to_kill_ring: make sure the current slot in the kill ring
|
||
has something in it, even if the last command was a kill, before
|
||
trying to modify it. Another fuzzing bug
|
||
|
||
5/6
|
||
---
|
||
builtins/read.def
|
||
- read_builtin: if we see a backslash when not in raw mode (not -r),
|
||
only back up `i' when we read the next character if we know we added
|
||
a CTLESC the last time through the loop (skip_ctlesc == 0),
|
||
especially if i == 0. Another fuzzing bug from Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
5/8
|
||
---
|
||
builtins/read.def
|
||
- read_mbchar: handle zreadn/zreadc/zread returning EOF in the middle
|
||
of an incomplete multibyte sequence. Fixes another fuzzing bug
|
||
- read_builtin: use mb_cur_max instead of constant 4 when deciding
|
||
whether the next character can exceed the number of bytes available
|
||
in input_string
|
||
|
||
lib/readline/input.c
|
||
- MinGW: include <conio.h> before <io.h>. Fix from Eli Zaretskii
|
||
<eliz@gnu.org>
|
||
|
||
builtins/read.def
|
||
- read_builtin: if we get input from readline, we need to get the
|
||
remainder of a multibyte character from rlbuf instead of calling
|
||
read_mbchar. Bug reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
5/9
|
||
---
|
||
parse.y
|
||
- token_is_assignment: use the allocated buffer approach in all cases,
|
||
not just if we're not using bash malloc. This avoids the assignment
|
||
to t[i+1] writing beyond the end of the allocated token if
|
||
i == token_buffer_size - 1. Another fuzzing bug
|
||
- xparse_dolparen: if parse_string returns < 0, we clear out the
|
||
current shell_input_line before performing a longjmp, since we're
|
||
abandoning parsing of this command. This is consistent with how
|
||
the parser resynchronizes after other syntax errors
|
||
- GRAMMAR: add 'error yacc_EOF' production to handle a syntax error
|
||
that's immediately followed by an EOF after resynchronization.
|
||
Fixes another fuzzing bug
|
||
|
||
5/10
|
||
----
|
||
lib/readline/text.c
|
||
- _rl_set_mark_at_pos: don't let the mark be set to a position < 0.
|
||
Fixes a fuzzing bug
|
||
- rl_exchange_point_and_mark: don't do anything if the mark is already
|
||
less than 0
|
||
|
||
5/12
|
||
----
|
||
lib/readline/rlmbutil.h
|
||
- wchar_t: make sure this is defined as int if multibyte characters
|
||
aren't supported
|
||
|
||
lib/readline/text.c
|
||
- _rl_change_case: don't force use of ascii toupper and tolower if
|
||
isascii returns true; it's not defined to work on characters outside
|
||
the 0..255 (really 0..127) range. Bug reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
5/14
|
||
----
|
||
lib/readline/text.c
|
||
- rl_change_case: handle case where the old and new characters (after
|
||
the case change) are not the same number of bytes. Pointed out in
|
||
http://lists.gnu.org/archive/html/bug-bash/2015-01/msg00091.html
|
||
|
||
lib/readline/display.c
|
||
- expand_prompt: use `ret' as first parameter to _rl_find_prev_mbchar
|
||
since that needs the base of the array. Bug from fuzzing reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
5/15
|
||
----
|
||
execute_cmd.c
|
||
- execute_simple_command, execute_arith_command, execute_cond_command,
|
||
execute_arith_for_command: adjust the line number when executing a
|
||
function interactively so that the first command in the function is
|
||
line 1, not line 0, as Posix requires. Reported by Robert Elz
|
||
<kre@bmunnari.OZ.AU>
|
||
- execute_simple_command, execute_arith_command, execute_cond_command,
|
||
execute_arith_for_command: ony adjust the line number when executing
|
||
a function interactively if we are not sourcing a file
|
||
(sourcelevel == 0), so this is consistent everywhere we adjust the
|
||
line number
|
||
|
||
5/16
|
||
----
|
||
bashline.c
|
||
- bash_directory_completion_hook: when calling split_at_delims to see
|
||
whether a ${ or $( is closed, use the right value for `start' relative
|
||
to the substring beginning at `$'. Bug from fuzzing reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
expr.c
|
||
- expassign: if the call to expcond generates a syntax error in a
|
||
context when the shell won't longjmp (like when evaluating $PS1),
|
||
it will end up NULL and we need to catch it before calling strlen.
|
||
Bug from fuzzing reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
examples/bash-completion/
|
||
- new place to include a current or recent version of the
|
||
bash-completion package
|
||
|
||
5/19
|
||
----
|
||
lib/readline/display.c
|
||
- CHECK_INV_LBREAKS: new versions for multibyte and single-byte chars,
|
||
so the multibyte version can check and increase the size of
|
||
line_state_invisible->wbsize and line_state_invisible->wrapped_line,
|
||
callers who call CHECK_INV_LBREAKS must update
|
||
wrapped_line[newlines] when in HANDLE_MULTIBYTE mode. Fuzzing bug
|
||
reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
5/24
|
||
----
|
||
lib/readline/search.c
|
||
- _rl_nsearch_callback,noninc_search: handle _rl_search_getchar
|
||
returning -1 (EOF or read error) by aborting the search.
|
||
Fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
5/25
|
||
----
|
||
variables.c
|
||
- localvar_inherit: new variable, controlled by shopt localvar_inherit
|
||
option
|
||
- make_local_variable: if localvar_inherit is set, the new local
|
||
variable inherits a previous scope's variable's value, attributes
|
||
(except nameref), and dynamic variable information. If a local
|
||
variable inherits a value, the local is not invisible
|
||
|
||
builtins/shopt.def
|
||
- localvar_inherit: new option
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- localvar_inherit: document new shopt option
|
||
|
||
5/29
|
||
----
|
||
lib/readline/readline.c
|
||
- _rl_subseq_result: only return -1 and back up the chain if we are
|
||
dealing with a result (r) that's already < 0 and we are at the end
|
||
of a multi-key sequence. Otherwise, a failing readline command (e.g.,
|
||
delete-char at the end of a line) could cause this code to be
|
||
executed. Report from Nuzhna Pomoshch <nuzhna_pomoshch@yahoo.com>
|
||
|
||
lib/readline/histfile.c
|
||
- read_history_range: if the file isn't a regular file, return an
|
||
error. Bug report from Eduardo Bustamante <dualbus@gmail.com>,
|
||
relaying from IRC
|
||
|
||
5/30
|
||
----
|
||
variables.c
|
||
- set_pwd: if in Posix mode, and PWD appears in initial environment as
|
||
an absolute pathname to the current directory, set PWD to the result
|
||
of canonicalizing the environment value, or to the physical path if
|
||
canonicalization fails. From a suggestion by Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
5/31
|
||
----
|
||
builtins/read.def
|
||
- read_builtin: if -n or -N option is supplied with a 0 argument,
|
||
don't attempt to read any characters; bail out right away. Reported
|
||
by Eduardo Bustamante <dualbus@gmail.com>, relaying from IRC
|
||
|
||
6/3
|
||
---
|
||
config.h.in
|
||
- HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC: add define, used by stat-time.h
|
||
to construct a timespec from struct stat. Report and fix from
|
||
Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
variables.h
|
||
- att_regenerate: new internal variable attribute: if set, regenerate
|
||
dynamic variable's value when it's exported and we are creating the
|
||
export environment
|
||
|
||
variables.c
|
||
- init_dynamic_variables: LINENO, EPOCHSECONDS, EPOCHREALTIME: set
|
||
internal regenerate attribute for these dynamic variables
|
||
- make_env_array_from_var_list: if a dynamic variable has the
|
||
regenerate attribute set, call the dynamic value function to generate
|
||
an updated value before placing it in the environment. From a report
|
||
about exporting LINENO from Robert Elz <kre@bmunnari.OZ.AU>
|
||
|
||
6/4
|
||
---
|
||
lib/glob/sm_loop.c
|
||
- BRACKMATCH: at the matched: label, make sure we get the bracket
|
||
character we're looking for (char class, collating symbol. etc.)
|
||
before we decrement the count of braces we're looking for. Eventually
|
||
we could do something about badly-formed bracket expressions
|
||
|
||
6/7
|
||
---
|
||
lib/readline/histlib.h
|
||
- strchr: only declare if __STDC__ is not defined, since we already
|
||
include <string.h>. Report from Chi-Hsuan Yen <yan12125@gmail.com>
|
||
|
||
6/9
|
||
---
|
||
lib/readline/display.c
|
||
- update_line: when wrapping lines with multibyte chars at the end of
|
||
the new line being wrapped, make sure we copy the NULL byte in old
|
||
when moving the contents of old around. Fuzzing bug reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_get_char_len: use MB_CUR_MAX in the call to mbrlen; there's no
|
||
need to look at the rest of the string when we're just interested in
|
||
the length of a single character
|
||
|
||
6/12
|
||
----
|
||
jobs.c
|
||
- wait_for: when waiting for the next child to exit (ANY_PID), make
|
||
sure to restore the old SIGINT handler before returning. Fixes
|
||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864649
|
||
|
||
6/14
|
||
----
|
||
lib/readline/display.c
|
||
- expand_prompt: make sure `ret' is NULL-terminated before calling
|
||
_rl_prev_mbchar_internal, since that calls strlen, which requires
|
||
the passed string to be NULL-terminated. Another fuzzing bug.
|
||
|
||
6/15
|
||
----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_fini: use rl_replace_line instead of strcpy so rl_end
|
||
gets set right
|
||
- _rl_isearch_fini: after restoring rl_point, call _rl_fix_point so
|
||
we don't set rl_point > rl_end. Fixes a fuzzing bug
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_find_next_mbchar_internal: if _rl_adjust_point returns < 0,
|
||
just punt, treat the value as a byte, and advance point by 1
|
||
|
||
lib/readline/util.c
|
||
- rl_tilde_expand: rearrange code in the whitespace loop so that
|
||
`start' gets tested first and we don't try to dereference
|
||
rl_line_buffer[-1]. Another fuzzing bug from dualbus@gmail.com
|
||
|
||
bashline.c
|
||
- bash_dequote_filename: make sure that pointers that are used as
|
||
indices into sh_syntaxtab are cast to unsigned char first, to
|
||
avoid problems with signed chars > 128. Fixes a fuzzing bug.
|
||
|
||
lib/readline/kill.c
|
||
- _rl_copy_to_kill_ring: when reallocating the kill ring, make sure to
|
||
allocate one more than the max number of kills so the loop that
|
||
copies the kill ring entries down runs right (and to mirror the
|
||
initial allocation). Fixes a fuzzing bug.
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: make sure that cxt->sline_index never goes < 0
|
||
even when searching a line in reverse. Fixes a fuzzing bug
|
||
|
||
6/16
|
||
----
|
||
parse.y
|
||
- xparse_dolparen: short-circuit immediately if passed a empty string
|
||
|
||
lib/readline/display.c
|
||
- update_line: when wrapping multibyte characters, make sure we deal
|
||
with WCWIDTH returning -1. Fixes a fuzzing bug
|
||
|
||
6/17
|
||
----
|
||
execute_cmd.c
|
||
- execute_coproc: make sure `invert' is set before trying to use it
|
||
when returning failure on invalid coproc name. Report and fix from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
- execute_command_internal: make sure execute_coproc sets
|
||
last_command_exit_value if it returns failure, so an invalid name
|
||
can set $? = 1. Report and fix from Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
lib/readline/display.c
|
||
- update_line: make sure all references to `wrapped_line' are wrapped
|
||
with #ifdef HANDLE_MULTIBYTE. Report and fix from Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_change_char: don't use rl_point++ when you mean to move
|
||
forward a character; use _rl_vi_append_forward to account for
|
||
multibyte characters and take vi end of line handling into account
|
||
- _rl_vi_last_replacement: now an array of chars whether we are
|
||
using multibyte chars or not. If we're not, the character we read
|
||
to use as the replacement is saved as the first element of the array
|
||
- rl_vi_change_char,_rl_vi_callback_change_char: changes to deal with
|
||
_rl_vi_last_replacement being an array. Fixes bug reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_get_char_len: look at at most MB_CUR_MAX characters, but maybe
|
||
fewer if the length of the string is less
|
||
|
||
builtins/bind.def
|
||
- unbind_keyseq: new function for the -r option; checks whether the
|
||
key sequence is actually bound before trying to bind it to NULL.
|
||
Partial fix for https://savannah.gnu.org/support/?109329
|
||
|
||
parse.y
|
||
- augment `error yacc_EOF' production to call YYABORT in non-interactive
|
||
shells or calls to parse_and_execute (eval, command substitution,
|
||
etc.) Fixes bug reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
6/19
|
||
----
|
||
bashline.c
|
||
- edit_and_execute_command: don't add rl_line_buffer to the history
|
||
list if it's empty; consistent with how other code treats an empty
|
||
line
|
||
|
||
execute_cmd.c
|
||
- execute_builtin: make sure to preserve the temporary env across the
|
||
execution of the `read' builtin or `fc' builtin if HISTORY is
|
||
defined, in case `read -e' calls edit-and-execute-command. Should
|
||
have no side effects. Reported by Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
general.c
|
||
- line_isblank: new function: returns true if passed string is composed
|
||
entirely of blanks
|
||
|
||
general.h
|
||
- line_isblank: new extern declaration
|
||
|
||
parse.y
|
||
- history_delimiting_chars: return "" for a blank line, since there's
|
||
nothing to delimit with `;'
|
||
|
||
6/21
|
||
----
|
||
jobs.c
|
||
- wait_for: make sure to call restore_sigint_handler before returning
|
||
if we return out of the loop due to no children. Report from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
subst.c
|
||
- expand_word_internal: if split_on_spaces is set, and the word is
|
||
unquoted, and IFS is null, split the results of the previous steps
|
||
on $' \t\n' instead of just ' '. This relies on the previous steps
|
||
quoting the portions of the word that should not be split. Fixes
|
||
bug reported by Kevin Brodsky <corax26@gmail.com>
|
||
|
||
expr.c
|
||
- evalexp: after running expr_unwind, make sure we reset expr_depth
|
||
to 0 for the next call
|
||
- expr_streval: if after a call to get_array_value (which can call
|
||
the expression evaluator recursively) we discover that expr_depth
|
||
is less than it was before we called it, we assume there has been
|
||
some kind of error and an expr_unwind, so we treat it as an
|
||
error and either longjmp back to the expression top level or return
|
||
0 immediately. Fixes bug reported by Eduardo Bustamante
|
||
<dualbus@gmail.com>
|
||
|
||
6/23
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- add text noting that $* and ${array[*]} (unquoted) can also expand
|
||
to multiple words
|
||
|
||
6/29
|
||
----
|
||
general.[ch]
|
||
- default_columns: new function, returns the value of COLUMNS, or
|
||
refreshes it if check_window_size is set and COLUMNS is unset. By
|
||
default, it returns 80
|
||
|
||
execute_cmd.c
|
||
- select_query: use default_columns() instead of fetching value of
|
||
COLUMNS directly
|
||
|
||
builtins/help.def
|
||
- show_builtin_command_help: use default_columns() instead of fetching
|
||
value of COLUMNS directly
|
||
|
||
6/30
|
||
----
|
||
builtins/read.def
|
||
- read_builtin: call QUIT during the read loop, just in case we get a
|
||
signal we should act on that didn't cause read to be interrupted.
|
||
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1466737
|
||
- read_builtin: if -n or -N is supplied with a 0 argument, try a zero-
|
||
length read to detect errors and return failure if that read returns
|
||
a value < 0. Suggested by dualbus@gmail.com
|
||
|
||
7/4
|
||
---
|
||
bashhist.c
|
||
- maybe_add_history: keep track of whether the current line is a shell
|
||
comment, even if we're not adding it because it's in a multi-line
|
||
command, so we use appropriate delimiters between it and any
|
||
subsequent lines. Fixes bug reported by Grisha Levit
|
||
<grishalevit@gmail.com> back on 2/28/2017
|
||
|
||
bashline.c
|
||
- operate_and_get_next: if given an explicit argument, use that to
|
||
choose which line in the history to use.
|
||
|
||
lib/readline/doc/rluser.texi,doc/bash.1
|
||
- operate-and-get-next: document new effect of explicit numeric arg
|
||
|
||
lib/readline/complete.c
|
||
- fnprint: make sure print_len is initialized before using it on
|
||
systems without multibyte character support. Report and fix from
|
||
Juan Manuel Guerrero <juan.guerrero@gmx.de>
|
||
|
||
7/6
|
||
---
|
||
builtins/printf.def
|
||
- PRETURN,printf_builtin: check variable returned by bind_printf_variable,
|
||
return failure if that indicates we can't perform an assignment
|
||
because the variable is marked readonly or noassign. Fixes bug
|
||
reported by Arnaud Gaillard <arnaud.mgaillard@gmail.com>
|
||
|
||
7/7
|
||
---
|
||
lib/readline/text.c
|
||
- rl_quoted_insert: new feature: a negative argument means to insert
|
||
the next -COUNT characters using quoted-insert. Original feature
|
||
from Jason Hood <jadoxa@yahoo.com.au>. Still needs work on
|
||
redisplay
|
||
- _rl_insert_next_callback: implement support for negative arguments
|
||
similar to rl_quoted_insert: we just insert one at a time and keep
|
||
increasing the count until it hits 0
|
||
|
||
lib/readline/misc.c
|
||
- _rl_arg_callback: if the return value from _rl_arg_dispatch indicates
|
||
we should keep reading a numeric argument, update the message with
|
||
the new arg value
|
||
|
||
7/8
|
||
---
|
||
lib/readline/signals.c
|
||
- _rl_handle_signal: make sure all uses of any of the job control
|
||
signals are protected by a check for SIGTSTP being defined. Report
|
||
from Juan Manuel Guerrero <juan.guerrero@gmx.de>
|
||
|
||
7/11
|
||
----
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_replace: when making the new keymap for vi replacement mode,
|
||
make sure that ANYOTHERKEY is set correctly, otherwise some input
|
||
will cause _rl_dispatch to return -2 to the top level. Fixes fuzzing
|
||
bug reported by Ben Wong <benjamin.a.wong@gmail.com>
|
||
|
||
7/19
|
||
----
|
||
builtins/read.def
|
||
- struct ttsave: make the attrs member a struct, not a pointer, to force
|
||
a structure copy that will survive a longjmp to another context.
|
||
Leaving it as a pointer to a local struct is not portable
|
||
|
||
9/10
|
||
----
|
||
execute_cmd.c
|
||
- execute_builtin: make sure that we set up the unwind-protect for
|
||
pop_scope (temporary_env is non-zero) so that the temporary env
|
||
is propagated to the current environment only for special builtins
|
||
(source/eval/unset) not run by the command builtin
|
||
(flags & CMD_COMMAND_BUILTIN == 0). Fixes bug reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
9/17
|
||
----
|
||
builtins/printf.def
|
||
- asciicode: don't use mblen to check whether or not a character is a
|
||
valid multibyte character; use mbtowc right away and then inspect
|
||
the return value. Fixes bug reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
|
||
9/27
|
||
----
|
||
{jobs,subst}.h
|
||
- move declaration of last_command_subst_pid to subst.h, since it's
|
||
declared in subst.c and doesn't depend on job control. Reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
builtins/read.def,variables.c
|
||
- fixed a couple of problems (READLINE, ARRAY_VARS) that prevented
|
||
the minimal config from building
|
||
|
||
10/1
|
||
----
|
||
parse.y
|
||
- special_case_tokens: if we are returning DO in a case where the last
|
||
two tokens read are `FOR' and `WORD' make sure we decrement
|
||
expecting_in_token. Fixes bug reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
10/4
|
||
----
|
||
subst.c
|
||
- expand_string_for_rhs: now takes an additional PFLAGS argument from
|
||
its caller (one so far); passes that through to call_expand_word_internal
|
||
as W_ASSIGNRHS. Fixes bug reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
- expand_string_for_rhs: expanding b in ${a[:]=b} is now done as if
|
||
b were the rhs of an assignment statement. This means that splitting
|
||
isn't done, but tilde expansion is performed as if the statement
|
||
were `a=b'. Fixes splitting bug with $* reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
command.h
|
||
- W_NOASSNTILDE: new word flag, means to not perform tilde expansion
|
||
following a `:' even if the word has the W_ASSIGNRHS flag enabled
|
||
|
||
subst.c
|
||
- expand_word_internal: if we see a `:' with the W_NOASSNTILDE flag
|
||
set, just add the character and inhibit any subsequent tilde
|
||
expansion. Currently not set anywhere, but it could be set in
|
||
expand_string_for_rhs to satisfy its peculiar semantics
|
||
|
||
10/6
|
||
----
|
||
lib/sh/casemod.c
|
||
- sh_modcase: convert even single-byte wide characters to wide upper
|
||
or lowercase equivalents to accommodate locales where single-byte
|
||
characters have multibyte upper and lower case conversions. Bug
|
||
reported by Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
10/7
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- slight changes to the description of command_not_found_handle to
|
||
clarify that it's executed in a separate execution environment,
|
||
just like if the command was found. Reported by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
10/8
|
||
----
|
||
lib/readline/doc/{history.3,hstech.texi}
|
||
- history_get: clarify the range of valid values for the OFFSET
|
||
argument. From a report by Kevin Ryde <user42_kevin@yahoo.com.au>
|
||
|
||
10/21
|
||
-----
|
||
subst.c
|
||
- expand_string_for_rhs: set W_NOASSNTILDE if the operator is `='
|
||
for backwards compatibility with bash-4.4
|
||
|
||
shell.c
|
||
- main: set positional parameters before running the startup files,
|
||
so the startup files can inspect $@. Often-requested feature,
|
||
most recently from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
10/27
|
||
-----
|
||
doc/{bash.1,bashref.texi}
|
||
- Arrays: add some clarifying language to make it clear that array
|
||
references that don't use the ${a[s]} syntax are subject to
|
||
globbing when passed as arguments to commands such as unset, and
|
||
should be quoted for safety. Change prompted by a report from
|
||
Eli Barzilay <eli@barzilay.org>
|
||
|
||
parse.y
|
||
- parse_comsub: make sure we don't run off the end of the `ret'
|
||
buffer when checking for the here doc delimiter. Report from
|
||
Jakub Wilk <jwilk@jwilk.net>, the result of a fuzzing test. Pointer
|
||
to place for the fix from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
10/30
|
||
-----
|
||
builtins/pushd.def
|
||
- get_directory_stack: make sure the current directory (element 0 of
|
||
the stack) is passed to polite_directory_format under the same
|
||
conditions as the rest of the stack entries (flags & 1). Otherwise
|
||
something like `cd ${DIRSTACK[0]}' will fail. Fixes bug reported
|
||
by Steve Jones <sjml@slohj.org>
|
||
|
||
builtins/declare.def
|
||
- declare_internal: when checking for a `[' to see whether or not this
|
||
is an array variable declaration (declare -a foo[12]), make sure
|
||
we don't do the check if we're just dealing with shell functions.
|
||
Bug and pointer to fix from PJ Eby <pje@telecommunity.com>
|
||
|
||
11/1
|
||
----
|
||
parse.y
|
||
- parse_comsub: if we read a four-character word followed by a break
|
||
character, and that word is not one of the reserved words, set
|
||
lex_rwlen to 0 since we are no longer in a reserved word. It only
|
||
hurts if another break character immediately follows, so that test
|
||
succeeds again. Turn off the RESWDOK flag only if it's not a shell
|
||
metacharacter, too. Fixes bug reported by Kjetil Torgrim Homme
|
||
<kjetilho@scribus.ms.redpill-linpro.com>
|
||
|
||
11/3
|
||
----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: if we are searching in reverse order, let
|
||
sline_index go to -1 to avoid searching the same line twice. It
|
||
gets reset right after that, so there's no danger of indexing into
|
||
the history line with a negative index.
|
||
|
||
11/7
|
||
----
|
||
execute_cmd.c
|
||
- time_command: only restore command->flags if CODE indicates we didn't
|
||
perform a longjmp back to top_level. If we did, `command' has already
|
||
been freed. Fixes bug reported on savannah by
|
||
ukuvbu oibws <xyzdr4gon333@googlemail.com>
|
||
https://savannah.gnu.org/support/?109403
|
||
|
||
11/10
|
||
-----
|
||
lib/sh/unicode.c
|
||
- u32cconv: make sure to initialize localconv to -1 (error) in case
|
||
we switch from a utf-8 locale to something else and call
|
||
iconv_close. Report from Egmont Koblinger <egmont@gmail.com>; fix
|
||
from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
11/16
|
||
-----
|
||
subst.c
|
||
- parse_comsub: istring_index should be a size_t to avoid integer
|
||
overflow when allocating large pieces of memory. Report and fix
|
||
from Siteshwar Vashisht <svashisht@redhat.com>, originally based on
|
||
http://lists.gnu.org/archive/html/bug-bash/2017-11/msg00047.html
|
||
|
||
11/24
|
||
-----
|
||
lib/readline/bind.c
|
||
- rl_empty_keymap: new public function, returns non-zero if there are
|
||
no keys bound in the keymap passed as an argument
|
||
|
||
lib/readline/readline.h
|
||
- rl_empty_keymap: new public extern declaration
|
||
|
||
lib/readline/doc/rltech.texi
|
||
- rl_empty_keymap: document new function
|
||
|
||
lib/readline/bind.c
|
||
- rl_generic_bind: keep track of the previous keymap and previous
|
||
index in a multi-key key sequence so we can remove an empty terminal
|
||
keymap and remove a previous override to ANYOTHERKEY. Right now,
|
||
this only works for one previous keymap level. Inspired by a report
|
||
from Clark Wang <dearvoid@gmail.com>
|
||
|
||
11/25
|
||
-----
|
||
lib/readline/display.c
|
||
- _rl_update_final: make sure that computing the length of the visible
|
||
bottom line (botline_length) takes any invisible characters in the
|
||
prompt into account (woff). This value is used as part of the check
|
||
whether or not we want to remove the line-wrapping indicator on
|
||
terminals like xterm
|
||
- _rl_update_final: when removing the line-wrapping indicator on xterm,
|
||
make sure we take invisible characters in the prompt (woff) into
|
||
account when computing the character in the rightmost physical
|
||
screen position. Fixes cosmetic line-wrapping issue reported by
|
||
Egmont Koblinger <egmont@gmail.com>
|
||
|
||
11/27
|
||
-----
|
||
lib/sh/ufuncs.c
|
||
- fsleep: if using select to implement sleep, use restart after
|
||
a signal interrupts the select and handle pending signals. If
|
||
pselect is available, use that instead and block SIGCHLD while
|
||
pselect is executing.
|
||
Fixes report from Thiruvadi Rajaraman <trajaraman@mvista.com>
|
||
|
||
11/28
|
||
-----
|
||
lib/readline/signals.c
|
||
- rl_check_signals: new public function: a wrapper for RL_CHECK_SIGNALS
|
||
that can be used by applications that install a wrapper for
|
||
rl_getc (rl_getc_function) so they can respond to signals that
|
||
arrive while waiting for input in the same way as rl_getc. The app
|
||
can use rl_pending_signal() to get the most recently-received
|
||
signal. From a discussion about Gnuplot initiated by
|
||
Rin Okuyama <rokuyama@rk.phys.keio.ac.jp>
|
||
|
||
lib/readline/readline.h
|
||
- rl_check_signals: new extern declaration
|
||
|
||
lib/readline/doc/rltech.texi
|
||
- rl_check_signals: document new public function
|
||
|
||
variables.c
|
||
- set_pwd: test for and force an inherited OLDPWD to be a directory
|
||
if OLDPWD_CHECK_DIRECTORY is defined in config-top.h (it is by
|
||
default). Issue raised by Mikulas Patocka <mikulas@twibright.com>
|
||
|
||
config-top.h
|
||
- OLDPWD_CHECK_DIRECTORY: new define, defined to 1 by default
|
||
|
||
11/29
|
||
-----
|
||
Makefile.in
|
||
- pathexp.o: add dependencies on libintl.h. Reported by
|
||
Ross Burton <ross@burtonini.com>
|
||
|
||
12/1
|
||
----
|
||
lib/sh/ufuncs.c
|
||
- fsleep: add blocking and releasing SIGCHLD using sigprocmask
|
||
around call to select(2) even if pselect(2) is not available
|
||
|
||
12/3
|
||
----
|
||
execute_cmd.c
|
||
- coproc_setstatus: new utility function, take a pointer to a coproc
|
||
and a status and mark the coproc as dead and having been reaped
|
||
with that status. Used by child processes who want to invalidate
|
||
the coproc's pid
|
||
|
||
12/5
|
||
----
|
||
subst.c
|
||
- process_substitute: instead of just having a flag to denote that a
|
||
file descriptor is connected to a process substitution, store the
|
||
pid of the child process (still needs work)
|
||
- find_procsub_child,set_procsub_status,reap_procsubs: utility
|
||
functions to allow the job control code to detect that a process
|
||
substitution child has died and deallocate the file descriptors
|
||
or pathname
|
||
|
||
subst.h
|
||
- find_procsub_child,set_procsub_status,reap_procsubs: extern
|
||
declarations
|
||
|
||
nojobs.c
|
||
- set_pid_status: if we are reaping a process substitution, call
|
||
set_procsub_status to record the fact
|
||
|
||
jobs.c
|
||
- waitchld: if we are reaping a process substitution, call
|
||
set_procsub_status to record the fact. Doesn't really do anything
|
||
yet
|
||
|
||
12/6
|
||
----
|
||
execute_cmd.c
|
||
- execute_command: don't call unlink_fifo_list if we're in the
|
||
middle of executing a list of commands (executing_list != 0).
|
||
Partial fix for bug reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
- execute_simple_command: don't close process substitution file
|
||
descriptors in the parent after forking children in a pipeline;
|
||
defer until pipeline completes, since parent may have inherited
|
||
fds from a calling scope (e.g., via `.'). EXPERIMENTAL
|
||
- execute_disk_command: don't close process substitution file
|
||
descriptors in the parent after forking the child. EXPERIMENTAL
|
||
|
||
12/7
|
||
----
|
||
doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
|
||
- show-mode-in-prompt: clarify that this must be enabled before the
|
||
vi and emacs mode strings are prefixed to the prompt. Report from
|
||
Rob Foehl <rwf@loonybin.net>
|
||
|
||
12/8
|
||
----
|
||
execute_cmd.c
|
||
- execute_coproc: don't warn about an existing coproc if the write and
|
||
read file descriptors are unusable (-1), as they will be after a
|
||
call to coproc_closeall in a subshell. Fixes spurious warning
|
||
reported by Tobias Hoffmann <lfile-list@thax.hardliners.org>
|
||
|
||
jobs.c
|
||
- bgp_resize: avoid overflow when calculating the new size if the
|
||
child process limit is something ridiculously large. Report and
|
||
fix from Natanael Copa <ncopa@alpinelinux.org>
|
||
|
||
execute_cmd.c
|
||
- execute_builtin_or_function: if we return via the return builtin, we
|
||
don't get a chance to free the saved fifo list, so add an unwind-
|
||
protect to make sure it happens. Part of fix for leak reported by
|
||
Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
|
||
- execute_command_internal: if we unwind via the return builtin (e.g.,
|
||
we execute a function which then returns via the return builtin to
|
||
a previous function), we don't free the saved fifo list, so add an
|
||
unwind-protect to make sure the free happens. Rest of fix for leak
|
||
reported by Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
|
||
|
||
subst.c
|
||
- add_fifo_list: for the FIFO case (no /dev/fd), make sure we
|
||
initialize the new members of the fifo list after xrealloc
|
||
|
||
12/9
|
||
----
|
||
subst.c
|
||
- dev_fd_list: now a list of type `pid_t' so we can store process
|
||
associated with the pipe fd into the right element; change all
|
||
necessary functions (copy_fifo_list, add_fifo_list)
|
||
- process_substitute: store pid of child process into the right
|
||
index in dev_fd_list after opening the pipe. Process ID of -1 means
|
||
process has been reaped and fd needs to be closed (or FIFO needs to
|
||
be unlinked); value of 0 means slot is unused
|
||
|
||
jobs.c
|
||
- wait_for_background_pids: call reap_procsubs to make sure we clean
|
||
up all reaped process substitutions before trying to wait for
|
||
everything (still needs work)
|
||
|
||
tests/{run-procsub,procsub.{tests,right}}
|
||
- new file, tests of process substitution that have failed in the past
|
||
|
||
12/10
|
||
-----
|
||
jobs.c
|
||
- wait_for_background_pids: warn if one of the jobs is stopped
|
||
|
||
subst.c
|
||
- wait_procsubs: new function, call wait_for for every "live" process
|
||
substitution
|
||
|
||
jobs.c
|
||
- wait_for_background_pids: call wait_procsubs to reap any living
|
||
process subsitutions
|
||
|
||
12/13
|
||
-----
|
||
lib/readline/bind.c
|
||
- parser_if: add support for testing the readline version, using the
|
||
full set of arithmetic comparison operators (and supporting both
|
||
= and ==), using version numbers of the form major[.[minor]]
|
||
|
||
12/14
|
||
-----
|
||
subst.[ch]
|
||
- string_list_dollar_star: now takes QUOTED and PFLAGS arguments like
|
||
string_list_dollar_at, changed all callers. Not used yet.
|
||
|
||
12/16
|
||
-----
|
||
subst.c
|
||
- param_expand: broke out cases of expanding unquoted (quoted == 0)
|
||
$* on the rhs of an assignment statement (pflags & PF_ASSIGNRHS)
|
||
with various values of IFS (unset, null, set to non-null value) to
|
||
capture the expansion subtleties. From a report back on 11/24 by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
12/17
|
||
-----
|
||
array.h
|
||
- set_element_value: new define, sets array element AE to VALUE
|
||
|
||
variables.c
|
||
- set_pipestatus_array: use set_element_value where appropriate
|
||
|
||
12/18
|
||
-----
|
||
subst.c
|
||
- parameter_brace_find_indir: when expanding the indirect parameter
|
||
to find the eventual variable name, we don't perform word splitting.
|
||
Make sure this does the right thing for * and @. Fixes bug
|
||
reported by isabella parakiss <izaberina@gmail.com>
|
||
|
||
12/19
|
||
-----
|
||
doc/{bash.1,bashref.texi}
|
||
- indirect expansion: make sure to note that the value of the indirect
|
||
variable does not undergo word splitting as one of its expansions,
|
||
as in fix from 12/18
|
||
|
||
12/22
|
||
-----
|
||
subst.c
|
||
- parameter_brace_expand_rhs: make sure the value this function returns
|
||
when OP is `=' is quoted appropriately, as the callers expect. More
|
||
changes from Posix interp 221. Fixes report from Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
variables.c
|
||
- assign_hashcmd: if running in a restricted shell, make sure the
|
||
target of the hash assignment can be found via a $PATH search, to
|
||
prevent users assigning commands to the hash table they would not
|
||
ordinarily have access to. Fixes issue raised by Drew Parker
|
||
<andrew.s.parker2@gmail.com>
|
||
|
||
builtins/hash.def
|
||
- hash_builtin: if running in a restricted shell, make sure the
|
||
pathname target of `hash -p' can be found via a $PATH search, to
|
||
prevent users assigning commands to the hash table they would not
|
||
ordinarily have access to.
|
||
|
||
12/27
|
||
-----
|
||
array.c,arrayfunc.c,...
|
||
- many changes to clean up unused variables and functions. From a
|
||
report from Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
12/28
|
||
-----
|
||
lib/readline/terminal.c
|
||
- _rl_term_clrscroll: save the `E3' termcap capability, which clears
|
||
the scrollback buffer where supported. Unused right now
|
||
|
||
lib/readline/rlprivate.h
|
||
- _rl_term_clrscroll: extern declaration
|
||
|
||
lib/readline/bind.c
|
||
- parser_if: added simple variable comparison capability. Allowable
|
||
operators are `=', `==', and `!='; boolean variables must be
|
||
compared to either `on' or `off'; variable names must be separated
|
||
from the operator by whitespace
|
||
|
||
doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
|
||
- document new `if variable comparison value' construct
|
||
|
||
1/2/2018
|
||
--------
|
||
lib/glob/sm_loop.c
|
||
- EXTMATCH: when matching against !(patlist), if a filename beginning
|
||
with a `.' does not match any of the patterns in patlist, don't
|
||
return it as a match if leading dots need to be matched explicitly
|
||
(flags & FNM_PERIOD). Report from Eric Cook <llua@gmx.com>
|
||
|
||
1/3
|
||
---
|
||
variables.[ch]
|
||
- bind_function_def: takes an additional flags argument. If FLAGS&1,
|
||
overwrite any existing function_def hash table entry; if FLAGS==0,
|
||
leave any existing function_def alone.
|
||
|
||
make_cmd.c
|
||
- make_function_def: call bind_function_def with flags == 0
|
||
|
||
execute_cmd.c
|
||
- execute_intern_function: call bind_function_def with flags == 1 so
|
||
we have function_def information that's correct for where the
|
||
function is defined, not just where it's last parsed. Fixes report
|
||
from Bruno Vasselle <bruno.vasselle@laposte.net>; final piece of
|
||
fix from 12/15/2011
|
||
|
||
1/4
|
||
---
|
||
subst.c
|
||
- param_expand: deal with string_list_dollar_star returning NULL.
|
||
Fixes bug reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
builtins/history.def
|
||
- history_builtin: enabled code that performs range deletion
|
||
|
||
1/5
|
||
---
|
||
subst.c
|
||
- do_assignment_internal: if performing a compound assignment, make
|
||
sure to pass ASS_CHKLOCAL flag to do_compound_assignment if the
|
||
assignment word has the W_CHKLOCAL flag set
|
||
- do_compound_assignment: honor ASS_CHKLOCAL flag and check for an
|
||
existing local variable before creating or modifying a global
|
||
variable
|
||
|
||
builtins/declare.def
|
||
- declare_internal: new (undocumented so far) option: -G. Means to
|
||
act on global variables (create, modify) if no local variable is
|
||
found with the specified name
|
||
- declare_find_variable: new declare-specific wrapper functon for
|
||
declare builtin; obeys -g and -G options in one place
|
||
- declare_internal: if no variable is found after following any nameref
|
||
chain, look up the variable using declare_find_variable to honor the
|
||
-G option. XXX - so far, this is the only place that function is used
|
||
|
||
subst.c
|
||
- shell_expand_word_list: before calling make_internal_declare, add
|
||
'G' to the options list if W_CHKLOCAL is set in the word's flags.
|
||
This makes builtins like `readonly' that modify local variables in
|
||
a function behave the same for scalar and array variables
|
||
|
||
1/11
|
||
----
|
||
parse.y
|
||
- shell_getc: move code that decides whether to append a space to an
|
||
alias expansion here from mk_alexpansion, so we can inhibit adding
|
||
a space if we're currently parsing a single or double quoted string
|
||
|
||
1/12
|
||
----
|
||
|
||
parse.y
|
||
- clear_string_list_expander: take a pointer to an alias that's about
|
||
to be freed and make sure there aren't any pointers to it in the
|
||
list of pushed strings. If there are, zero it out in the pushed
|
||
string list to avoid referencing freed memory in pop_string()
|
||
|
||
alias.c
|
||
- free_alias_data: if an alias being freed is currently being expanded,
|
||
call clear_string_list_expander to remove references to it from the
|
||
list of pushed strings
|
||
|
||
1/14
|
||
----
|
||
pcomplib.c
|
||
- progcomp_search: add code to look up an alias for the CMD argument
|
||
and return the completions for the first word of that alias if one
|
||
is found. Just a start at completing aliases, a much-requested
|
||
feature
|
||
|
||
pcomplete.h
|
||
- COPT_LASTUSER: last flag value used by user-settable completion
|
||
options
|
||
- PCOMP_RETRYFAIL, PCOMP_NOTFOUND: new #defines, possible return values
|
||
from programmable_completions in FOUNDP argument. Moved RETRYFAIL
|
||
define here from pcomplete.c to avoid collisions with user-settable
|
||
option values (COPT_*)
|
||
|
||
1/15
|
||
----
|
||
pcomplete.c
|
||
- programmable_completions: if we don't find any completions for a
|
||
command, and RETRY is 0, see if the command is a defined alias,
|
||
expand it, and try to expand the first word of the value as a
|
||
command, and find any programmable completions for it. Here right
|
||
now, could be moved to attempt_shell_completion later if we need
|
||
to do more analysis of the expanded line. We'll see how it works
|
||
in practice. (Disabled for now.)
|
||
|
||
1/16
|
||
----
|
||
parse.y
|
||
- grammar: when timing the null command, make sure to turn off the
|
||
flags in parser_state (PST_REDIRLIST) that make_simple_command sets
|
||
when given a NULL second argument, since it assumes that it's going
|
||
to turn those off when it gets the next word of the simple command
|
||
(which it never gets in this case). Fixes bug reported by
|
||
Anti Räis <antirais@gmail.com>
|
||
|
||
1/19
|
||
----
|
||
lib/readline/rltty.c
|
||
- prepare_terminal_settings (termios/termio): if there is a function
|
||
bound to the VDISCARD character in the current keymap, set VDISCARD
|
||
to _POSIX_VDISABLE while readline is active. From a report from
|
||
Rhialto <rhialto@falu.nl>
|
||
|
||
1/22
|
||
----
|
||
builtins/history.def
|
||
- histtime: check whether or not localtime() returns NULL, and make
|
||
sure we only call strftime() with a valid struct tm. This can happen
|
||
when the timestamps in the history file overflow a time_t. Fixes bug
|
||
reported by Luke Dashjr <luke@dashjr.org>
|
||
|
||
bashline.c
|
||
- edit_and_execute_command: if we're in vi editing mode, make sure
|
||
we end up in insert mode after executing the commands from the
|
||
edited file. This seems to be what other shells do. Report from
|
||
Stan Marsh <gazelle@xmission.com>
|
||
|
||
1/26
|
||
----
|
||
bashline.c
|
||
- command_word_completion_function: match alias and shell function
|
||
names case-insensitively if the readline completion-ignore-case
|
||
variable is set. Inspired by report from <odnehel@gmail.com>
|
||
|
||
lib/readline/display.c
|
||
- update_line: when performing a dumb update after wrapping the line
|
||
(usually due to printing the prompt), make sure we adjust
|
||
_rl_last_c_pos if there are invisible characters in prompt lines
|
||
other than the first (we assume those invisible characters are in
|
||
the last line, which is nearly always the case). We adjust by the
|
||
total number of invisible chars less the number of invisible chars
|
||
in the first prompt line. From a report in
|
||
https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1745273
|
||
|
||
execute_cmd.c
|
||
- execute_command_internal: if redirections attached to a compound
|
||
command fail, make sure we discard the `internal_fifos' unwind-
|
||
protect frame after freeing the copied fifo_list and before returning
|
||
|
||
1/30
|
||
----
|
||
lib/readline/rlprivate.h
|
||
- BRACK_PASTE_FINI: add \r to the end of the string to avoid problems
|
||
with the tty driver thinking the cursor was in the wrong position.
|
||
Fixes issue reported by Egmont Koblinger <egmont@gmail.com>
|
||
|
||
1/31
|
||
----
|
||
lib/sh/zread.c
|
||
- zread,zreadintr: call check_signals() before calling read() to
|
||
minimize the race window between signal delivery, signal handling,
|
||
and a blocking read(2). Partial fix for FIFO read issue reported by
|
||
Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- shopt: document `assoc_expand_once' shell option
|
||
|
||
2/1
|
||
---
|
||
config-top.h
|
||
- DONT_REPORT_SIGTERM: define, so non-interactive shells will no
|
||
longer print termination messages for child processes killed by
|
||
SIGTERM
|
||
|
||
2/6
|
||
---
|
||
lib/readline/text.c
|
||
- rl_insert: don't attempt to optimize typeahead if we are only reading
|
||
a fixed number of characters (rl_num_chars_to_read > 0)
|
||
|
||
redir.c
|
||
- redir_special_open: if the shell is restricted, return a
|
||
RESTRICTED_REDIRECT error for attempts to open /dev/tcp and /dev/udp
|
||
sockets. Inspired by report from Blake Burkhart <bburky@bburky.com>
|
||
- do_redirection_internal: if redir_open returns RESTRICTED_REDIRECT,
|
||
return that right away (instead of errno) so we can print a better
|
||
error message
|
||
|
||
2/11
|
||
----
|
||
jobs.c
|
||
- bgp_resize: fix problems with (pid_t) overflow when calculating new
|
||
size for table when js.c_childmax is near the limit of a pid_t
|
||
(e.g., 2**31 - 1 on a 32-bit system, or 2**63-1 on a system with
|
||
32-bit pid_t). Fixes hang reported by Natanael Copa
|
||
<ncopa@alpinelinux.org> based on his patch from 12/8.
|
||
- bgp_resize: cap max table size for bgpids at MAX_CHILD_MAX (32768)
|
||
|
||
include/typemax.h
|
||
- TYPE_MINIMUM, TYPE_MAXIMUM: updated definitions from coreutils-8.29,
|
||
silences some compiler warnings
|
||
|
||
2/14
|
||
----
|
||
Makefile.in
|
||
- maybe-clean: use cd and pwd -P to test whether or not two directory
|
||
names identical, since topdir = '.' and BUILD_DIR = full pathname
|
||
when you use something like `bash ./configure'. Problem reported by
|
||
Michael Felt <aixtools@gmail.com>
|
||
|
||
subst.c
|
||
- split_at_delims: if SD_NOQUOTEDELIM is in the flags argument, don't
|
||
treat `'' and `"' as candidates for possible sequences of delimiters,
|
||
even if they're part of the delimiter set (the delims argument).
|
||
Fixes problem with completing lines like `foo --bar='quux baz' xx'
|
||
reported by Nick Patavalis <npat@efault.net>
|
||
|
||
2/15
|
||
----
|
||
copy_cmd.c
|
||
- copy_word_list: build the list in the right order, avoiding having
|
||
to reverse it at the end. Helps with long argument lists
|
||
|
||
shell.c
|
||
- bind_args: build the argument list in the right order, avoiding
|
||
having to reverse it at the end.
|
||
- bind_args: only call push_args to save argc and argv as BASH_ARGC
|
||
and BASH_ARGV if debugging mode is enabled (debugging_mode != 0).
|
||
Inspired by report from Ambrose Feinstein <ambrose@google.com>
|
||
- bind_args: note that we've saved BASH_ARGC and BASH_ARGV by setting
|
||
bash_argv_initialized
|
||
- shell_reinitialize: reset bash_argv_initialized back to 0 so
|
||
BASH_ARGV and BASH_ARGC will be recreated if we're in debugging mode
|
||
|
||
variables.c
|
||
- save_bash_argv: new function, initializes BASH_ARGV and BASH_ARGC
|
||
from the saved positional parameters
|
||
- init_bash_argv: initialize BASH_ARGV and BASH_ARGC if
|
||
bash_argv_initialized == 0
|
||
|
||
builtins/shopt.def
|
||
- shopt_set_debug_mode: if we're turning on debug mode, initialize
|
||
BASH_ARGC and BASH_ARGV if bash_argv_initialized == 0
|
||
|
||
2/16
|
||
----
|
||
execute_cmd.c
|
||
- execute_function: make sure BASH_ARGV and BASH_ARGC are initialized
|
||
before calling push_args (and before calling remember_args)
|
||
|
||
builtins/source.def
|
||
- source_builtin: make sure BASH_ARGV and BASH_ARGC are initialized
|
||
before calling push_args (and before calling remember_args)
|
||
|
||
builtins/evalfile.c
|
||
- _evalfile: if the shell compatibility level is 44 or lower, make
|
||
sure BASH_ARGV and BASH_ARGC are initialized before calling
|
||
array_push
|
||
|
||
builtins/shopt.def
|
||
- compat44: new shell option. This will be the last compatXX option
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- compat44: document new shell option
|
||
|
||
2/21
|
||
----
|
||
builtins/common.h
|
||
- ISOPTION: check s[1] before s[2] to avoid out of bound reads. Fixes
|
||
bug reported by jeremy@feusi.co
|
||
|
||
input.h
|
||
- B_SHAREDBUF: new flag for buffered input fds, indicates that this
|
||
fd shares its b_buffer with another fd
|
||
|
||
input.c
|
||
- duplicate_buffered_stream: when duplicating *from* the buffer
|
||
corresponding to bash input, make sure the new buffer has B_SHAREDBUF
|
||
in the flags, because copy_buffered_stream copies pointers
|
||
- duplicate_buffered_stream: if the buffer being copied to has the
|
||
B_SHAREDBUF flag set, make sure the b_buffer doesn't get freed.
|
||
Fixes use-after-free bug reported by jeremy@feusi.co
|
||
- save_bash_input,close_buffered_stream: make sure a buffer with
|
||
B_SHAREDBUF set has its b_buffer set to NULL before calling
|
||
free_buffered_stream
|
||
|
||
2/24
|
||
----
|
||
subst.c
|
||
- parameter_brace_expand_error: add parameter saying whether or not
|
||
we are checking whether value is null, so we can have different
|
||
error messages for ${x:?} and ${x?}. Report and fix from
|
||
don fong <dfong@dfong.com>
|
||
|
||
3/5
|
||
---
|
||
lib/readline/bind.c
|
||
- _rl_read_file: instead of calling stat/open on the passed filename,
|
||
use open/fstat to avoid one possible filename translation and close
|
||
a small (benign) race condition. Report and fix from Roy Ivy
|
||
<roy.ivy.iii@gmail.com>
|
||
|
||
3/11
|
||
----
|
||
variables.c
|
||
- makunbound: if new variable localvar_unset is non-zero, mark local
|
||
vars in previous scopes as invisible and unset so they will show
|
||
up as unset until that previous scope returns (similar to how local
|
||
variables in the current local scope are handled). localvar_unset
|
||
is currently set to 0 with no way for a script to change its value.
|
||
Eventually there will be an option to modify it. From a bug-bash
|
||
discussion started by Nikolai Kondrashov <spbnick@gmail.com> back
|
||
on 2/11/2018
|
||
|
||
3/13
|
||
----
|
||
subst.c
|
||
- expand_word_list_internal: short-circuit and exit right away if a
|
||
variable assignment preceding a special builtin fails in posix mode
|
||
- expand_word_list_internal: if a variable assignment precedes an
|
||
empty command name (after expansion), fix to exit right away when
|
||
the shell is in posix mode
|
||
|
||
3/15
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- Add text to Pathname Expansion clarifying that a slash must be
|
||
matched by a slash in the pattern when matching pathnames, but
|
||
not in other matching contexts. Suggested by <stormy1777@yahoo.com>
|
||
|
||
builtins/common.c
|
||
- read_octal: allow octal numbers greater than 777 to accommodate
|
||
modes and umasks that include sticky/setuid/setgid bits. Report
|
||
and fix from Martijn Dekker <martijn@inlv.org>
|
||
|
||
3/19
|
||
----
|
||
lib/readline/bind.c
|
||
- rl_generic_bind: make sure we only assign to prevkey in the loop
|
||
if the key sequence index is > 0, so ic is valid. Fixes bug
|
||
reported by Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
builtins/read.def
|
||
- read_builtin: be slightly less aggressive checking for timeouts and
|
||
SIGALRM: if we successfully read a character, don't check for a
|
||
timeout until we store or process it. Fixes timing problem
|
||
reported by Rob Foehl <rwf@loonybin.net>
|
||
|
||
3/22
|
||
----
|
||
sig.c
|
||
- termsig_handler: add a call to exit(1) after the kill, just in case
|
||
there are circumstances where the SIG_DFL signal handler is
|
||
ignored. Report from Andrei Vagin <avagin@gmail.com>
|
||
|
||
3/25
|
||
----
|
||
lib/readline/bind.c
|
||
- _rl_function_of_keyseq_internal: new internal function that takes a
|
||
length parameter to accommodate NUL in the key sequence. Patch from
|
||
Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_function_of_keyseq_len: new application-callable function that
|
||
takes a length parameter; otherwise equivalent to rl_function_of_keyseq.
|
||
|
||
lib/readline/readline.h
|
||
- rl_function_of_keyseq_len: add extern declaration for new function
|
||
|
||
lib/readline/doc/rltech.texi
|
||
- rl_function_of_keyseq_len: document new function interface
|
||
|
||
bashline.c
|
||
- bash_execute_unix_command: use rl_function_of_keyseq_len to handle
|
||
key sequences with embedded NULs (\C-@). Fix from Koichi Murase
|
||
<myoga.murase@gmail.com>
|
||
|
||
lib/readline/bind.c
|
||
- rl_bind_key_if_unbound,rl_bind_key_if_unbound_in_map: run the KEY
|
||
argument through rl_untranslate_keyseq to produce a symbolic sequence
|
||
that can encode \C-@.
|
||
- rl_bind_keyseq_if_unbound_in_map: translate the key sequence in order
|
||
to accommodate symbolic key sequences; should be a no-op for `raw'
|
||
key sequences such as the arrow key seqeunces from terminfo. Change
|
||
from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
4/2
|
||
---
|
||
jobs.c
|
||
- wait_for: when setting the SIGINT signal handler to wait_sigint_handler
|
||
make sure we're not setting old_sigint_handler recursively, as we
|
||
can when running an external command in a trap we took after a
|
||
command exited due to SIGINT. We don't want to overwrite
|
||
old_sigint_handler here. Fixes bug reported by Dr. Werner Fink
|
||
<werner@suse.de>
|
||
|
||
execute_cmd.c
|
||
- execute_disk_command: when there is a command_not_found_hook, make
|
||
sure the subshell turns off job control before running it, in case
|
||
it runs processes. We don't want it to manipulate process groups.
|
||
Fixes bug reported by <20>и<EFBFBD>иллов <20>има <dk.1997-fast@yandex.ru>
|
||
- execute_command_internal: make sure the command run by the `command'
|
||
builtin doesn't cause the ERR trap to be executed; wait for the
|
||
status to be returned by the command builtin. Fixes bug reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
4/4
|
||
---
|
||
subst.c
|
||
- process_substitute: handle longjmp back to top_level and function
|
||
returns (return_catch) in the child process, like command
|
||
substitution, so we don't longjmp back to some arbitrary spot from
|
||
the `exit' or `return' builtins, or on an expansion error, like
|
||
the command timing code. Fixes bug reported by Basin Ilya
|
||
<basinilya@gmail.com>
|
||
|
||
4/6
|
||
---
|
||
parse.y
|
||
- read_token_word: when reading a matched pair of backquotes as part
|
||
of a word, treat it as quoted so the characters are read as a single
|
||
word, but do not let the presence of the backquote mark the word as
|
||
quoted. Fixes here-document delimiter bug reported by Denys Vlasenko
|
||
<dvlasenk@redhat.com>
|
||
|
||
4/7
|
||
---
|
||
execute_cmd.c
|
||
- execute_case_command: call quote_string_for_globbing with the
|
||
QGLOB_CTLESC flag for both quoted and unquoted words, so it will
|
||
remove CTLESC/CTLESC in all cases while converting other quoted
|
||
characters to use a preceding backslash. Bug reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
4/9
|
||
---
|
||
smatch.c
|
||
- posix_cclass_only: helper function that checks whether a pattern has
|
||
only posix single-byte character classes ([:alpha:], etc.) or has
|
||
none at all
|
||
- xstrmatch: if running in a multibyte locale, make sure to short-
|
||
circuit to the single-byte matching code only if there are no
|
||
unrecognized character class names, since the wide character ctype
|
||
functions allow locales to define their own character class names
|
||
(e.g., "hyphen"). Fixes issue reported by yangyajing <yyj_cqu@163.com>
|
||
|
||
4/10
|
||
----
|
||
configure.ac,cross-build/qnx.cache
|
||
- qnx: add a configure cache file for cross-building, treat qnx 7 like
|
||
qnx 6 in terms of cpp options. Fix from Brian Carnes
|
||
<bcarnes@google.com>
|
||
|
||
aclocal.m4
|
||
- BASH_CHECK_DEV_STDIN: experimental change to test for /dev/stdin
|
||
independently of /dev/fd or /proc/self/fd. Suggested for QNX by
|
||
Brian Carnes <bcarnes@google.com>
|
||
|
||
|
||
4/11
|
||
----
|
||
lib/glob/glob.c
|
||
- glob_testdir: return -2 if DIR is a symlink, to differentiate it from
|
||
any other kind of non-directory file
|
||
- glob_vector: if we have GX_ALLDIRS (globstar), we want to skip over
|
||
symlinks to directories, since we will pick up the real directory
|
||
later. Fixes incompatibility reported by Murukesh Mohanan
|
||
<murukesh.mohanan@gmail.com>
|
||
|
||
bashline.c
|
||
- bash_execute_unix_command: changes to make READLINE_POINT apply to
|
||
characters instead of bytes when in a multibyte locale. Report and
|
||
fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
4/12
|
||
----
|
||
builtins/evalstring.c
|
||
- parse_and_execute_cleanup: now takes an argument which is the value
|
||
of running_trap at some point before parse_and_execute was called;
|
||
changed callers in sig.c, builtins/evalfile.c
|
||
|
||
builtins/common.h
|
||
- parse_and_execute_cleanup: changed prototype
|
||
|
||
4/13
|
||
----
|
||
builtins/evalstring.c
|
||
- parse_and_execute_cleanup: if the argument holding the previous state
|
||
of running_trap is the same value as the current running_trap state,
|
||
don't call run_trap_cleanup: assume that there is a caller who will
|
||
take care of the cleanup after this returns. Fixes recursive trap
|
||
call on "eval return" reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
parse.y
|
||
- read_a_line: if remove_quoted_newline is non-zero, indicating the
|
||
here-document delimiter is unquoted, we will be running the contents
|
||
of the here-document through word expansion and need to quote CTLESC
|
||
and CTLNUL in the input. Fixes bug with ^A in here document reported
|
||
by Jorge Alberto Baca Garcia <bacagarcia@me.com>
|
||
|
||
4/18
|
||
----
|
||
pathexp.c
|
||
- quote_string_for_globbing: make sure the QGLOB_CTLESC code handles
|
||
both CTLESC CTLESC and CTLESC CTLNUL in the same way. Fixes bug
|
||
reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
4/19
|
||
----
|
||
execute_cmd.c
|
||
- execute_command_internal: before executing any command in the current
|
||
shell, and before copying any existing FIFO list, call
|
||
reap_procsubs to unlink or close any process substitution pipes
|
||
associated with processes that have exited. Fixes hang in test suite
|
||
when trying to open a FIFO with no process having it open for
|
||
reading
|
||
|
||
4/26
|
||
----
|
||
parse.y
|
||
- read_token_word: if returning REDIR_WORD for a {id}>foo construct,
|
||
for example, make sure to assign the_word to yylval.word before
|
||
returning, in case a recursive call to the parser overwrites it
|
||
(e.g., when evaluating array indexes). From a message to
|
||
austin-group-l from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
lib/glob/sm_loop.c
|
||
- BRACKMATCH: if we have an invalid character class in an otherwise
|
||
well-formed bracket expression, don't try to match each character
|
||
of the (invalid) class individually; just skip over the class and
|
||
move on. From a message on the austin-group list from
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
4/27
|
||
----
|
||
variables.c
|
||
- push_exported_var,push_func_var,push_temp_var: make sure to set the
|
||
context correctly in the variable we bind in the previous (non-temp)
|
||
scope. Report from Martijn Dekker <martijn@inlv.org>
|
||
|
||
pathexp.c
|
||
- unquoted_glob_pattern_p: a pattern that contains a backslash can
|
||
have it removed by the matching engine (since backslash is special
|
||
in pattern matching), so if the pattern contains a backslash, and
|
||
does not end in a backslash, we need to return true. Fixes bug
|
||
reported by Robert Elz <kre@bmunnari.OZ.AU>
|
||
|
||
lib/glob/glob_loop.c
|
||
- INTERNAL_GLOB_PATTERN_P: same change to return TRUE for a backslash
|
||
that doesn't end the pattern
|
||
|
||
lib/sh/timeval.c
|
||
- print_timeval: use locale_decpoint() instead of fixed `.' to print
|
||
decimal point. Bug report in austin-group email from Joerg Schilling
|
||
<Joerg.Schilling@fokus.fraunhofer.de>
|
||
|
||
lib/sh/clock.c
|
||
- print_clock_t: use locale_depoint() in the same way as print_timeval
|
||
|
||
4/29
|
||
----
|
||
subst.c
|
||
- expand_cond_node: if special != 0, make sure to add QGLOB_CTLESC
|
||
to the flags passed to quote_string_for_globbing. Same issue as the
|
||
one with `case' fixed on 4/7, report from Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
4/30
|
||
----
|
||
redir.c
|
||
- do_redirection_internal: r_close_this: if the file descriptor is
|
||
already closed before the shell is asked to close it, make sure to
|
||
add an undo list redirect to make sure it stays closed. Report from
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
5/2
|
||
---
|
||
variables.c
|
||
- push_posix_temp_var: new function, takes the SHELL_VAR * passed as
|
||
an argument and uses the name and value to create a global variable
|
||
- merge_temporary_env: if posixly_correct is set, call
|
||
push_posix_temp_var to create global variables, otherwise call
|
||
push_temp_var to preserve the old behavior. Right now, it's only
|
||
called when in posix mode, but that might change. This undoes the
|
||
change from 4/27 when in posix mode
|
||
|
||
5/3
|
||
---
|
||
sig.c
|
||
- struct that holds the terminating signal information has a new
|
||
field: whether that signal is expected to cause a core dump
|
||
- termsig_handler: if the call to kill(2) doesn't kill the process,
|
||
we have a problem. If our pid is not 1, we just exit with status
|
||
128+sig (fake the sig exit status). If the pid is 1, we assume
|
||
we're in a Linux pid namespace and aren't allowed to send a signal
|
||
to ourselves. If we need to generate a core dump, we try to get
|
||
the kernel to SIGSEGV us by dereferencing location 0. If not, we
|
||
just exit with 128+sig. From a report and patch from Andrei Vagin
|
||
<avagin@virtuozzo.com>
|
||
|
||
5/4
|
||
---
|
||
bashline.c
|
||
- bash_execute_unix_command: make sure that parse_and_execute is called
|
||
with newly-allocated memory to avoid prematurely freeing the
|
||
command. Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
5/7
|
||
---
|
||
builtins/shopt.def
|
||
- syslog_history: a shell option to control whether history is logged
|
||
to syslog; can be modified at runtime. Original patch from
|
||
Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
config-top.h
|
||
- SYSLOG_SHOPT: new configurable option, determines whether there is a
|
||
shell option to control syslogging history lines at runtime and sets
|
||
the default value of the option
|
||
|
||
bashline.c
|
||
- syslog_history: new variable to control whether history lines are
|
||
sent to syslog; default value is the value of SYSLOG_SHOPT (or 1
|
||
if that's not defined)
|
||
- bash_add_history: send history lines to syslog if syslog_history is
|
||
non-zero
|
||
|
||
5/10
|
||
----
|
||
|
||
variables.c
|
||
- push_var_context: if we are in Posix mode and manipulating the
|
||
temporary environment (temporary_env), implement behavior specified
|
||
in Posix interp 1009 and make sure that temporary assignments
|
||
preceding function calls modify the current environment *before*
|
||
the function is executed.
|
||
|
||
[bash-5.0-alpha frozen]
|
||
|
||
5/12
|
||
----
|
||
execute_cmd.c
|
||
- execute_in_subshell: subshells should set loop_level == 0, since
|
||
they are no longer "enclosed" by the loop, according to posix.
|
||
Report from Aeron.E. Wang <aeron.e.wang@gmail.com>
|
||
|
||
5/24
|
||
----
|
||
Makefile.in
|
||
- pkgconfigdir: don't fail installing bash.pc if this directory doesn't
|
||
exist or isn't writable -- there's no error in failing to install
|
||
something nothing will use
|
||
- install-headers-dirs: creat $(pkgconfigdir) if it doesn't exist
|
||
|
||
lib/sh/shmbchar.c
|
||
- utf8_mblen: replace with version from gnulib
|
||
- utf8_mbstrlen: reimplement using utf8_mblen so it handles invalid
|
||
multibyte sequences in the same way as mbstrlen
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_utf8_mblen: utf-8 specific version of mblen from gnulib
|
||
|
||
include/shmbutil.h
|
||
- ADVANCE_CHAR,COPY_CHAR_P: do better job detecting end of string in
|
||
UTF-8 locales (should not be called with an empty string, but to
|
||
be safe)
|
||
|
||
5/25
|
||
----
|
||
lib/sh/utf8.c
|
||
- new file, utf-8-specific functions collected from other files
|
||
|
||
externs.h
|
||
- extern declarations moved around for utf8.c
|
||
|
||
include/shmbutil.h
|
||
- SADD_MBCHAR, SADD_MBQCHAR_BODY, ADVANCE_CHAR_P: if the locale is a
|
||
UTF-8 locale, don't bother with a call to mbrlen if the current
|
||
character cannot start a multibyte character
|
||
|
||
variables.c
|
||
- push_var_context: only merge the temporary environment in posix mode
|
||
if we are executing a shell function (flags & VC_FUNCENV). Report
|
||
from Martijn Dekker <martijn@inlv.org>
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_get_char_len: don't call mbrlen if we are in a UTF-8 locale and
|
||
the character cannot start a multibyte sequence
|
||
|
||
builtins/read.def
|
||
- read_builtin: if mb_cur_max > 1, call read_mbchar only if we're not
|
||
in a utf-8 locale or, if we are, the character we just read indicates
|
||
the start of a multibyte sequence
|
||
|
||
subst.c
|
||
- string_extract_verbatim: don't call MBRLEN if we're in a utf-8
|
||
locale and the current character can't start a multibyte sequence
|
||
- setifs: don't call MBRLEN if we're in a utf-8 locale and the first
|
||
character of $IFS can't start a multibyte sequence
|
||
|
||
lib/readline/kill.c
|
||
- rl_bracketed_paste_begin: make sure we return 0 here if rl_insert_text
|
||
returns the right number of characters inserted to be consistent
|
||
with other functions. Returns 1 otherwise. Report and fix from
|
||
Gabe Krabbe <gabe@rtfs.de> back in March, 2018
|
||
|
||
lib/readline/readline.c
|
||
- rl_subseq_result: make sure r is < 0 before checking map[ANYOTHERKEY]
|
||
to see if we shadowed a key that should now be tried
|
||
|
||
5/27
|
||
----
|
||
variables.c
|
||
- assign_aliasvar: perform same validity check on subscript assignment
|
||
as alias builtin performs on name argument. Bug report from
|
||
Mike Jonkmans <bashbug@jonkmans.nl>
|
||
|
||
5/29
|
||
----
|
||
builtins/setattr.def
|
||
- set_var_attribute: we should not propagate a variable assignment
|
||
preceding a builtin back to the calling environment unless the
|
||
shell is in posix mode. Since previous versions of the shell do
|
||
this, setting the shell compatibility level to 44 or less will
|
||
continue the propagation behavior
|
||
|
||
6/1
|
||
---
|
||
lib/readline/histexpand.c
|
||
- history_tokenize_word: as part of teaching history tokenization more
|
||
and more about shell syntax, allow command and process subsitution
|
||
and extended globbing patterns to appear within a word being
|
||
tokenized and not just at the beginning. Fixes bug reported back in
|
||
2/2017 by ecki@tofex.de
|
||
|
||
bashhist.c
|
||
- load_history: use HISTSIZE_DEFAULT (still defaults to "500") to set
|
||
the initial value of $HISTSIZE. HISTSIZE_DEFAULT can be overridden
|
||
in config-top.h
|
||
|
||
6/4
|
||
---
|
||
configure.ac
|
||
- make sure we link against an external readline library that's at
|
||
least version 8
|
||
|
||
6/8
|
||
---
|
||
pcomplete.h
|
||
- INITIALWORD: internal compspec name for programmable completion on
|
||
the initial (usually the command) word
|
||
|
||
bashline.c
|
||
- attempt_shell_completion: if we are in a command position and the
|
||
user has defined a compspec for INITIALWORD, use programmable
|
||
completion to complete command words. Original patch from
|
||
Luca Boccassi <bluca@debian.org>
|
||
|
||
lib/readline/doc/rluser.texi,builtins/complete.def,doc/bash.1
|
||
- make it clearer that -D takes precedence over -E when supplied as
|
||
options to `complete', not when they are applied during completion
|
||
|
||
builtins/complete.def
|
||
- complete_builtin,compgen_builtin: add support for -I option
|
||
- print_one_completion,print_compopts: display -I when appropriate
|
||
|
||
lib/readline/doc/rluser.texi,doc/bash.1
|
||
- complete,compgen: document new -I option and its effect
|
||
|
||
6/10
|
||
----
|
||
lib/readline/histfile.c
|
||
- read_history_range: don't apply the heuristic and try to append a
|
||
history line to an existing history entry if we don't have any
|
||
history entries. Bug and fix from Edward Huff <ejhuff@gmail.com>
|
||
|
||
6/12
|
||
----
|
||
bashline.c
|
||
- attempt_shell_completion: don't all the programmable completion for
|
||
INITIALWORD if programmable completion is disabled
|
||
- attempt_shell_completion: make sure in_command_position remains set
|
||
for an empty command word on an otherwise blank line, making the
|
||
presence of assignment statements optional. Report from
|
||
Luca Boccassi <bluca@debian.org>
|
||
|
||
6/20
|
||
----
|
||
lib/malloc/malloc.c
|
||
- morecore,internal_malloc,internal_free: requests for more than
|
||
128K bytes (defined as MMAP_THRESHOLD and saved in the new
|
||
malloc_mmap_threshold variable) are now satisfied via mmap and
|
||
freed via munmap. We only use mmap if we have mmap and MAP_ANON
|
||
(or MAP_ANONYMOUS). These blocks are not available for splitting
|
||
or coalescing, so every request for 128K bytes or smaller is
|
||
satisfied via sbrk(). We don't use mremap for realloc yet, but
|
||
we could in the future
|
||
|
||
lib/malloc/mstats.h
|
||
- malloc_stats: the malloc stats now include the number of calls to
|
||
mmap and the total number of bytes requested via mmap. The number
|
||
of calls to munmap is captured in each bucket's lesscore count
|
||
|
||
lib/malloc/stats.c
|
||
- print_malloc_stats: now prints an indication of where the change from
|
||
sbrk to mmap takes place, and prints number of mmap calls and total
|
||
number of bytes allocated using mmap
|
||
|
||
6/22
|
||
----
|
||
variables.c
|
||
- get_bashargcv: new dynamic "fetch" variable for BASH_ARGV and
|
||
BASH_ARGC, for backwards compatibility: if a script makes a
|
||
reference to either variable at the top level (not in a shell
|
||
function) without enabling debugging mode and not having initialized
|
||
the variable previously (using a simple semaphore), create the
|
||
variables
|
||
|
||
6/25
|
||
----
|
||
configure.ac
|
||
- opt_bash_malloc: bash malloc no longer disabled for systems that
|
||
require eight-bit alignment; the bash malloc has had this for a
|
||
long time
|
||
|
||
7/4
|
||
---
|
||
bashline.c
|
||
- pre_process_line: if command-oriented history is enabled, and the
|
||
line being expanded is the second or later in a multi-line command,
|
||
and we know the command is being saved as the current history entry,
|
||
decrease history_length before calling history_expand so references
|
||
like !! refer to the previous history entry as usual
|
||
|
||
lib/readline/histexpand.c
|
||
- history_quoting_state: new variable, can be set by calling
|
||
application before calling history_expand to note that the string
|
||
being expanded is part of a quoted string. Can be set to a single
|
||
quote, a double quote, or 0 (no quoting)
|
||
- history_expand: look at history_quoting_state and honor the
|
||
single-quote setting by not expanding any initial portion of the
|
||
line before the closing single quote. This allows history expansions
|
||
to be performed on a line containing a closing single quote if they
|
||
appear after the single quote
|
||
|
||
lib/readline/history.h
|
||
- history_quoting_state: extern declaration
|
||
|
||
bashhist.c
|
||
- bash_history_inhibit_expansion: if history_quoting_state indicates
|
||
that this string is single-quoted, skip over the single-quoted
|
||
portion and determine whether or not the portion after the
|
||
quoted string needs to be inhibited from history expansion
|
||
|
||
parse.y
|
||
- shell_getc: set history_quoting_state based on the contents of the
|
||
current delimiter before calling pre_process_line
|
||
|
||
7/6
|
||
---
|
||
lib/readline/doc/hsuser.texi
|
||
- describe the default behavior of backslash and single and double
|
||
quotes
|
||
|
||
lib/readline/doc/hstech.texi
|
||
- history_quoting_state: describe effect of setting this variable
|
||
- history_quotes_inihibit_expansion: expand the description to include
|
||
the default quoting behavior that setting this variable enables
|
||
|
||
7/9
|
||
---
|
||
support/man2html.c
|
||
- unescape: use memmove instead of strcpy to handle overlapping strings
|
||
Report and fix from Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||
|
||
lib/sh/getenv.c
|
||
- getenv: check that environ is non-NULL before looking through it.
|
||
Report and fix from Keeley Hoek <keeley@hoek.io>
|
||
|
||
7/12
|
||
----
|
||
braces.c
|
||
- mkseq: use better integer overflow handling for systems with 32-bit
|
||
ints and 64-bit intmax_ts. Bug reported by Simon Wörner
|
||
<mail@simon-woerner.de> as the result of fuzzing
|
||
|
||
builtins/declare.def
|
||
- declare_internal: make sure bind_variable returns non-NULL when
|
||
setting attributes for a variable named as an argument to declare
|
||
that also appears in the temporary environment (and is a nameref).
|
||
Bug reported by Simon Wörner <mail@simon-woerner.de as the
|
||
result of fuzzing
|
||
|
||
variables.c
|
||
- bind_variable_internal: if we're assigning through a nameref, don't
|
||
create a variable with an invalid name under any circumstances
|
||
|
||
builtins/common.c
|
||
- get_job_spec: make sure to return NO_JOB if atoi() returns < 0 due
|
||
to integer overflow.
|
||
Bug reported by Simon Wörner <mail@simon-woerner.de as the
|
||
result of fuzzing
|
||
|
||
7/13
|
||
----
|
||
execute_cmd.c
|
||
- execute_in_subshell: don't call set_sigint_handler if the subshell
|
||
is asynchronous, since it undoes the signal handler installed by
|
||
setup_async_signals. Fixes bug reported by Daniel Mills
|
||
<danielmills1@gmail.com>
|
||
|
||
parse.y,externs.h
|
||
- reset_readahead_token: new convenience function for the rest of
|
||
the shell, resets token_to_read if it's a newline (as it will be
|
||
after reset_parser is called)
|
||
|
||
eval.c
|
||
- reader_loop: if we're just going to execute one command, make sure
|
||
the read-ahead token isn't set to something that will result in a
|
||
NULL command (by calling reset_readahead_token), since the code
|
||
will take that as the one command and set EOF_Reached
|
||
|
||
7/15
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- indirect expansion: clarify that the expansion works on parameters,
|
||
not just variables (NAMEs). Suggested by konsolebox
|
||
<konsolebox@gmail.com>
|
||
|
||
7/16
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- INSIDE_EMACS: document its effect on line editing
|
||
|
||
7/17
|
||
----
|
||
lib/readline/{readline.c,rlprivate.h}
|
||
- _rl_eof_found: new variable, private to the readline library, that
|
||
indicates whether the current call to readline() will return NULL
|
||
because we read EOF
|
||
|
||
lib/readline/rltty.c
|
||
- rl_deprep_terminal: if bracketed paste mode is active, the last
|
||
character of the string to disable it is \r (to avoid confusing
|
||
the terminal driver about where the cursor is). In this case,
|
||
output a newline before returning so subsequent text (like the
|
||
`exit' bash prints) doesn't overwrite the prompt. Bug from
|
||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903936
|
||
|
||
variables.c
|
||
- make_local_assoc_variable: add second argument like corresponding
|
||
local array function, to allow this function to return an existing
|
||
local array variable to the caller for the caller to handle
|
||
|
||
variables.h
|
||
- make_local_assoc_variable: change function prototype to add second
|
||
arg
|
||
|
||
{subst.c,variables.c}
|
||
- make_local_assoc_variable: change callers
|
||
|
||
builtins/declare.def
|
||
- declare_internal: call make_local_assoc_variable with a non-zero
|
||
second arg to have it return an existing local array variable to be
|
||
flagged as an error. Fixes bug reported by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
- declare_internal: call make_local_array_variable with unconditional
|
||
second argument of 1 for the same reason as above
|
||
|
||
7/18
|
||
----
|
||
variables.c
|
||
- bind_invalid_envvar: new function, takes invalid names from the
|
||
initial environment (names that are not valid shell identifiers) and
|
||
stores them in a separate hash table (invalid_env)
|
||
- maybe_make_export_env: make sure to add names from invalid_env to
|
||
the export env
|
||
- assign_in_env: for now, prevent variable names that aren't shell
|
||
identifiers from being added to the temporary environment. Addresses
|
||
issue raised by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
test.c
|
||
- unary_test: rearrange code slightly to avoid a wasted variable lookup
|
||
if the argument to -v is a subscripted array reference
|
||
|
||
7/19
|
||
----
|
||
variables.c
|
||
- nameref_transform_name: if a name doesn't resolve to a shell variable,
|
||
this function will check whether it resolves to a nameref that
|
||
points to a variable that hasn't been created yet
|
||
|
||
variables.h
|
||
- nameref_transform_name: extern declaration
|
||
|
||
subst.c
|
||
- do_compound_assignment: make sure that we follow any nameref chain
|
||
if the name passed resolves to a nameref that points to a variable
|
||
that doesn't exist. Fixes issue raised by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
builtins/declare.def
|
||
- declare_internal: before calling any variant of make_local_variable,
|
||
make sure to perform any transformation of the name indicated by an
|
||
existing nameref. Fixes issue raised by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
7/20
|
||
----
|
||
builtins/declare.def
|
||
- declare_internal: if we are creating a global variable with -g, even
|
||
if we're not giving it a value, check for namerefs at the global
|
||
scope to avoid confusion with namerefs at the local (function) scope.
|
||
|
||
subst.c
|
||
- expand_word_internal: if a double-quoted string expands to nothing,
|
||
make sure we note that for later by setting had_quoted_null, just
|
||
as we do for single-quoted empty strings
|
||
|
||
subst.[ch]
|
||
- W_SAWQUOTEDNULL: new flag (replaces W_HASCTLESC, which is unused),
|
||
means that we saw a possibly-discarded quoted null while expanding
|
||
this word
|
||
|
||
subst.c
|
||
- expand_word_internal: if expansion results in a non-empty word but
|
||
we saw a quoted null during expansion (had_quoted_null == 1), set
|
||
W_SAWQUOTED_NULL in the returned word
|
||
- expand_word_internal: if a recursive call to param_expand comes back
|
||
with W_SAWQUOTEDNULL set in the resulting word, set had_quoted_null
|
||
to note it
|
||
- parameter_brace_expand_rhs: if a recursive call to expand_word_internal
|
||
returns a non-quoted-null string (after an optional call to
|
||
string_list) make sure we pass the W_SAWQUOTEDNULL flag back to the
|
||
caller
|
||
- word_list_split: if a word expands to nothing after expansion and
|
||
splitting, but we saw a quoted null during the expansion
|
||
(W_SAWQUOTEDNULL), return an empty word
|
||
|
||
7/25
|
||
----
|
||
|
||
subst.c
|
||
- do_compound_assignment: if creating a local variable, make sure to
|
||
set `newname' to the name of the variable returned from find_variable,
|
||
since that follows namerefs. Fixes issue raised by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
7/29
|
||
----
|
||
subst.c
|
||
- get_var_and_type: if VALUE is NULL, check before calling dequote_string.
|
||
Report and fix from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
7/30
|
||
----
|
||
variables.c
|
||
- make_local_{array,assoc}_variable: make sure we're not trying to
|
||
inherit a value from an incompatible array type. Fixes issue raised
|
||
by Grisha Levit <grishalevit@gmail.com>
|
||
- nameref_transform_name: if we're trying to resolve a nameref that
|
||
will be used to create a local variable, make sure the nameref is
|
||
at the same variable scope. Report from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
8/2
|
||
---
|
||
array.c
|
||
- array_subrange: change to use string_list_pos_params after creating a
|
||
WORD_LIST from the array slice, like assoc_subrange does
|
||
|
||
subst.c
|
||
- parameter_brace_substring: since assoc_subrange and array_subrange
|
||
both call string_list_pos_params now, treat the results the same as
|
||
the VT_POSPARAMS case (pos_params also calls string_list_pos_params).
|
||
Fixes behavior difference between ${a[@]:sub} and ${@:sub} reported
|
||
by Ilkka Virta <itvirta@iki.fi>
|
||
|
||
8/3
|
||
---
|
||
array.c
|
||
- array_patsub: rewrite to work in terms of a WORD_LIST * and call
|
||
string_list_pos_params on the result to be consistent with the
|
||
expansions of ${@/pat/rep} and ${*/pat/rep}
|
||
|
||
assoc.c
|
||
- assoc_patsub: rewrite to work in terms of a WORD_LIST * and call
|
||
string_list_pos_params on the result to be consistent with the
|
||
expansions of ${@/pat/rep} and ${*/pat/rep}
|
||
|
||
subst.c
|
||
- parameter_brace_patsub: change how return value of {array,assoc}_patsub
|
||
is treated to make it identical to pos_params_pat_subst, since they
|
||
all call string_list_pos_params now
|
||
- expand_string_for_pat: make sure we preserve the value of
|
||
expand_no_split_dollar_star instead of just unconditionally setting
|
||
it back to 0 in case it was 1 before this function was called
|
||
|
||
8/6
|
||
---
|
||
array.c
|
||
- array_modcase: rewrite to work in terms of a WORD_LIST * and call
|
||
string_list_pos_params on the result to be consistent with the
|
||
expansions of ${@,,} and ${*,,}
|
||
|
||
assoc.c
|
||
- assoc_modcase: rewrite to work in terms of a WORD_LIST * and call
|
||
string_list_pos_params on the result to be consistent with the
|
||
expansions of ${@,,} and ${*,,}
|
||
|
||
subst.c
|
||
- parameter_brace_casemod: change how return value of {array,assoc}_modcase
|
||
is treated to make it identical to pos_params_modcase, since they
|
||
all call string_list_pos_params now
|
||
|
||
8/8
|
||
---
|
||
builtins/declare.def
|
||
- declare_internal: if we are making local variables, and not dealing
|
||
with the nameref attribute, make sure that any nameref variable we
|
||
followed when resolving the name given was at the same variable
|
||
context. If not, we just want to make or use a local variable with
|
||
the name passed; if so, we want to use the nameref value as the
|
||
variable name. Report from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
8/9
|
||
---
|
||
configure.ac
|
||
- globasciiranges: RRI now on by default, must be turned off explicitly
|
||
at configure time or runtime with `shopt -u globasciiranges'
|
||
|
||
8/14
|
||
----
|
||
variables.c
|
||
- dispose_saved_dollar_vars: decrement stack pointer before looking
|
||
for saved positional parameters to dispose; stack pointer always
|
||
points to the first unused slot
|
||
|
||
8/15
|
||
----
|
||
variables.c
|
||
- dollar_arg_stack: now a stack of struct saved_dollar_vars, which has
|
||
an array for the first ten (dollar_vars) and a WORD_LIST * for the
|
||
remaining (rest_of_args). Fixes performance issue with function calls
|
||
and large numbers of positional parameters raised by
|
||
Bize Ma <binaryzebra@gmail.com>
|
||
- {save,restore,free,free_saved}_dollar_vars: new functions to manage
|
||
dollar_vars and dollar_arg_stack members. Need to keep these in sync
|
||
with whatever remember_args does
|
||
- push_dollar_vars: use save_dollar_vars, which just copies pointers,
|
||
and directly assign rest_of_args, without copying the words, to the
|
||
dollar_arg_stack entry. Have to clear dollar_vars and rest_of_args
|
||
with the assumption that callers will call remember_args(args, 1)
|
||
immediately following
|
||
- pop_dollar_vars: free current positional parameters and restore old
|
||
ones from pointers saved in dollar_arg_stack, making sure to
|
||
invalidate any cached value for "$@"
|
||
- dispose_saved_dollar_vars: free saved pointers from current index
|
||
into dollar_arg_stack
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- POSIXLY_CORRECT: make sure to note that bash makes sure this variable
|
||
is set when posix mode is enabled
|
||
|
||
8/17
|
||
----
|
||
{jobs,nojobs}.c
|
||
- set_jobs_list_frozen: set jobs_list_frozen to a particular value.
|
||
Intended to save and restore the value around code sections instead
|
||
of unconditionally unfreezing it.
|
||
|
||
jobs.h
|
||
- set_jobs_list_frozen: extern declaration
|
||
|
||
execute_cmd.c
|
||
- execute_pipeline: if lastpipe is enabled, save and restore the
|
||
value of jobs_list_frozen using freeze_jobs_list/set_jobs_list_frozen
|
||
to avoid problems with race conditions and nested pipelines
|
||
causing jobs to be removed from the jobs table. Fixes savannah issue
|
||
https://savannah.gnu.org/support/index.php?109541 reported by
|
||
Björn Kautler <vampire0>
|
||
|
||
8/24
|
||
----
|
||
execute_cmd.c
|
||
- lastpipe_cleanup: call set_jobs_list_frozen instead of
|
||
unfreeze_jobs_list
|
||
- execute_pipeline: set up lastpipe_cleanup with old value of
|
||
jobs_list_frozen
|
||
|
||
9/3
|
||
---
|
||
builtins/printf.def
|
||
- getuintmax,getfloatmax: on a conversion error, return as much of the
|
||
value as we were able to convert instead of 0. Fixes bug reported
|
||
by Robert Elz <kre@bmunnari.OZ.AU>
|
||
|
||
9/4
|
||
---
|
||
lib/readline/text.c,lib/readline/rlprivate.h
|
||
- _rl_backward_char_internal: new function, guts of rl_backward_char
|
||
and rl_backward_byte, not currently used there
|
||
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_advance_point: new function, move point forward by one
|
||
character, handling multibyte locales and characters and the end
|
||
of line semantics
|
||
- _rl_vi_backup_point: new function, move point backward by one
|
||
character, handling multibyte locales and characters
|
||
- rl_vi_eword,rl_vi_eWord: use rl_vi_advance_point instead of a simple
|
||
increment to handle multibyte characters. Fixes bug reported by
|
||
Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com>
|
||
|
||
9/5
|
||
---
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_fword,rl_vi_fWord: use rl_vi_advance_point instead of a simple
|
||
increment to handle multibyte characters
|
||
- rl_vi_bword,rl_vi_bWord: use rl_vi_backup_point instead of a simple
|
||
decrement (and _rl_vi_advance_point where necessary) to handle
|
||
multibyte characters
|
||
- rl_vi_complete,_rl_vi_change_mbchar_case,_rl_vi_domove_motion_cleanup:
|
||
use _rl_vi_advance_point instead of simple rl_point increment
|
||
- vi_delete_dispatch,vi_change_dispatch,vi_yank_dispatch: use
|
||
INCREMENT_POS instead of a simple increment to rl_mark to handle
|
||
multibyte characters
|
||
- rl_vi_column: use _rl_forward_char_internal, starting with
|
||
rl_point == 0, to handle multibyte characters (Posix says `character
|
||
position', not index)
|
||
|
||
9/7
|
||
---
|
||
configure.ac
|
||
- changed release status to `beta'
|
||
|
||
9/9
|
||
---
|
||
lib/readline/display.c
|
||
- _rl_update_final: if the bottom line has zero characters and we are
|
||
on that line at column 0, don't bother with an additional \r\n.
|
||
Fixes redisplay nit reported by Per Bothner <per@bothner.com>
|
||
|
||
|
||
configure.ac
|
||
- openbsd needs DEV_FD_STAT_BROKEN defined
|
||
|
||
[bash-5.0-beta frozen]
|
||
|
||
9/11
|
||
----
|
||
builtins/exec.def
|
||
- exec_builtin: make sure to sync the buffered stream where bash is
|
||
reading input (especially if it's fd 0) so a command exec'd by the
|
||
script can read the rest of stdin after the exec
|
||
|
||
9/15
|
||
----
|
||
lib/readline/histexpand.c
|
||
- history_tokenize_internal: if the event contains embedded newlines
|
||
(e.g., bash with command-oriented history and lithist), use them as
|
||
word delimiters, equivalent to space and tab, so they don't end up
|
||
as separate words. Fixes issue pointed out by Viktor Dukhovni
|
||
<ietf-dane@dukhovni.org>
|
||
- history_tokenize_word: don't break if we get a newline (though we
|
||
shouldn't get one due to the loop in history_tokenize_internal
|
||
- history_expand_internal: use newline as a whitespace character when
|
||
expanding by words, as we do with history_tokenize_internal
|
||
|
||
jobs.h
|
||
- J_PIPEFAIL: new flag for `flags' element of job struct
|
||
|
||
jobs.c
|
||
- stop_pipeline: if pipefail_opt set, newjob gets J_PIPEFAIL in its
|
||
flags word
|
||
- raw_job_exit_status: use J_PIPEFAIL (setting of pipefail when job
|
||
created) instead of current setting of pipefail status to determine
|
||
how to compute exit status of pipeline. Tentative implementation of
|
||
Posix proposal
|
||
|
||
expr.c
|
||
- exp0: don't call expr_bind_variable with a NULL string. Fixes
|
||
fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
- expr_bind_variable: don't try to do anything with a NULL or empty
|
||
LHS
|
||
|
||
9/16
|
||
----
|
||
lib/readline/undo.c
|
||
- rl_do_undo: before we release the undo list entry we've just
|
||
processed, make sure we avoid any pointer aliasing issues caused
|
||
by having the entry being removed as part of the undo list in
|
||
_rl_saved_line_for_history. Fixes fuzzing bug reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
9/17
|
||
----
|
||
[bash-5.0-beta released]
|
||
|
||
9/18
|
||
----
|
||
lib/readline/bind.c
|
||
- name_and_keymap: new struct for keymap names and maps
|
||
- builtin_keymap_names: static array of builtin keymap names and
|
||
maps; preparing for allowing applications to set the names of
|
||
keymaps they create; keymap_names is initially a pointer to
|
||
this array
|
||
- _rl_get_keymap_by_name,_rl_get_keymap_by_map: new functions for
|
||
searching the keymap_names array and returning an index
|
||
- rl_get_keymap_by_name, rl_get_keymap_name: rewritten in terms of
|
||
new functions above
|
||
- rl_set_keymap_name (char *name, Keymap map): new function, set
|
||
name of MAP to NAME. NAME must not be builtin; MAP must not be one
|
||
of the builtin keymaps. Request and initial implementation from
|
||
Tom Tromey <tom@tromey.com>
|
||
|
||
lib/readline/readline.h
|
||
- rl_set_keymap_name: new extern declaration for new public function
|
||
|
||
lib/readline/doc/rltech.texi
|
||
- rl_set_keymap_name: add documentation
|
||
|
||
lib/readline/doc/rluser.texi
|
||
- add text to `set keymap' description to note that applications
|
||
can add keymap names that can be used there
|
||
|
||
9/20
|
||
----
|
||
parse.y
|
||
- shell_getc: don't execute the alias hack (returning a space at the
|
||
end of the string) if we are parsing a command substitution that
|
||
starts with a double paren (subshell inside a comsub), in which
|
||
case the flags are PSH_DPAREN. Fixes fuzzing bug reported by
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: default case: make sure we check multibyte
|
||
char length when deciding whether to enlarge the search string
|
||
buffer, instead of using the old assumption. Fixes fuzzing bug
|
||
reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
builtins/fc.def,execute_cmd.c
|
||
- fixed some missing free()s uncovered by coverity. Report from
|
||
Siteshwar Vashisht <svashisht@redhat.com>
|
||
|
||
lib/glob/glob.c
|
||
- glob_vector: make sure name_vector is initialized to NULL
|
||
|
||
lib/sh/{pathcanon,pathphys}.c
|
||
- {pathcanon,pathphys}: use memmove instead of strcpy on a possibly-
|
||
overlapping region of memory
|
||
|
||
subst.c
|
||
- parameter_list_transform: make sure to dispose the word list in all
|
||
cases before returning
|
||
- parameter_brace_expand_rhs: make sure t1 is freed before returning
|
||
due to an invalid name resulting from an indirect expansion
|
||
|
||
support/man2html.c
|
||
- fixed a couple of memory leaks
|
||
|
||
9/21
|
||
----
|
||
subst.c
|
||
- process_substitute: if we are part of a job control process chain
|
||
(pipeline_pgrp != shell_pgrp), have the child shell forked to run
|
||
the process substitution set pipeline_pgrp to its own PID,
|
||
effectively becoming a process group leader without changing
|
||
its own process group. Fixes stray SIGHUP issue reported by
|
||
Jeremy Townshend <jeremy.townshend@gmail.com>
|
||
|
||
9/23
|
||
----
|
||
arrayfunc.c
|
||
- assign_array_element: if we are assigning to an existing associative
|
||
array, and assoc_expand_once is set, allow `*' and `@' as subscripts.
|
||
Partial fix for report from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
variables.c
|
||
- bind_int_variable: if valid_array_reference (lhs) is not true,
|
||
make sure that the lhs is a valid identifier before assigning the
|
||
value
|
||
|
||
arrayfunc.c
|
||
- valid_array_reference: allow blank subscripts. They are treated as
|
||
`normal' keys for associative arrays and evaluate to 0 for indexed
|
||
arrays. More of fix for report from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
9/24
|
||
----
|
||
bashline.c
|
||
- restore_tilde: if the expanded length (xl) is longer than vl
|
||
we end up requesting a negative amount of memory (an extremely
|
||
large unsigned number). Just punt and return val in this case.
|
||
Fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
- restore_tilde: make sure we return what the user typed if tilde
|
||
expansion fails
|
||
|
||
9/29
|
||
----
|
||
builtins/shopt.def
|
||
- uncomment `localvar_unset' option definition
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- document `localvar_unset' shell option
|
||
|
||
arrayfunc.c
|
||
- valid_array_reference: if we are parsing a subscript for an existing
|
||
associative array, the `assoc_expand_once' option is set, and the
|
||
VA_ONEWORD flag is set in FLAGS (meaning there should be nothing
|
||
following the closing `]'), don't call skipsubscript to find the
|
||
closing `]', use one that is at the end of the word. Part of fix for
|
||
issue reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
builtins/{printf,set}.def
|
||
- pass VA_ONEWORD as part of flags value everywhere valid_array_reference
|
||
is used
|
||
|
||
config-top.h
|
||
- CHECKWINSIZE_DEFAULT: now 1, so check_window_size is on by default
|
||
- HISTEXPAND_DEFAULT: new define, allows builder to enable or disable
|
||
history expansion by default at build time
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- checkwinsize: document new default value
|
||
|
||
bashhist.h
|
||
- HISTEXPAND_DEFAULT: don't define if it's already defined. Strict
|
||
POSIX mode continues to default to off
|
||
|
||
9/30
|
||
----
|
||
lib/readline/input.c
|
||
- win32_isatty: win32-specific changes from GDB. Patch submitted by
|
||
Tom Tromey <tom@tromey.com>, originally from Eli Zaretskii
|
||
<eliz@gnu.org>
|
||
|
||
10/1
|
||
----
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_start_inserting: start an undo group so we can grab the text
|
||
inserted here as a single unit, avoiding any insert coalescing
|
||
performed by rl_insert_text. Report and fix from Richard Todd
|
||
<richard.w.todd@outlook.com>
|
||
|
||
10/3
|
||
----
|
||
subst.c
|
||
- parameter_brace_transform: if we're asked to display the attributes
|
||
of an unset variable, check that the variable exists even if
|
||
get_var_and_type returns NULL (it checks invisible_p). Requested by
|
||
Michal Pesa <pesathem@gmail.com>
|
||
|
||
lib/readline/kill.c
|
||
- _rl_bracketed_text: new function, collects the text pasted in
|
||
bracketed paste mode and consumes the bracketed paste end marker;
|
||
returns the pasted text and its length
|
||
- rl_bracketed_paste_begin: call _rl_bracketed_text to collect the
|
||
text
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: set cxt->lastc to -7 if the input resolves to
|
||
rl_bracketed_paste_begin
|
||
- _rl_isearch_dispatch: if cxt->lastc == -7, call _rl_bracketed_text
|
||
to collect the pasted text and add it to the accumulating search
|
||
string. Only works if ESC is not one of the isearch terminators.
|
||
Fixes issue reported in Debian bug report 891780,
|
||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=891780
|
||
|
||
10/5
|
||
----
|
||
variables.c
|
||
- push_posix_tempvar_internal: new function, body of push_func_var
|
||
with additional argument saying whether it's being called from a
|
||
function or (special) builtin code path
|
||
- push_builtin_var: new function, calls push_posix_tempvar_internal
|
||
with second argument indicating builtin code path
|
||
- push_func_var: now a stub that calls push_posix_tempvar_internal
|
||
with second argument indicating function code path
|
||
- pop_scope: if called from a special builtin, call push_builtin_var
|
||
instead of push_func_var to do the right variable propagation
|
||
|
||
builtins/shopt.def
|
||
- progcomp_alias: uncomment, make available to users
|
||
|
||
doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi
|
||
- progcomp_alias: document shopt option, describe its use in
|
||
the section on programmable completion
|
||
|
||
trap.c
|
||
- decode_signal: handle SIGRTMIN+n at runtime, with the `SIG' prefix
|
||
or without, case-insensitively if requested, and return SIGRTMIN+n.
|
||
These values could be different than what was available at compile
|
||
time. Report and patch from Rasmus Villemoes <rv@rasumsvillemoes.dk>
|
||
|
||
10/8
|
||
----
|
||
execute_cmd.c
|
||
- execute_command_internal: only set line_number from command->value.Subshell
|
||
if the type == cm_subshell; otherwise defer and set later
|
||
|
||
10/10
|
||
-----
|
||
examples/loadables/seq.c
|
||
- seq: new loadable builtin, derived originally from coreutils:seq.c
|
||
but with very little of that code remaining
|
||
|
||
10/12
|
||
-----
|
||
trap.c
|
||
- run_pending_traps,_run_trap_internal: honor evalnest_max and
|
||
increment/decrement evalnest accordingly, since trap actions
|
||
are processed as if run by `eval'. Feature suggsted by Mike
|
||
Gerwitz <mtg@gnu.org>
|
||
|
||
10/16
|
||
-----
|
||
expr.c
|
||
- expr_skipsubscript: new function, calls skipsubscript with flags
|
||
similar to arrayfunc.c:valid_array_subscript if assoc_expand_once
|
||
is set and it looks like we've already expanded the subscript of
|
||
an associative array. Reported back on 8/27 by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
- readtok: call expr_skipsubscript instead of skipsubscript
|
||
|
||
arrayfunc.c
|
||
- valid_array_reference: call skipsubscript with a third arg computed
|
||
from the VA_NOEXPAND flag only if we're expanding an associative
|
||
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
|
||
|
||
10/22
|
||
-----
|
||
doc/{bash.1,bashref.texi}
|
||
- tweak description of bash conditional expressions to note that the
|
||
test and [ commands determine their behavior based on the number of
|
||
arguments. Suggested by Ilkka Virta <itvirta@iki.fi>
|
||
|
||
10/24
|
||
-----
|
||
execute_cmd.c
|
||
- execute_simple_command: don't set $_ to NULL when executing a
|
||
command that forks; just leave it unchanged. Tweaked the documentation
|
||
slightly as a result. Inspired by report from Ricky Tigg
|
||
<ricky.tigg@gmail.com>
|
||
|
||
10/28
|
||
-----
|
||
redir.c
|
||
- here_document_to_fd: make sure the temp files used to store here
|
||
documents are readable (and writable, where necessary) by the user.
|
||
This can happen in the unlikely case that someone decides to shoot
|
||
himself in the foot by setting the umask to 400. Issue originally
|
||
raised back in March by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>; fix inspired by Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
10/29
|
||
-----
|
||
lib/readline/terminal.c
|
||
- bind_termcap_arrow_keys: bind the "kI" capability (what the Insert
|
||
keypad key outputs) to overwrite mode. Patch from Xose Vazquez Perez
|
||
<xose.vazquez@gmail.com>
|
||
|
||
10/30
|
||
-----
|
||
braces.c
|
||
- mkseq: make sure to terminate result array before passing it to
|
||
strvec_dispose on an interrupt. Report and fix from Corbin Souffrant
|
||
<corbin.souffrant@gmail.com>
|
||
|
||
11/6
|
||
----
|
||
trap.c
|
||
- _run_trap_internal: if the signal shows up as SIG_CHANGED after
|
||
running the trap handler, check for terminating signals and run any
|
||
terminating signal handler indicates. Fixes issue reported by
|
||
Owen Stephens <owen@owenstephens.co.uk>
|
||
|
||
11/7
|
||
----
|
||
execute_cmd.c
|
||
- execute_builtin: don't merge the temporary environment when the
|
||
`return' builtin is being executed if it's being executed by the
|
||
`command' builtin, since that's supposed to inhibit the special
|
||
builtin properties. Part of POSIX conformance problems reported
|
||
by Martin Rehak <martin.rehak@oracle.com>
|
||
|
||
builtins/cd.def
|
||
- bindpwd: if canonicalization fails when -P is specified (e.g. if the
|
||
directory name length exceeds PATH_MAX), reset dirname ($PWD value) =
|
||
to the_current_working_directory (Posix cd description, step 10.)
|
||
Part of POSIX conformance problems reported by Martin Rehak
|
||
<martin.rehak@oracle.com>
|
||
|
||
builtins/kill.def
|
||
- kill_builtin: support -sSIG and -nSIG without requiring them to be
|
||
separate arguments. POSIX says a "conforming implementation" should
|
||
accept them.
|
||
Part of POSIX conformance problems reported by Martin Rehak
|
||
<martin.rehak@oracle.com>
|
||
|
||
11/8
|
||
----
|
||
arrayfunc.c
|
||
- array_value_internal: return NULL for invisible array variables.
|
||
Fixes issue with FUNCNAME sometimes returning invalid value reported
|
||
by Great Big Dot <greatbigdot@gmail.com>
|
||
|
||
builtins/cd.def
|
||
- change_to_directory: if we are in posix mode, and the chdir to the
|
||
absolute pathname ($PWD/dirname) fails, return an error without
|
||
trying to use just `dirname' (posix cd step 10).
|
||
Part of POSIX conformance problems reported by Martin Rehak
|
||
<martin.rehak@oracle.com>
|
||
|
||
execute_cmd.c
|
||
- execute_case_command: use expand_word_leave_quoted to expand the
|
||
word, then dequote the resulting string. This performs the
|
||
expansions in the order posix specifies.
|
||
Part of POSIX conformance problems reported by Martin Rehak
|
||
<martin.rehak@oracle.com>
|
||
|
||
subst.c
|
||
- expand_word_unsplit: rewrite in terms of expand_word_leave_quoted
|
||
- ifs_whitespace: new macro, Posix ifs whitespace (ISSPACE; member
|
||
of current locale's space char class)
|
||
- ifs_whitesep: new macro, whitespace that is a member of $IFS; used
|
||
by list_string and get_word_from_string
|
||
- list_string: use ifs_whitesep instead of spctabnl in case $IFS
|
||
contains whitespace characters that are not space, tab, or newline
|
||
- get_word_from_string: use ifs_whitesep instead of spctabnl in case
|
||
$IFS contains whitespace characters that are not space, tab, or
|
||
newline.
|
||
Part of POSIX conformance problems reported by Martin Rehak
|
||
<martin.rehak@oracle.com>
|
||
|
||
11/9
|
||
----
|
||
general.c
|
||
- posix_initialize: enable the shift_verbose option when turning on
|
||
posix mode, and disable it when posix mode is disabled. From a
|
||
report by Eric Blake <eblake@redhat.com>
|
||
|
||
doc/bashref.texi
|
||
- posix mode: note the effect of posix mode on shift_verbose
|
||
|
||
11/12
|
||
-----
|
||
subst.c
|
||
- parameter_brace_expand: if parameter_brace_expand_word returns an
|
||
error, make sure to set TEMP = 0 (to note that the variable is unset).
|
||
From a report by Grisha Levit <grishalevit@gmail.com>
|
||
- param_expand: if expanding $! when set -u is enabled, honor the
|
||
PF_IGNUNBOUND flag and just return NULL, relying on the caller to
|
||
take care of understanding that the variable is unset
|
||
From a report by Grisha Levit <grishalevit@gmail.com>
|
||
- parameter_brace_expand: if we are checking nullness, and we have a
|
||
valid array expansion, a quoted null string resulting from the array
|
||
expansion of a * or @ subscript satisfies the nullness check.
|
||
From a report by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
11/14
|
||
-----
|
||
aclocal.m4
|
||
- BASH_CHECK_LIB_TERMCAP: add last-ditch check for libncursesw, since
|
||
it's apparently the only curses library on some distributions.
|
||
Report from John Frankish <john.frankish@outlook.com>
|
||
|
||
11/16
|
||
-----
|
||
bashline.c
|
||
- attempt_shell_completion: allow an initial word completion to
|
||
complete a partial first word (point appears in the middle of
|
||
the word) before resorting to command completion. Report and fix
|
||
from Luca Boccassi <bluca@debian.org>
|
||
|
||
[bash-5.0-beta2 frozen]
|
||
|
||
11/27
|
||
-----
|
||
bashline.c
|
||
- attempt_shell_completion: better fix for problems with fix from
|
||
11/16. Report and fix from Tom Ryder <tom@sanctum.geek.nz>
|
||
|
||
expr.c
|
||
- expr_skipsubscript: fix return type. Report and fix from
|
||
Andreas Schwab <schwab@linux-m68k.org>
|
||
|
||
11/29
|
||
-----
|
||
subst.c
|
||
- quote_escapes_internal: refactored quote_escapes into a function
|
||
that takes an additional flag saying whether or not we are going
|
||
to split the result. If we are not, and CTLESC is in IFS, we quote
|
||
the CTLESC (ditto for CTLNUL) to prevent it being removed when the
|
||
string is dequoted.
|
||
- quote_escapes: call quote_escapes_internal with FLAGS == 0
|
||
- quote_rhs: new function, calls quote_escapes with FLAGS == PF_NOSPLIT2
|
||
so that a CTLESC will be quoted if CTLESC is in $IFS
|
||
- parameter_brace_expand_word: call quote_rhs on the value of a variable
|
||
if PFLAGS includes PF_ASSIGNRHS, indicating that we will not be
|
||
splitting the word, but we will be dequoting it. Fixes bug reported
|
||
by Martijn Dekker <martijn@inlv.org>
|
||
- param_expand: same change as for parameter_brace_expand_word
|
||
|
||
execute_cmd.c
|
||
- execute_in_subshell: if we are running a trap (running_trap > 0),
|
||
turn off the SIG_INPROGRESS and SIG_CHANGED flags for that signal
|
||
by calling run_trap_cleanup and reset running_trap to 0 (watch the
|
||
second part!). Tagged for bash-5.1.
|
||
|
||
11/30
|
||
-----
|
||
lib/readline/doc/rltech.texi
|
||
- rl_set_keymap_name: correct typo in the name; some updates to the
|
||
description that clarify usage. Report from <hirooih@gmail.com>
|
||
|
||
12/4
|
||
----
|
||
aclocal.m4
|
||
- BASH_FUNC_FNMATCH_EQUIV_FALLBACK: a test of whether fnmatch(3)
|
||
understands bracket equivalence classes ([=c=]) for characters
|
||
that collate with equal weights but are not identical
|
||
|
||
configure.ac,config.h.in
|
||
- call BASH_FUNC_FNMATCH_EQUIV_FALLBACK and define
|
||
FNMATCH_EQUIV_FALLBACK to 1 if it can be used for equivalence
|
||
classes
|
||
|
||
12/5
|
||
----
|
||
execute_cmd.c
|
||
- eval_arith_for_expr,execute_arith_command,execute_cond_command: make
|
||
sure running_trap == 0 before we reset the_printed_command_except_trap
|
||
Report from Peng Yu <pengyu.ut@gmail.com>
|
||
|
||
lib/glob/smatch.c
|
||
- _fnmatch_fallback_wc: new function, takes two wide characters c1 and
|
||
c2, converts them to a pattern ([[=c2=]]) and a string (c1) for
|
||
fnmatch to determine whether or not they are members of the same
|
||
equivalence class
|
||
- collequiv_wc: call _fnmatch_fallback_wc if rangecmp_wc returns
|
||
non-zero if FNMATCH_EQUIV_FALLBACK is defined, so we know that
|
||
fnmatch understands equivalence classes. Another Posix test suite
|
||
issue from Martin Rehak <martin.rehak@oracle.com>
|
||
|
||
12/6
|
||
----
|
||
redir.c
|
||
- add missing cases to switch statements to shut up gcc
|
||
|
||
12/7
|
||
----
|
||
builtins/set.def
|
||
- find_minus_o_option: new helper function, returns index into
|
||
o_options given option name
|
||
- minus_o_option_value,set_minus_o_option: use find_minus_o_option
|
||
|
||
general.c
|
||
- new table of variables (currently all shopt options) that are
|
||
modified by going into and out of posix mode; num_posix_options()
|
||
returns the number of variables
|
||
- get_posix_options: fill in a bitmap passed as an argument (or return
|
||
a new one) of values of posix-mode-modified variables in the table
|
||
- set_posix_options: set values of posix-mode-modified variables from
|
||
the table using the passed bitmap for values
|
||
|
||
builtins/set.def
|
||
- get_current_options: make the bitmap large enough to hold the options
|
||
in the set table and the table of posix-mode-modified variables; call
|
||
get_posix_options to fill in those values after the values from the
|
||
o_options table
|
||
- set_current_options: call set_posix_options to reset the values of
|
||
the posix-mode-modified variables at the end of the bitmap, after
|
||
the o_options values. Fixes issue reported by PJ Eby
|
||
<pje@telecommunity.com>
|
||
|
||
12/9
|
||
----
|
||
parse.y
|
||
- select_command: add two additional productions to support select
|
||
commands without a word_list following the `in'. Fixes omission
|
||
reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
12/11
|
||
-----
|
||
variables.c
|
||
- assign_in_env: don't allow namerefs in temporary environment
|
||
assignments to create variables with invalid names for export. Fixes
|
||
bug reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
12/14
|
||
-----
|
||
parse.y
|
||
- don't change last_command_exit_value in the 'error yacc_EOF' production
|
||
if the parser sets it to something non-zero; just make sure it
|
||
indicates an error. Fixes problem with unexpected EOF in eval
|
||
reported by Martijn Dekker <martijn@inlv.org>
|
||
|
||
12/17
|
||
-----
|
||
expr.c
|
||
- exp2 -> expmuldiv
|
||
|
||
lib/sh/smatch.c
|
||
- fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being
|
||
used
|
||
|
||
hashlib.c
|
||
- hash_string: add FNV offset as initial value for hash instead of
|
||
starting at 0, changes hash for associative arrays and requires a
|
||
bunch of changes to the "right" test suite files
|
||
|
||
variables.c
|
||
- rseed: make it explicitly 32 bits; that's all we're interested in
|
||
anyway
|
||
|
||
12/18
|
||
-----
|
||
|
||
variables.c
|
||
- brand: add some comments, make the constants explicitly 32 bits;
|
||
use signed 32-bit values for the intermediate calculations. The
|
||
algorithm is still minstd
|
||
|
||
[bash-5.0-rc1 frozen]
|
||
|
||
12/21
|
||
-----
|
||
doc/bash.1
|
||
- }1: remove macro definition; it's outlived its bugfix purpose.
|
||
Report from Derek Schrock <dereks@lifeofadishwasher.com>
|
||
|
||
12/22
|
||
-----
|
||
subst.c
|
||
- expand_arith_string: set W_NOTILDE in the flags so we don't perform
|
||
tilde expansion at all, even for the previously-special-case array
|
||
subscript expansion. Report from Bize Ma <binaryzebra@gmail.com>
|
||
- expand_word_internal: take out Q_ARRAYSUB check for tilde expansion
|
||
|
||
12/26
|
||
-----
|
||
builtins/evalstring.c
|
||
- parse_and_execute: if the eval builtin gets a parser error while
|
||
parsing a string in posix mode, don't exit the shell if the eval
|
||
was run by the command builtin. report from Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
examples/loadables/{basename,dirname}.c
|
||
- dirname_builtin: skip over any `--' ending the options. Report from
|
||
Peng Yu <pengyu.ut@gmail.com>
|
||
|
||
12/27
|
||
-----
|
||
examples/loadables/mkdir.c
|
||
- make_path: add argument noting whether or not the user specified -m;
|
||
only attempt the chmod on an existing directory if the user did so
|
||
- make_path: when creating intermediate directories, perform the
|
||
mkdir (path, 0) and chmod separately as the posix text recommends
|
||
|
||
12/28
|
||
-----
|
||
parser.h
|
||
- PST_COMMENT: new state, set when the shell is reading characters
|
||
until newline as part of comment processing
|
||
|
||
parse.y
|
||
- shell_getc: don't return a space at the end of a token if the parser
|
||
is consuming a comment. Fixes bug reported by Harald van Dijk
|
||
<harald@gigawatt.nl>
|
||
|
||
12/31
|
||
-----
|
||
lib/glob/glob_loop.c
|
||
- INTERNAL_GLOB_PATTERN_P: revert change from 4/27 that makes this
|
||
function return non-zero for a backslash in the string. Based on a
|
||
report from Tom Ryder <tom@sanctum.geek.nz>
|
||
|
||
[bash-5.0 frozen]
|
||
|
||
[bash-5.0 released]
|
||
|
||
1/6/2019
|
||
--------
|
||
|
||
examples/loadables/basename.c
|
||
- make sure to include bashgetopt.h. Reported by Angel
|
||
<angel@16bits.net>
|
||
|
||
lib/malloc/malloc.c
|
||
- stdlib.h: include if botch isn't defined to provide a declaration
|
||
for abort()
|
||
|
||
hashlib.c,Makefile.in
|
||
- fixes to make hash library testing work for others from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/unicode.c
|
||
- u32toutf16: correct the second argument to be wchar_t *, and treat
|
||
it as such, even though it doesn't make a difference in practice.
|
||
Report and fix from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
1/8
|
||
---
|
||
|
||
builtins/return.def
|
||
- return_builtin: return EX_USAGE if we're not executing a shell
|
||
function or sourcing a script, so a posix-mode shell exits. Fixes
|
||
bug reported by Robert Hailey <bash@osndok.com>
|
||
|
||
builtins/declare.def
|
||
- declare_internal: don't let `declare -f +f' turn off the function
|
||
attribute. Fix from Grisha Levit <grishalevit@gmail.com>
|
||
- declare_internal: reject attempts to add the -A or -a attributes
|
||
to functions. Report from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
1/9
|
||
---
|
||
bashline.c
|
||
- completion_glob_pattern: new function, returns true if the passed
|
||
string contains a glob pattern that should be process by the glob
|
||
completion code. Completion glob patterns don't pay attention to
|
||
backslashes unless they're the last character in the string. This
|
||
is a different, more self-contained, fix for the problem reported
|
||
by Tom Ryder <tom@sanctum.geek.nz>
|
||
|
||
lib/glob/glob_loop.c
|
||
- INTERNAL_GLOB_PATTERN_P: restore change from 4/27 and make this
|
||
function return non-zero if it encounters a backslash in the string.
|
||
It needs to match pathexp.c:unquoted_glob_pattern_p(). Adds fix
|
||
back for issue reported by axel@freakout.de
|
||
|
||
test.c
|
||
- arithcomp: when calling evalexp, make sure to call it with the
|
||
EXP_EXPANDED flag, since all arguments here have been evaluated
|
||
already
|
||
|
||
arrayfunc.c
|
||
- array_expand_index: call evalexp with EXP_EXPANDED flag, since we
|
||
have run the string through expand_arith_string already
|
||
|
||
1/11
|
||
----
|
||
parser.h
|
||
- PST_ENDALIAS: new state, means we just consumed the last character
|
||
of an alias expansion and returned the fake space
|
||
|
||
parse.y
|
||
- shell_getc: add PST_ENDALIAS to parser_state before returning the
|
||
fake space that marks the end of the alias, making sure to do it
|
||
only once. With that set, fall through to the pop_string(), making
|
||
sure to unset PST_ENDALIAS. Fixes alias bug reported by
|
||
Ante Peric <synthmeat@gmail.com>
|
||
|
||
1/12
|
||
----
|
||
lib/glob/glob.c
|
||
- {extglob,wextglob}_skipname: make sure we check the rest of the
|
||
pattern if the extglob pattern is null, and therefore won't match
|
||
anything. If that is followed by a `.', quoted or unquoted, we can
|
||
match a leading `.' in the pathname. This code is currently not
|
||
active.
|
||
|
||
builtins/hash.def
|
||
- hash_builtin: if -d is supplied without an argument, print an error
|
||
message and return failure, just like -t without an argument. Fixes
|
||
inconsistency reported by Dan Jacobson <jidanni@jidanni.org>
|
||
|
||
1/13
|
||
----
|
||
parse.y
|
||
- shell_getc: use shellblank when testing the last character of an
|
||
alias to determine whether or not to add a trailing space instead
|
||
of testing against a space only. These are the non-shell-metacharacters
|
||
that can delimit words. Used together with PST_ENDALIAS
|
||
|
||
1/17
|
||
----
|
||
parse.y
|
||
- shell_getc: keep track of whether the last character read from
|
||
shell_input_line is an unquoted backslash and don't add a space to
|
||
the end of an alias if the alias value ends in an unquoted backslash.
|
||
From an austin-group mailing list discussion message from
|
||
Harald van Dijk <ag@gigawatt.nl>
|
||
|
||
1/20
|
||
----
|
||
general.c
|
||
- check_identifier: make sure CHECK_WORD is non-zero before we check
|
||
whether or not the word consists of all digits. This allows function
|
||
names to consist solely of digits when not in posix mode. From a
|
||
report by Andrey Butirsky <butirsky@gmail.com>
|
||
|
||
1/22
|
||
----
|
||
bashline.c
|
||
- initialize_readline: only unbind ^E in vi_movement_keymap if it's
|
||
still bound to the default rl_emacs_editing_mode. Fixes bug
|
||
reported by Greg Bell <gbell_spamless@yahoo.com>
|
||
|
||
1/23
|
||
----
|
||
builtins/shopt.def
|
||
- we need the extern declaration for syslog_history if SYSLOG_HISTORY
|
||
is defined, since it's used even if SYSLOG_SHOPT is not defined.
|
||
From a Gentoo Linux bug report, eventually reported to bug-bash by
|
||
Tomas Mozes <hydrapolic@gmail.com>
|
||
|
||
1/25
|
||
----
|
||
command.h
|
||
- CMD_TRY_OPTIMIZING: new command flag, means this (simple) command is
|
||
a candidate for fork optimization (suppression)
|
||
|
||
builtins/evalstring.c
|
||
- can_optimize_connection: new function, takes an AND_OR list (&& or
|
||
||) from parse_and_execute, makes sure it's the last in a possibly
|
||
multi-command list, and returns non-zero if it's a simple command,
|
||
indicating that it's a candidate for fork optimization.
|
||
- parse_and_execute: if we have a cm_connection command, call
|
||
can_optimize_connection to determine if it's a suitable candidate
|
||
and set CMD_TRY_OPTIMIZING if that returns non-zero
|
||
- optimize_fork: don't bother unless the rhs of the && or || command
|
||
has the CMD_TRY_OPTIMIZING flag set. These fix the bug reported by
|
||
Brad Spencer <bspencer@blackberry.com>
|
||
|
||
execute_cmd.c
|
||
- execute_connection: case AND_AND and OR_OR: call optimize_fork on
|
||
the right side of the command before executing `second'. This will
|
||
safely restore the fork optimization we removed from
|
||
parse_and_execute()
|
||
|
||
builtins/complete.def
|
||
- build_actions: make sure the function name argument to -F is a
|
||
valid shell function name: it doesn't contain any invalid posix-
|
||
mode characters and doesn't contain any shell break characters that
|
||
would need to be quoted when defining a function. Fixes issue
|
||
reported by Great Big Dot <greatbigdot@gmail.com>
|
||
|
||
1/28
|
||
----
|
||
variables.c
|
||
- dispose_temporary_env: make sure to save temporary_env to a temp
|
||
pointer and set temporary_env to NULL before trying to dispose it,
|
||
so no flush function ever tries to add a temporary variable back
|
||
into the table (e.g., bind_variable())
|
||
|
||
1/29
|
||
----
|
||
builtins/evalstring.c
|
||
- can_optimize_connection,optimize_fork: add the last command in lists
|
||
separated by `;' to the list of candidates for fork optimization
|
||
|
||
1/30
|
||
----
|
||
examples/loadables/strftime.c
|
||
- strftime_builtin: try to extend the buffer longer than tbsize*3,
|
||
which is a minimum of 24 characters, in case some of the formats
|
||
(e.g., %c) expand to something longer than that. Fixes bug
|
||
reported by Stan Marsh <gazelle@xmission.com>
|
||
|
||
1/31
|
||
----
|
||
lib/readline/undo.c
|
||
- rl_do_undo: before inserting text while undoing UNDO_DELETE, or
|
||
performing a deletion while undoing UNDO_INSERT, make sure that
|
||
rl_point is valid by calling _rl_fix_point. Fuzzing bug and fix
|
||
from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/search.c
|
||
- _rl_nsearch_abort: validate new values for rl_point and rl_mark by
|
||
calling _rl_fix_point(). Fuzzing bug and fix from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
subst.c
|
||
- string_extract_double_quoted: if we parse a syntactically-incorrect
|
||
$( expression while extracting a double-quoted string, si will
|
||
appear to go `backward'. Just skip over the rest of the string and
|
||
continue. Fuzzing bug from Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/readline/text.c
|
||
- rl_change_case: if towupper or towlower returns a valid wide char
|
||
that can't be converted back to a valid multibyte character, use
|
||
the original character and go on. Fuzzing bug from
|
||
Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
lib/glob/glob.c
|
||
- wdequote_pathname: if there are no multibyte characters in pathname,
|
||
just call udequote_pathname and don't bother converting it to wide
|
||
characters
|
||
- glob_pattern_p: if there are no multibyte characters in the pattern,
|
||
just call internal_glob_pattern_p right away
|
||
|
||
lib/glob/glob_loop.c
|
||
- INTERNAL_GLOB_PATTERN_P: return 2 if we see only backslash-quoted
|
||
characters without any other unquoted glob pattern characters, so
|
||
interested callers can shortcut and just dequote the pathname
|
||
|
||
pathexp.c
|
||
- unquoted_glob_pattern_p: return 2 if we see only backslash-quoted
|
||
characters without any other unquoted glob pattern characters,
|
||
consistent with the glob library
|
||
- unquoted_glob_pattern_p: don't count a backslash quoting a slash as
|
||
a backslash that will trigger a call to shell_glob_filename, since
|
||
backslashes at the end of patterns (pathname components) will always
|
||
fail to match. XXX - this is provisional
|
||
|
||
lib/glob/glob.c
|
||
- glob_filename: if we have a directory name that has no unquoted
|
||
special glob chars, but has backslashes, just dequote it and return
|
||
it without going through the rest of the glob expansions. Partial
|
||
fix for issue with unreadable directories reported by
|
||
Andrew Church <achurch+bash@achurch.org>
|
||
|
||
2/2
|
||
---
|
||
lib/readline/readline.c
|
||
- readline_internal_teardown: if revert-all-at-newline is set, make
|
||
sure that the history position is at the end of the history before
|
||
calling _rl_revert_all_lines(). Fixes bug reported by
|
||
johnlinp@gmail.com and frederik@ofb.net
|
||
|
||
2/4
|
||
---
|
||
builtins/complete.def
|
||
- complete_builtin: fix check for argument to -F to use strpbrk
|
||
instead of incomplete use of strcspn. Fix from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
2/5
|
||
---
|
||
lib/readline/readline.c
|
||
- rl_parse_and_bind: change parsing of boolean variable values to
|
||
look for and consume an optional whitespace-delimited word. This
|
||
allows trailing spaces and everything that follows to work. Idea
|
||
from Bize Ma <binaryzebra@gmail.com>
|
||
- rl_parse_and_bind: print error message about unknown variable names
|
||
instead of calling rl_variable_bind to do it
|
||
- rl_variable_bind: report error if setting string variable returns
|
||
non-zero
|
||
|
||
2/6
|
||
---
|
||
lib/readline/histfile.c
|
||
- read_history_range: close FILE before returning if the history file
|
||
size is 0
|
||
|
||
2/11
|
||
----
|
||
bashline.c
|
||
- edit_and_execute_command: add the current line buffer to the history
|
||
list even if it's empty and rely on other code in bash_add_history
|
||
to take care to not add multiple semicolons with multiple blank
|
||
lines and command_oriented_history. Live with the blank lines as
|
||
history entries for now. Fixes problem reported by
|
||
Johannes Hielscher <jhielscher@posteo.de>
|
||
|
||
lib/readline/misc.c
|
||
- _rl_revert_all_lines: renamed to _rl_revert_previous_lines, since
|
||
that is basically what it does
|
||
- _rl_revert_all_lines: now just makes sure the history offset is at
|
||
the end of the history and calls _rl_revert_previous_lines. Inspired
|
||
by a suggestion from johnlinp@gmail.com
|
||
|
||
lib/readline/readline.c
|
||
- readline_internal_teardown: revert change of 2/2, moved that code
|
||
into the (new) _rl_revert_all_lines
|
||
|
||
lib/readline/rlprivate.h
|
||
- _rl_revert_previous_lines: new extern declaration
|
||
|
||
builtins/bind.def
|
||
- bind_builtin: make sure the unwind-protect gets run when the --help
|
||
option is used, so use `case GETOPT_HELP:' instead of `CASE_HELPOPT;'.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
2/12
|
||
----
|
||
lib/readline/util.c
|
||
- _rl_abort_internal: don't just turn off the MACRODEF state, call
|
||
_rl_kill_kbd_macro to delete any traces of an in-progress macro
|
||
definition before turning it off. Fixes fuzzing bug.
|
||
|
||
2/13
|
||
----
|
||
examples/loadables/Makefile.in
|
||
- CCFLAGS: add $(CPPFLAGS) to value, based on a report from
|
||
Christian Weisgerber <naddy@mips.inka.de>
|
||
|
||
2/15
|
||
----
|
||
bashline.c
|
||
- posix_readline_initialize: keep track of the vi insertion keymap
|
||
binding for TAB, since we change it in this function. Save the
|
||
old binding before we change it when turning posix mode on, and
|
||
restore that old binding when turning posix mode off, as long as
|
||
the current binding is still rl_insert. Suggested by a report from
|
||
Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
2/17
|
||
----
|
||
builtins/exec.def
|
||
- exec_builtin: save value of job_control; use it to restore the value
|
||
of job_control if an exec fails in an interactive shell instead of
|
||
enabling it by default in an interactive shell. Report from
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
|
||
lib/readline/bind.c
|
||
- _rl_function_of_keyseq_internal: make sure to use checks against LEN
|
||
instead of a NULL character in KEYSEQ to determine the length of the
|
||
key sequence.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_bind_key: make sure the KEY argument is not larger than the
|
||
largest unsigned character.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_translate_keyseq: make sure that M-x correctly adds "\ex" to the
|
||
key sequence array when convert-meta is set.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_translate_keyseq: now unconditionally converts meta characters to
|
||
ESC-prefixed key sequences when processing \0nnn \Xnnn and \[char]
|
||
escape sequences that resolve to meta characters and for `normal'
|
||
characters that have the meta bit set
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
jobs.c
|
||
- end_job_control: if the terminal pgrp (terminal_pgrp) is not the same
|
||
as the original pgrp (original_pgrp), set the terminal's pgrp to the
|
||
original pgrp so when we reset the shell's pgrp to original_pgrp,
|
||
we'll continue to be able to read from the terminal if the shell is
|
||
interactive. Fixes bug with turning off job control before starting
|
||
an interactive shell reported by Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
2/19
|
||
----
|
||
|
||
jobs.c
|
||
- end_job_control: if the setpgid(0, ...) succeeds, reset the value of
|
||
shell_pgrp. Fixes pgrp mismatch after failed exec in an interactive
|
||
login shell reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
2/20
|
||
----
|
||
bashhist.c
|
||
- pre_process_line: save history_length before calling history_expand,
|
||
and after possibly decrementing history_length, just restore the old
|
||
value instead of incrementing it. Fixes bug reported by
|
||
Michael Albinus <michael.albinus@gmx.de>
|
||
- bash_add_history: don't bother calling really_add_history if the
|
||
history is stifled and the max number of entries is 0
|
||
|
||
aclocal.m4,configure.ac,m4/*.m4
|
||
- replace the old set of gettext m4 macros with the latest m4 files
|
||
from the gnulib and gettext distributions
|
||
|
||
2/21
|
||
----
|
||
builtins/cd.def
|
||
- bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always
|
||
failing
|
||
|
||
command.h
|
||
- W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword}
|
||
|
||
subst.c
|
||
- expand_string_for_rhs: set W_EXPANDRHS in word to be expanded
|
||
|
||
subst.c
|
||
- expand_word_internal: when encountering a single or double quoted
|
||
string that expands to nothing, add a CTLNUL if the W_EXPANDRHS
|
||
flag is set and the word isn't quoted, indicating that the word
|
||
will eventually be split and we need to preserve the null to
|
||
produce an empty word. From a discussion on bug-bash started by
|
||
sunnycemetery@gmail.com
|
||
|
||
2/22
|
||
----
|
||
bashline.c
|
||
- completion_glob_pattern: make sure to skip over a character quoted
|
||
by a backslash. Fixes bug reported by John Van Sickle
|
||
<john.vansickle@gmail.com>
|
||
|
||
2/23
|
||
----
|
||
lib/readline/complete.c
|
||
- last_completion_failed: keep track of whether the last completion
|
||
attempt generated any matches
|
||
- rl_complete: if the last readline command was completion, but the
|
||
completion attempt didn't generate any matches, don't regenerate
|
||
and display the match list. Treat it as a new completion attempt.
|
||
Suggested by Richard Stallman <rms@gnu.org>
|
||
|
||
bashhist.c
|
||
- maybe_append_history: try to handle the case where the number of
|
||
history entries in the current shell session is greater than the
|
||
number of entries in the history list. Based on a report from
|
||
<airat_vi@mail.ru>
|
||
|
||
2/25
|
||
----
|
||
aclocal.m4
|
||
- BASH_FUNC_FNMATCH_EQUIV_FALLBACK: use en_US.UTF-8 instead of
|
||
de_DE.UTF-8; it's more likely to be installed
|
||
|
||
2/26
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- extdebug: make sure to note that setting this option in a startup
|
||
file causes an attempt to start the debugger. Noted by Linda
|
||
Walsh <bash@tlinx.org>
|
||
|
||
builtins/fc.def
|
||
- fc_builtin: if we are not listing, and delete the last history entry,
|
||
make sure that histbeg or histend, whichever is greater, is clamped
|
||
at the value of last_hist to avoid dereferencing the just-removed
|
||
history index. Fixes bug reported by Chris King-Parra
|
||
<chris@kingparra.work>
|
||
|
||
2/27
|
||
----
|
||
shell.c
|
||
- init_interactive: assignment to histexp_flag should be protected by
|
||
#ifdef BANG_HISTORY. https://savannah.gnu.org/patch/?9759
|
||
|
||
subst.c
|
||
- list_string: if we have a non-null string, but quoted null character
|
||
removal leaves an empty string, set W_SAWQUOTEDNULL in the returned
|
||
word flags so the caller can deal with it
|
||
- parameter_brace_expand_rhs: deal with word with null or empty word
|
||
and W_SAWQUOTEDNULL in the flags coming back from expand_string_for_rhs
|
||
by turning it into a quoted null word and modifying the flags. Part
|
||
of fix for bug report from Grisha Levit <grishalevit@gmail.com>
|
||
- expand_word_internal: if a double-quoted string comes back with a
|
||
quoted null as the expansion of "$@", note that we saw it, but still
|
||
add a quoted null into the result string instead of short-circuiting.
|
||
Part of fix for bug report from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/1
|
||
---
|
||
examples/loadables/fdflags.c
|
||
- O_CLOEXEC: instead of not using it, synthesize a definition for it
|
||
from unused bits in the file status word. It's only used as a
|
||
placeholder anyway. Fix from code by Robert Elz <kre@bmunnari.oz.au>
|
||
|
||
execute_cmd.c
|
||
- execute_connection: call optimize_fork on the rhs of a `;' connection
|
||
to attempt to optimize the last simple command in a list
|
||
|
||
3/4
|
||
---
|
||
subst.c
|
||
- parameter_brace_expand: add `@' to the list of operators that cause
|
||
unbound parameter errors. Fixes oversight bug reported by
|
||
Martin Schulte <gnu@schrader-schulte.de>
|
||
|
||
3/5
|
||
---
|
||
subst.c
|
||
- expand_word_internal: update to fix from 2/21 and 2/27 to accommodate
|
||
contexts when word splitting will not take place (W_ASSIGNRHS). Fix
|
||
from Grisha Levit <grishalevit@gmail.com>
|
||
- param_expand: if IFS is unset, and we are expanding $* in a context
|
||
where we're not going to be performing word splitting, just treat it
|
||
as if IFS=" " and don't set W_SPLITSPACE. Report and hint at fix
|
||
from Grisha Levit <grishalevit@gmail.com>
|
||
- param_expand: if IFS is not null, and we are expanding $* in a
|
||
context where we're not going to be performing word splitting, and
|
||
we quote a null string (resulting in a quoted null), make sure we
|
||
set W_SAWQUOTEDNULL to note this for the caller
|
||
- parameter_brace_expand_rhs: make sure to remove any W_SAWQUOTEDNULL
|
||
flag for a the word on the rhs of the `=' operator if the original
|
||
string is null or the original string is not null and the returned
|
||
string (after dequoting) is not null. For instance ${v= ''} should
|
||
not have the SAWQUOTEDNULL flag set because it is " " after
|
||
expansion and dequoting, even though we saw a quoted null there
|
||
|
||
3/6
|
||
---
|
||
lib/sh/eaccess.c
|
||
- sh_eaccess: AIX needs the same kind of additional checks as FreeBSD
|
||
and Solaris when running as root and checking whether or not a file
|
||
is executable. Report and fix from REIX, Tony <tony.reix@atos.net>
|
||
|
||
3/7
|
||
---
|
||
lib/glob/glob.h
|
||
- GX_RECURSE: new flag, indicates internal call to glob_filename
|
||
|
||
lib/glob/glob.c
|
||
- glob_filename: add GX_RECURSE to recursive call to glob_filename
|
||
- glob_filename: dequote a directory name (in the absence of a
|
||
filename) only if this is not a recursive call to glob_filename
|
||
((flags & GX_RECURSE) == 0). Fixes bug reported by Dr. Werner Fink
|
||
<werner@suse.de>
|
||
|
||
3/8
|
||
---
|
||
parse.y
|
||
- handle_eof_input_unit: before calling exit_builtin, set
|
||
last_shell_builtin and this_shell_builtin appropriately, since the
|
||
exit builtin uses them to determine whether or not to exit
|
||
immediately. Fixes bug reported by Tom Levy <tomlevy93@gmail.com>
|
||
|
||
lib/sh/shquote.c
|
||
- sh_double_quote,sh_mkdoublequoted,sh_backslash_quote_for_double_quotes:
|
||
make sure to handle multibyte characters that may contain characters
|
||
that need to be quoted in double quotes; adding a spurious double
|
||
quote may turn them into different characters or uncover characters
|
||
that are special in double quotes. Fixes bug reported by
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
- sh_backslash_quote: don't call COPY_CHAR_P if we're in a UTF-8
|
||
locale and the current character doesn't have its eighth bit set;
|
||
only check mb_cur_max and is_basic if we're not in a UTF-8 character
|
||
set
|
||
|
||
3/9
|
||
---
|
||
subst.c
|
||
- read_comsub: if it looks like we're starting a multibyte character,
|
||
read a whole multibyte character from buf and add it all at once,
|
||
so we don't quote each byte in a multibyte character sequence. Fixes
|
||
bug uncovered by shquote changes from 3/8
|
||
|
||
3/11
|
||
----
|
||
subst.c
|
||
- expand_word_internal: if we are in a context where word splitting
|
||
will not occur, but one where we need to make sure we eventually
|
||
expand "$@" to multiple words, add a space as quoted so we can still
|
||
split on the space separator in $@. Fixes bug reported by
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
|
||
3/13
|
||
----
|
||
subst.c
|
||
- parameter_brace_substring, parameter_brace_patsub: treat the case
|
||
where pflags includes PF_ASSIGNRHS the same as if IFS is null, since
|
||
word splitting will not take place
|
||
|
||
{subst,array,assoc}.c,subst.h
|
||
- string_list_pos_params: add a fourth argument: pflags; change all
|
||
callers to initially pass 0 as fourth arg
|
||
|
||
3/14
|
||
----
|
||
subst.c
|
||
- expand_word_internal: split words with W_ASSIGNRHS flag set specially.
|
||
These and subsequent changes fix expansion bugs reported by
|
||
Grisha Levit <grishalevit@gmail.com>
|
||
|
||
subst.c
|
||
- string_list_pos_params: if we are expanding `@', make sure we honor
|
||
PFLAGS including PF_ASSIGNRHS and use string_list_dollar_at to make
|
||
sure the positional parameters are separated by spaces
|
||
- string_list_pos_params: if we are expanding `*', make sure we honor
|
||
PFLAGS including PF_ASSIGNRHS and separate the positional parameters
|
||
with the first character of $IFS
|
||
- pos_params_pat_subst,pos_params_modcase: calculate appropriate value
|
||
for PFLAGS depending on match flags value, and pass right value to
|
||
string_list_pos_params (affects @, * expansion)
|
||
- pos_params: now takes PFLAGS as argument to pass to string_list_pos_params;
|
||
changed caller
|
||
|
||
array.c
|
||
- array_pat_subst,array_modcase: calculate appropriate value for
|
||
PFLAGS depending on match flags value, and pass right value to
|
||
string_list_pos_params (affects @, * subscript expansion)
|
||
|
||
array.[ch]
|
||
- array_subrange: now takes additional PFLAGS argument to pass to
|
||
string_list_pos_params
|
||
|
||
assoc.c
|
||
- assoc_pat_subst,assoc_modcase: calculate appropriate value for
|
||
PFLAGS depending on match flags value, and pass right value to
|
||
string_list_pos_params (affects @, * subscript expansion)
|
||
STILL NEED TO DO SUBRANGE
|
||
|
||
subst.c
|
||
- parameter_brace_substring: add PFLAGS argument to array_subrange
|
||
|
||
arrayfunc.c
|
||
- array_keys: use string_list_pos_params instead of calling
|
||
string_list_dollar_{star,at} directly.
|
||
|
||
arrayfunc.[ch]
|
||
- array_keys: now takes a PFLAGS argument, passes to string_list_pos_params
|
||
|
||
subst.c
|
||
- parameter_brace_expand: add PFLAGS argument to call to array_keys
|
||
|
||
subst.c
|
||
- parameter_brace_expand_indir: now takes a PFLAGS argument and uses it
|
||
in the call to parameter_brace_expand_word
|
||
- parameter_brace_expand: add PFLAGS argument to call to
|
||
parameter_brace_expand_indir
|
||
|
||
3/15
|
||
----
|
||
subst.c
|
||
- chk_atstar: now takes a PFLAGS parameter, changed callers. Will
|
||
eventually affect whether or not we saw $@
|
||
- chk_atstar: if we see "$*" don't note that we saw $@ unless
|
||
expand_no_split_dollar_star is unset. This is what param_expand
|
||
does
|
||
|
||
3/18
|
||
----
|
||
lib/readline/misc.c
|
||
- rl_get_previous_history: if we are trying to go back from the
|
||
beginning of the history, or if we are trying to go back before the
|
||
beginning of the history, call _rl_free_saved_history_line to just
|
||
get rid of the history line we saved instead of using
|
||
rl_maybe_unsave_line, which modifies the current line buffer.
|
||
Fixes bug reported by lessbug <lessbug@qq.com>
|
||
|
||
3/20
|
||
----
|
||
execute_cmd.c
|
||
- execute_command_internal: save and restore line_number around
|
||
user_subshell setting it to the line number saved in the command.
|
||
Fixes bug reported in https://bugzilla.novell.com/show_bug.cgi?id=1128936
|
||
|
||
3/21
|
||
----
|
||
lib/sh/strtrans.c
|
||
- ansicstr: handle multibyte characters that are not preceded by a
|
||
backslash so we skip over potential escapes in characters whose
|
||
multibyte representation contains a backslash. Fixes issue reported by
|
||
Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
subst.c
|
||
- reap_some_procsubs: reap_procsubs, but parameterized to take the
|
||
max index to check -- general function for future use
|
||
- reap_procsubs: now just calls reap_some_procsubs with the right arg
|
||
|
||
execute_cmd.c
|
||
- execute_command_internal: if we are using /dev/fd for process
|
||
substitution, reap the procsubs at the end of this function (FIFOs
|
||
do it at the beginning -- look at this more closely). Only do it
|
||
for loops to avoid fd exhaustion. Fixes bug reported by
|
||
sunnycemetery@gmail.com
|
||
|
||
3/22
|
||
----
|
||
lib/readline/{rlprivate.h,signals.c}
|
||
- _rl_interrupt_immediately: removed as no longer used
|
||
|
||
redir.c
|
||
- heredoc_expand: new function, called for both here-documents and
|
||
here-strings, takes care of expanding the document and returns a
|
||
string
|
||
- write_here_document: use heredoc_expand, call write(2) once on the
|
||
entire document; structure is now very similar to write_here_string
|
||
|
||
3/23
|
||
----
|
||
redir.c
|
||
- here_document_to_fd: expand the here document/here string first,
|
||
using heredoc_expand, then decide what to do; remove calls to
|
||
write_here_document/write_here_string in favor of calling
|
||
heredoc_write directly
|
||
- here_document_to_fd: if the expanded document is of zero length,
|
||
just open /dev/null right away and return it -- idea from yash
|
||
- here_document_to_fd: if the length of the expanded document is
|
||
between 1 and PIPESIZE (pipe capacity, computed by builtins/psize.aux
|
||
and stored in builtins/pipesize.h), try to use a pipe: write
|
||
the document to the write end and return the read end. Prompted by a
|
||
report from Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||
|
||
builtins/enable.def
|
||
- dyn_load_builtin: add warning if dynamic builtin with a load function
|
||
is loaded more than once, before running the load function a second
|
||
time. From a suggestion by Stan Marsh <gazelle@xmission.com>
|
||
|
||
3/25
|
||
----
|
||
jobs.[ch]
|
||
- wait_for_any_job: takes a new argument, a struct procstat * that
|
||
gets the PID of the exited job's process leader (the one that
|
||
contributes the status) and the same status we return from the
|
||
function
|
||
|
||
builtins/wait.def
|
||
- wait_builtin: pass a struct procstat * to wait_for_any_job to get
|
||
the pid of the job's process leader (and the same status the
|
||
function returns). We don't do anything with it yet
|
||
|
||
3/28
|
||
----
|
||
variable.c
|
||
- seedrand: add a couple more variables to the random seed
|
||
|
||
lib/sh/tmpfile.c
|
||
- sh_mktmpdir: new function, makes a temporary directory using
|
||
mkdtemp if it's available, and generates a filename using
|
||
sh_mktmpname (which uses mktemp, if available) and makes a
|
||
directory with it if not
|
||
|
||
config-{top,bot}.h
|
||
- set up to use mkdtemp if available
|
||
|
||
externs.h
|
||
- sh_mktmpdir: extern declaration
|
||
- MT_TEMPFILE: new flag for the tempfile functions; means to use the
|
||
value in the NAMEROOT argument as a template for the mktemp/mkstemp/
|
||
mkdtemp functions. Not used in mainline shell code
|
||
|
||
examples/loadables/mktemp.c
|
||
- mktemp: new loadable builtin, with BSD options and basic semantics
|
||
|
||
3/29
|
||
----
|
||
builtins/common.c,builtins/printf.def
|
||
- builtin_bind_variable: moved bind_printf_variable to common.c from
|
||
printf.def, renamed to builtin_bind_variable, made global for other
|
||
builtins to use
|
||
|
||
builtins/read.def
|
||
- bind_read_variable: now uses builtin_bind_variable
|
||
|
||
4/4
|
||
---
|
||
lib/readline/histfile.c
|
||
- history_rename: wrapper function for rename(2) to deal with the Win32
|
||
refusal to rename over an existing file; changed callers. Bug and fix
|
||
from <john.david.donoghue@gmail.com>
|
||
|
||
4/8
|
||
---
|
||
builtins/trap.def
|
||
- display_traps,showtrap: take an additional int argument, that, if
|
||
non-zero, means to print a trap command for a signal whose disposition
|
||
is SIG_DFL
|
||
- trap_builtin: if the -p option is given, and posix mode is enabled,
|
||
pass the `show every signal' flag to display_traps so SIG_DFL signals
|
||
are displayed as `trap -- - <signal>'. From an austin-group
|
||
interpretation (1212) initiated by Robert Elz <kre@bmunnari.oz.au>.
|
||
Tagged for bash-5.1
|
||
|
||
4/9
|
||
---
|
||
jobs.c
|
||
- list_one_job: printing one job counts as notifying the user about
|
||
it, so add a call to cleanup_dead_jobs like in the other job display
|
||
functions. Fixes https://savannah.gnu.org/support/?109667 reported
|
||
by "Brian K. White"
|
||
|
||
4/10
|
||
----
|
||
redir.c
|
||
- HEREDOC_PIPESIZE: define to PIPESIZE if not defined, allow it to be
|
||
specified at build time; used in here_document_to_fd to determine
|
||
whether or not a pipe is used
|
||
- HEREDOC_PIPEMAX: allow build-time definition of the max heredoc size
|
||
that will be written to a pipe
|
||
- here_document_to_fd: if F_GETPIPE_SZ is defined (Linux), ensure that
|
||
the document is shorter than the possibly-dynamic max pipe size,
|
||
and fall back to the tempfile implementation if it is not
|
||
- HEREDOC_PARANOID: if this is defined to a non-zero value,
|
||
here_document_to_fd ensures that both file descriptors opened on
|
||
the temporary file refer to the same file
|
||
|
||
lib/sh/zmapfd.c
|
||
- zmapfd: increased the default allocation sizes
|
||
|
||
lib/sh/zcatfd.c
|
||
- zcatfd: increased the default allocation sizes
|
||
|
||
input.c
|
||
- localbuf: increased the default buffer size for reads
|
||
|
||
4/11
|
||
----
|
||
subst.c
|
||
- cond_expand_word: like expand_word_unsplit, we need to peform
|
||
quoted null character removal on both the LHS and RHS of the
|
||
operator, since we are not performing word splitting. Fixes bug
|
||
reported by Matt Whitlock in https://savannah.gnu.org/support/?109671
|
||
|
||
4/12
|
||
----
|
||
jobs.c
|
||
- wait_for_background_pids: don't bother with the loop that waits for
|
||
and reaps all children of the shell in the case that it's inherited
|
||
some children it doesn't care about. Report from Daniel Kahn Gillmor
|
||
<dkg@fifthhorseman.net>
|
||
|
||
4/14
|
||
----
|
||
subst.c
|
||
- command_substitute: add an unwind-protect to make sure the read end
|
||
of the pipe gets closed in the parent on a SIGINT that interrupts
|
||
the zread. Fixes fast SIGINT fd leak reported by Tycho Kirchner
|
||
<tychokirchner@mail.de>
|
||
|
||
bashhist.c
|
||
- history_number: if enable_history_list is set (`set -o history' has
|
||
been executed), return the current history number even if we're
|
||
not currently saving commands in the history list
|
||
(remember_on_history == 0). Prompted by report from Paul Wise
|
||
<pabs3@bonedaddy.net>
|
||
|
||
4/20
|
||
----
|
||
doc/bash.1,lib/readline/doc/rluser.texi
|
||
- make it clear that the `bind' builtin can be used to set readline
|
||
keybindings and variables. Suggestion from Dan Jacobson
|
||
<jidanni@jidanni.org>
|
||
|
||
4/22
|
||
----
|
||
lib/glob/glob.h
|
||
- GX_SYMLINK: new internal flag denoting we are processing a symlink to
|
||
a directory. If GX_GLOBSTAR is active, we should not `descend' into
|
||
that directory
|
||
|
||
lib/glob/glob.c
|
||
- glob_filename: if the directory portion of the pattern is `**'
|
||
(all_starstar), we have globbed all of the directories corresponding
|
||
to that pattern, and we encounter a name that is a symlink to a
|
||
directory, don't descend into it: if the filename portion is null,
|
||
return that name only; if the filename portion is non-null, skip over
|
||
it because we will pick it up when we process the `real' directory.
|
||
This is a better fix for the issue originally reported by
|
||
Murukesh Mohanan <murukesh.mohanan@gmail.com> back in 4/2018 and
|
||
addresses the issue raised by Eli Schwartz <eschwartz@archlinux.org>
|
||
- glob_dir_to_array: slight optimization: if array[i] is the empty
|
||
string, don't bother to strcpy it or check the result for a directory
|
||
for GX_MARKDIRS support
|
||
|
||
4/23
|
||
----
|
||
bashline.c
|
||
- test_for_canon_directory: test a pathname for a directory, but
|
||
expand and canonicalize it first using bash_filename_stat_hook()
|
||
before calling stat(2)
|
||
- bash_progcomp_ignore_filenames: strip non-directories out of a match
|
||
list, but use the function above that canonicalizes the pathname to
|
||
expand the name before testing
|
||
- bash_directory_completion_matches: use bash_progcomp_ignore_filenames
|
||
to strip out non-directories so we get consistent results between
|
||
programmable completion and tab completion. Fixes bug reported by
|
||
Ville Skyttä <ville.skytta@iki.fi>
|
||
|
||
builtins/read.def
|
||
- read_builtin: allow read -e and read -u N to be used together, by
|
||
calling fdopen(fd) if fd != 0. Save and restore rl_instream. Fixes
|
||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927768
|
||
|
||
4/24
|
||
----
|
||
lib/readline/input.c
|
||
- rl_getc: if readline catches SIGTSTP, the calling application must
|
||
not have had it ignored. Run the signal handler and set the signal
|
||
hook in case the application wants to handle it. Report from
|
||
Robert Elz <kre@bmunnari.oz.au>
|
||
|
||
4/26
|
||
----
|
||
parse.y
|
||
- parser_will_prompt: check and return true if we have consumed the
|
||
entire readline line buffer and will have to go back to readline for
|
||
more input, printing a prompt as a consequence
|
||
|
||
eval.c
|
||
- parse_command: if parser_will_prompt() returns 0, indicating that we
|
||
still have unconsumed input in the readline line buffer, don't
|
||
execute PROMPT_COMMAND. TENTATIVE fix prompted by report from
|
||
Matteo Landi <matteo@matteolandi.net>
|
||
|
||
builtins/read.def
|
||
- set_eol_delim: save the old values before changing the bindings for
|
||
RETURN and the delimiter character, in case the delimiter is RETURN.
|
||
Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
- read_builtin: if the delimiter is '\0' and we are using readline,
|
||
don't terminate the buffer and go back to read another character;
|
||
allow the NULL to pass through and terminate the read.
|
||
Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
5/9
|
||
---
|
||
bashhist.c
|
||
- bash_delete_histent: decrement history_lines_this_session only if
|
||
remove_history returns a non-null history entry, and return failure
|
||
if it does return a null entry
|
||
|
||
builtins/history.def
|
||
- history_builtin: when checking the argument to -d, display an error
|
||
if the argument is >= history_base + history_length, since that's
|
||
what history_get and remove_history check. Fixes issue reported by
|
||
<jr@saturn.site>
|
||
|
||
support/shobj-conf
|
||
- hpux11: change stanza to create shared libraries on later versions of
|
||
HPUX 11. Contributed by Michael Osipov <michael.osipov@siemens.com>
|
||
|
||
lib/readline/terminal.c
|
||
- _rl_init_terminal_io: assume TGETENT_BROKEN defined means that tgetent
|
||
returns 0 on success, as on HPUX 11. Bug reported by Michael Osipov
|
||
<michael.osipov@siemens.com>
|
||
|
||
configure.ac
|
||
- hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS
|
||
|
||
execute_cmd.c
|
||
- select_builtin: set executing_builtin around the call to read_builtin
|
||
so we can run traps if the read call is interrupted. From a report
|
||
from Andreas Kusalananda Kähäri <andreas.kahari@abc.se>
|
||
|
||
5/12
|
||
----
|
||
doc/bashref.texi
|
||
- The Restricted Shell: add some language detailing the weaknesses of
|
||
the restricted shell mode in isolation, inspired by a discussion on
|
||
the zsh mailing list
|
||
|
||
5/15
|
||
----
|
||
xmalloc.h
|
||
- malloc: define to sh_malloc to get file and line information from
|
||
malloc (not xmalloc) calls. From a suggestion by achurch@achurch.org
|
||
(Andrew Church)
|
||
|
||
builtins/evalstring.c
|
||
- parse_and_execute: make sure the parser is not expanding an alias
|
||
before terminating the loop that processes characters in the string.
|
||
Fixes problem with -c commands that end with an alias reported by
|
||
Yu Kou <ckyoog@gmail.com>
|
||
- should_suppress_fork: make sure that we don't try to optimize out a
|
||
fork if the parser is still expanding an alias
|
||
|
||
5/16
|
||
----
|
||
lib/readline/misc.c
|
||
- rl_get_previous_history: if previous_history() returns NULL, only
|
||
free the saved history if we were the ones who saved it; leave any
|
||
existing saved history entry alone. Fixes problem with ^N not working
|
||
at the end of the history if we previously moved back to the start
|
||
of history
|
||
|
||
lib/readline/histfile.c
|
||
- read_history_range: when reading until FROM lines with a history
|
||
file that has timestamps, make sure to skip to the end of the command
|
||
line corresponding to the FROMth line instead of leaving line_start
|
||
pointing to it, and keep track of the start of the last timestamp in
|
||
last_ts for use by the loop below. Fix for history -n bug reported
|
||
by HIROSE Masaaki <hirose31@gmail.com>
|
||
|
||
lib/readline/display.c
|
||
- init_line_structures: if, for some reason, _rl_screenwidth ends up
|
||
bigger than the line_size default of 1024 (e.g., gdb's setting the
|
||
terminal width to 0), make sure line_size is at least _rl_screenwidth.
|
||
From a report by Tom de Vries <tdevries@suse.de>
|
||
|
||
5/17
|
||
----
|
||
variables.c
|
||
- brand: split the code into a function that generates a 32-bit value
|
||
given the last value in the sequence (intrand32) and a function that
|
||
returns a 16-bit random number (brand)
|
||
- seedrand: small change in hopes of adding slightly more entropy
|
||
- brand: modify the 16-bit version to XOR the top 16 bits of the 32-bit
|
||
seed with the bottom 16 bits and return the lower 15 bits of that
|
||
result as before. Based on an analysis by Andrew Church
|
||
<achurch+bash@achurch.org>
|
||
|
||
5/18
|
||
----
|
||
variables.c
|
||
- genseed: break code that generates the 32-bit seed for the RNG into
|
||
a separate function; call from seedrand
|
||
- {brand32,sbrand32,seedrand32}: new 32-bit versions of the random
|
||
number generator functions that use the entire 32-bit internal value.
|
||
Prep for systems that don't have /dev/urandom or arc4random()
|
||
- perturb_rand32: shake up the 32-bit LCRNG in subshells
|
||
|
||
5/19
|
||
----
|
||
variables.c
|
||
- get_urandom32: get a 32-bit random number by using the first one of
|
||
these that succeeds: reading from /dev/urandom (if available),
|
||
calling arc4random (if available), and using the internal 32-bit
|
||
RNG (always available)
|
||
- SRANDOM: expand to a 32-bit random number. This is not a LCRNG, so
|
||
the numbers shouldn't have any relationship to previous returned
|
||
values. Assignments are accepted but have no effect on the sequence.
|
||
Not documented yet
|
||
|
||
5/20
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- SRANDOM: document new special variable
|
||
|
||
5/22
|
||
----
|
||
jobs.c
|
||
- find_pid_in_pipeline: abstract some code from find_pipeline to look
|
||
for a PID in a specific pipline passed as an argument
|
||
- find_pipeline: if we have some saved pipeline(s), look there to find
|
||
the PID instead of returning failure. This process could have been
|
||
started from a DEBUG trap that saved the_pipeline. Fixes Linux bug
|
||
reported by Hengyang Zhao <hzhao877502@gmail.com>
|
||
|
||
builtins/bind.def
|
||
- unbind_keyseq: use rl_function_of_keyseq_len so you can unbind ^@
|
||
(which translates to 0). Fixes bug reported by
|
||
Dennis Williamson <dennistwilliamson@gmail.com>
|
||
|
||
5/23
|
||
----
|
||
lib/readline/display.c
|
||
- rl_redisplay: make sure that the line structures can hold up to
|
||
_rl_screenwidth characters, to support applications like gdb that
|
||
set the screen width to huge values. Report and fix from
|
||
Tom de Vries <tdevries@suse.de>
|
||
|
||
5/24
|
||
----
|
||
lib/readline/bind.c
|
||
- rl_generic_bind: move `ic' from block scope to function scope to
|
||
avoid problems with compilers that destroy and recreate it every
|
||
time through the loop. Report and fix from Adam Richter
|
||
<adamrichter4@gmail.com>
|
||
|
||
5/30
|
||
----
|
||
jobs.c
|
||
- wait_for_job: now takes an additional struct procstat * argument,
|
||
and returns the pid and status of the job's `controlling process'
|
||
to the caller
|
||
|
||
{jobs,nojobs}.c
|
||
- wait_for_background_pids: take a struct proctstat * argument and fill
|
||
it in with pid and status of the last process to terminate
|
||
|
||
jobs.h
|
||
- wait_for_job, wait_for_background_pids: add additional argument to
|
||
declaration
|
||
|
||
builtins/wait.def
|
||
- wait_builtin: set pstat.{pid,status} each time through the pid-or-job
|
||
loop and for wait without arguments
|
||
|
||
6/4
|
||
---
|
||
sig.c
|
||
- termsig_handler: clean up last_procsub_child before exiting, after
|
||
unlinking all FIFOs or closing FDs to all the pipes. Might need to
|
||
send it a SIGTERM too. Fixes issue reported by mwnx <mwnx@gmx.com>
|
||
|
||
config-top.h
|
||
- CASEMOD_CAPCASE: no longer defined by default
|
||
|
||
6/5
|
||
---
|
||
lib/glob/glob.c
|
||
- glob_always_skip_dot_and_dotdot: new global variable, if set to
|
||
a non-zero value, no glob pattern will ever match `.' or `..'.
|
||
Disabled by default
|
||
|
||
6/7
|
||
---
|
||
bashline.c
|
||
- cmd_xmap: changes to support multiple cmd_xmaps, one per editing
|
||
mode keymap (one each for vi insert and command modes). Changes from
|
||
Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
execute_cmd.c
|
||
- execute_arith_command: change from expanding the expression using
|
||
expand_words_no_vars to use expand_arith_string, with the accompanying
|
||
conversion from a WORD_LIST into a string. This makes it more
|
||
consistent with other arithmetic expansions. Inspired by a
|
||
discussion begun by Nils Emmerich <nemmerich@ernw.de>
|
||
|
||
6/10
|
||
----
|
||
jobs.c
|
||
- waitchld: since process substitutions are asynchronous, save the
|
||
status of one that exits (that we still know about) in the bgpids
|
||
list
|
||
|
||
6/12
|
||
----
|
||
jobs.c
|
||
- wait_for_background_pids: wait for the last procsub only if it's the
|
||
same as last_asynchronous_pid
|
||
|
||
bashline.c
|
||
- bash_backward_shellword: changes to behave better when at the
|
||
beginning of the last character on the line and to leave point at
|
||
the beginning of the shellword, like backward-word. Fixes from
|
||
Andrew Gaylard <a.gaylard@gmail.com>
|
||
|
||
6/13
|
||
----
|
||
bashline.c
|
||
- __P: Replaced with PARAMS. First of many
|
||
- bash_transpose_shellwords: transpose-words, but using `shellword'
|
||
word boundaries like shell-forward-word and shell-backward-word.
|
||
Contributed by Andrew Gaylard <a.gaylard@gmail.com>
|
||
- "shell-transpose-words": new name binding for bash_transpose_shellwords
|
||
- bash_readline_initialize: add default bindings for shell-forward-word,
|
||
shell-backward-word, shell-transpose-words, and shell-kill-word.
|
||
Suggested by Andrew Gaylard <a.gaylard@gmail.com>
|
||
|
||
lib/readline/doc/rluser.texi
|
||
- shell-transpose-words: document
|
||
- {shell-forward-word,shell-backward-word,shell-kill-word,shell-transpose-words}:
|
||
document new default bindings bash now adds
|
||
|
||
variables.c
|
||
- set_argv0: function to assign argv0 if it's found in the initial
|
||
shell environment. Suggested by Cuong Manh Le
|
||
<coung.manhle.vn@gmail.com>
|
||
- initialize_shell_variables: call set_argv0() as part of shell
|
||
initialization
|
||
|
||
6/14
|
||
----
|
||
execute_cmd.c
|
||
- execute_for_command: make sure to call stupidly_hack_special_variables
|
||
on the index variable each time bind_variable is called on it. If
|
||
someone does something nonsensical like `for OPTIND in ...' we want
|
||
the side effects to happen. Reported by Stephane Chazelas
|
||
<stephane.chazelas@gmail.com>
|
||
- execute_select_command: do the same thing for the selection variable
|
||
after calling bind_variable
|
||
|
||
6/15
|
||
----
|
||
builtins/set.def
|
||
- unset_builtin: if neither -f nor -v is supplied, and a NAME cannot
|
||
be a shell variable because it's not a shell identifier, try to
|
||
unset a shell function whether we're in posix mode or not. Suggested
|
||
back in 1/2019 by PePa65 <solusos@passchier.net> and Robert Elz
|
||
<kre@bmunnari.oz.au>
|
||
|
||
execute_cmd.c
|
||
- execute_simple_command: if this is being executed by the command
|
||
builtin (flags&CMD_COMMAND_BUILTIN), don't bother to print the
|
||
command words if set -x is enabled. From a report by Martijn Dekker
|
||
<martijn@inlv.org> back in 4/2018
|
||
|
||
6/19
|
||
----
|
||
lib/glob/glob.c
|
||
- glob_filename: if we are not being called recursively, and there is
|
||
only a directory name, dequote the passed pathname and see if it
|
||
names an existing directory. If it does, return it; otherwise return
|
||
failure ((char **)&glob_error_return). This is what makes backslash
|
||
escaped-characters in pathnames in shell variables work the same as
|
||
the same value passed directly. From an anonymous comment on
|
||
https://savannah.gnu.org/support/?109629 and a discussion on the
|
||
austin-group list.
|
||
|
||
6/20
|
||
----
|
||
pathexp.c,lib/glob/glob.c
|
||
- posix_glob_backslash: variable to control whether or not pathname
|
||
expansion handles backslashes in the pattern the way Posix says it
|
||
should. Enabled by default
|
||
|
||
pathexp.h
|
||
- posix_glob_backslash: new extern declaration
|
||
|
||
builtins/shopt.def
|
||
- posixglob: new option, reflects the value of posix_glob_backslash
|
||
|
||
general.c
|
||
- posix_vars: add posix_glob_backslash to the table
|
||
- posix_initialize: set posix_glob_backslash to 1 when turning on
|
||
posix mode
|
||
|
||
6/21
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- pathname expansion: note that under some circumstances the shell
|
||
will invoke the matching engine for words with unquoted backslashes
|
||
- posixglob: document the new shell option and its effects
|
||
|
||
6/27
|
||
----
|
||
{config.h.in,configure.ac}
|
||
- setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as
|
||
appropriate
|
||
|
||
shell.c
|
||
- disable_priv_mode: if we have setres[ug]id, use them over
|
||
set[ug]id, which only set the save user-id and group-id if the
|
||
process is running as root. From Ian Eldred Pudney
|
||
in https://savannah.gnu.org/patch/?9822
|
||
|
||
6/28
|
||
----
|
||
lib/glob/glob.c
|
||
- glob_vector: don't bother trying to read the directory if the filename
|
||
pattern doesn't have any globbing characters except backslash; just
|
||
dequote the pattern and try to lstat(2) it as if there were no
|
||
globbing characters at all. From an austingroup-bugs discussion
|
||
message from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
bashline.c
|
||
- completion_glob_pattern: just call glob_pattern_p and make sure it
|
||
returns 1 (non-backslash globbing characters)
|
||
|
||
builtins/help.def
|
||
- help_builtin: don't try pattern matching the help topic argument
|
||
unless glob_pattern_p returns 1
|
||
|
||
pathexp.c
|
||
- unquoted_glob_pattern_p: when in a bracket expression (open > 0),
|
||
don't allow an unquoted slash as part of the bracket expression.
|
||
Report from Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
7/1
|
||
---
|
||
print_cmd.c
|
||
- print_function_def,named_function_string: make sure to call
|
||
PRINT_DEFERRED_HEREDOCS to finish printing any here documents and
|
||
delimiters before printing the function closing brace. Fixes bug
|
||
reported by Denis McKeon <dmckeon@swcp.com>
|
||
|
||
execute_cmd.c
|
||
- execute_command_internal: call reap_procsubs at the end of executing
|
||
a group command on systems that have /dev/fd. Fixes bug reported by
|
||
kfm@plushkava.net
|
||
|
||
7/3
|
||
---
|
||
jobs.c
|
||
- waitchld: this is in the potential SIGCHLD path, so don't call
|
||
bgp_add, which can potentially call malloc. The glibc malloc doesn't
|
||
handle that well. Report from howaboutsynergy@protonmail.com
|
||
|
||
7/5
|
||
---
|
||
builtins/bind.def
|
||
- bind_builtin: make sure return_code is >= 0 before returning it.
|
||
Fixes bug with bind -x and invalid key sequences reported by
|
||
bashbug@jonkmans.nl
|
||
|
||
7/8
|
||
---
|
||
doc/{bash.1,bashref.texi}
|
||
- unset: fixed up list of special variables that lose their special
|
||
properties if they are unset. Report and fix from Edward Huff
|
||
<ejhuff@gmail.com>
|
||
|
||
7/9
|
||
---
|
||
test.c
|
||
- unary_test: update the `-N' test to use timespecs and nanosecond
|
||
granularity if available, and use mtime > atime instead of the
|
||
old mtime >= atime. Fixes bug reported by kfm@plushkava.net
|
||
|
||
lib/sh/strtod.c
|
||
- strtod: make sure to use locale_decpoint() to determine the radix
|
||
character
|
||
|
||
7/11
|
||
----
|
||
lib/sh/utf8.c
|
||
- utf8_mblen: return -2 if the UTF-8 sequence is incomplete
|
||
- utf8_mblen: 4-byte UTF-8 characters start with a byte <= 0xf4; limit
|
||
to 4-byte UTF-8 (since 5- and 6-byte code points were removed in 2003)
|
||
|
||
7/12
|
||
----
|
||
parse.y,shell.h
|
||
- sh_input_line_state_t: if HANDLE_MULTIBYTE is defined, add members
|
||
for saving shell_input_line_property and its associated size; let
|
||
save_line_state and restore_line_state manage it. This means
|
||
restore_line_state no longer calls set_line_mbstate. From a report
|
||
from astian <astian@e-nautia.com>
|
||
|
||
parse.y
|
||
- set_line_mbstate: if the current locale is not multibyte, just set
|
||
everything in the property array to 1
|
||
- set_line_mbstate: use locale_utf8locale to optimize away calls to
|
||
mbrlen; just use utf8_mblen
|
||
|
||
7/14
|
||
----
|
||
variables.c
|
||
- sv_tz: remake the export env if TZ is being unset. Fixes bug
|
||
reported by Travis Everett <travis.a.everett@gmail.com>
|
||
|
||
lib/readline/display.c
|
||
- rl_expand_prompt: if the prompt contains embedded newlines, compute
|
||
local_prompt_prefix before local_prompt because each call sets
|
||
local_prompt_newlines, and we want the values computed in the call
|
||
that uses local_prompt to be the ones that we use. Fixes prompt
|
||
wrapping bug reported by Tianon Gravi <admwiggin@gmail.com>
|
||
|
||
7/16
|
||
----
|
||
Makefile.in
|
||
- added a number of dependencies from Vemake Vemake
|
||
<vemakereporter@gmail.com> as reported in
|
||
http://savannah.gnu.org/patch/download.php?file_id=47219
|
||
|
||
7/19
|
||
----
|
||
lib/sh/utf8.c
|
||
- utf8_mblen: changes to handle invalid multibyte sequences better,
|
||
even when N means that the sequence would be too short anyway
|
||
|
||
arrayfunc.c
|
||
- bind_assoc_var_internal: new convenience function to assign a
|
||
key-value pair to an associative array. It gets the SHELL_VAR * AND
|
||
a HASH_TABLE *, which may or may not correspond to the assoc_cell
|
||
of the variable, and performs the insertion into the hash table.
|
||
Callers take care of passing the right values.
|
||
- bind_assoc_variable: call bind_assoc_var_internal to do the real
|
||
work
|
||
- assign_compound_array_list: change to assign associative array
|
||
key-value pairs into a new hash table (NHASH), so we can still use
|
||
the old value for expansion. We do this in place of clearing out
|
||
the contents of the associative array before performing the expansion
|
||
and assignments. After doing all the assignments into NHASH, we swap
|
||
NHASH into the variable as its value and dispose of the old value.
|
||
Fixes inconsistency reported by Darren 'Tadgy' Austin
|
||
<darren@afterdark.org.uk>
|
||
|
||
7/20
|
||
----
|
||
aclocal.m4
|
||
- include bashansi.h in a bunch of AC_TRY_RUN recipies to avoid
|
||
exit() being flagged as an implicit declaration. Report and fix
|
||
from Chris Yungmann <yungmann.chris@gmail.com>
|
||
|
||
shell.c
|
||
- set_exit_status: set last_command_exit_value to the argument and make
|
||
sure to set PIPESTATUS from that exit value
|
||
|
||
shell.h
|
||
- set_exit_status: extern declaration
|
||
|
||
parse.y
|
||
- report_syntax_error: make sure to set PIPESTATUS if we set
|
||
last_command_exit_value on a syntax error
|
||
- parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS
|
||
when we set last_command_exit_value
|
||
|
||
sig.c
|
||
- throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set
|
||
last_command_exit_value
|
||
|
||
variables.c
|
||
- sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value
|
||
|
||
arrayfunc.c
|
||
- find_or_make_array_variable,array_expand_index,assign_compound_array_list:
|
||
call set_exit_status to set PIPESTATUS and last_command_exit_value
|
||
|
||
builtins/evalstring.c
|
||
- parse_and_execute: set PIPESTATUS when we set last_command_exit_value
|
||
|
||
braces.c
|
||
- brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value
|
||
|
||
eval.c
|
||
- reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value
|
||
|
||
make_cmd.c
|
||
- set PIPESTATUS when setting $? due to syntax errors or constructs
|
||
not being available
|
||
|
||
expr.c
|
||
- expr_streval: set PIPESTATUS when setting $? due to syntax errors
|
||
|
||
subst.c
|
||
- extract_delimited_string,extract_dollar_brace_string,do_assignment_internal,
|
||
call_expand_word_internal,array_length_reference,param_expand,
|
||
parameter_brace_expand_word,parameter_brace_expand_rhs,
|
||
parameter_brace_expand_error,parameter_brace_expand,err_unboundvar:
|
||
set PIPESTATUS when setting last_command_exit_value on error
|
||
conditions
|
||
|
||
redir.c
|
||
- REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value
|
||
on error conditions
|
||
|
||
subst.c
|
||
- match_upattern,match_wpattern: if the match length is greater than the
|
||
string length, short-circuit and return failure. Fixes bug
|
||
reported by Eduardo Bustamante <dualbus@gmail.com>
|
||
|
||
7/22
|
||
----
|
||
lib/glob/sm_loop.c
|
||
- BRACKMATCH: if we think we've matched, tighten up the rules for
|
||
the closing right bracket in the bracket expression to be correct
|
||
in the presence of invalid character classes, collating symbols,
|
||
and equivalence classes. If they're invalid, they shouldn't require
|
||
additional right brackets to close them
|
||
|
||
7/25
|
||
----
|
||
builtins/colon.def
|
||
- add the right includes so colon_builtin and false_builtin can take
|
||
a WORD_LIST * argument like the prototype says they do
|
||
|
||
7/29
|
||
----
|
||
lib/readline/kill.c
|
||
- _rl_read_bracketed_paste_prefix: read the character prefix that
|
||
indicates a pasted string in bracketed paste mode. If we don't
|
||
read a valid bracketed paste prefix, push the other characters
|
||
back onto the input stack with _rl_unget_char
|
||
- _rl_bracketed_read_key: handle reading pasted input when bracketed
|
||
paste mode is enabled, including reading multibyte characters; push
|
||
anything beyond a single byte back onto the input stack where it
|
||
can be read by _rl_read_mbstring or subsequent input
|
||
- _rl_bracketed_read_mbstring: handle reading pasted input in bracketed
|
||
paste mode, using _rl_bracketed_read_key to get the pasted text,
|
||
then call _rl_read_mbstring to get the rest of any multibyte char
|
||
|
||
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_callback_getchar: call _rl_bracketed_read_mbstring to handle
|
||
bracketed paste mode input. Fixes issue with vi-change-char reported
|
||
by <vampyrebat@gmail.com>
|
||
- rl_vi_domove_getchar: just call _rl_bracketed_read_key and return
|
||
the result -- we're not interested in multibyte-character input here
|
||
yet
|
||
- rl_vi_replace: bind BRACK_PASTE_PREF key sequence if bracketed paste
|
||
mode has been enabled
|
||
- _rl_overstrike_bracketed_paste: key binding function for the bracketed
|
||
paste prefix key sequence in overwrite mode; reads the pasted text
|
||
and uses rl_vi_overstrike to add each character in overwrite mode.
|
||
Fixes issue reported by <vampyrebat@gmail.com>
|
||
|
||
7/31
|
||
----
|
||
lib/readline/input.c
|
||
- _rl_read_mbchar: the first time through the loop (mb_len == 0), call
|
||
_rl_bracketed_read_key to process any bracketed paste characters
|
||
|
||
lib/readline/text.c
|
||
- _rl_char_search: use _rl_bracketed_read_key in the non-multibyte
|
||
character case
|
||
|
||
lib/readline/misc.c
|
||
- _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key
|
||
|
||
subst.c
|
||
- list_string: if string_extract_verbatim returns something, just make
|
||
a WORD_DESC * and add current_word directly to it, noting that we
|
||
don't want to free current_word (free_word = 0)
|
||
- string_extract_verbatim: if the separator string is the empty
|
||
string, don't bother with the loop -- just savestring the string,
|
||
update *sindex, and return the copy
|
||
- read_comsub: make the string we use to save the output from the pipe
|
||
512 bytes instead of 128 (same size as the buffer used to read from
|
||
the pipe); fewer calls to xrealloc in the worst case
|
||
- parameter_brace_expand_length: optimize the common case (non-dynamic
|
||
scalar variable without `set -u' in effect) and just call MB_STRLEN
|
||
on the variable value in that case. From a report from
|
||
Alkis Georgopoulos <alkisg@gmail.com>
|
||
|
||
8/13
|
||
----
|
||
execute_cmd.c
|
||
- execute_subshell_builtin_or_function: call subshell_exit() instead of
|
||
sh_exit() or exit() so the exit trap gets run. Fixes issue reported
|
||
in https://savannah.gnu.org/support/?109840
|
||
- replace __P with PARAMS
|
||
|
||
lib/readline/colors.c
|
||
- _rl_print_color_indicator: eliminate one use of S_ISLNK.
|
||
Report and fix from Christian Biesinger <cbiesinger@google.com>
|
||
|
||
8/22
|
||
----
|
||
variables.c
|
||
- push_posix_temp_var: change to use bind_variable and modify variables
|
||
at the current local scope or create and modify variables at the
|
||
global scope, as if a standalone assignment statement had been
|
||
executed. This restores some bash-4.4 backwards compatibility with
|
||
respect to posix-mode assignment statements preceding special
|
||
builtins and shell functions. The bash-5.0 behavior, while perhaps
|
||
defensible, caused too many compatibility problems. Originally
|
||
prompted by several discussions with Martijn Dekker; the current
|
||
incarnation and tests based on a report to Debian BTS from
|
||
Thorsten Glaser <tg@mirbsd.de>
|
||
|
||
8/26
|
||
----
|
||
shell.c,bashhist.c
|
||
- __P -> PARAMS
|
||
|
||
shell.c
|
||
- set_option_defaults,reset_option_defaults: before calling
|
||
list_minus_o_options at invocation, call set_option_defaults to
|
||
set the options that are initialized to -1 to either 1 or 0, as
|
||
appropriate; then call reset_option_defaults to set them back to -1
|
||
after list_minus_o_options returns
|
||
- init_interactive: if enable_history_list == -1, set it to 1, then
|
||
set remember_on_history to enable_history_list. Fixes bug reported
|
||
by Alex Kerzner <alex.j.kerzner@gmail.com>
|
||
- init_noninteractive: if enable_history_list == -1, set it to 0, let
|
||
bash_history_reinit take care of setting remember_on_history
|
||
- init_interactive_script: if enable_history_list == -1, set it to 1,
|
||
then set remember_on_history to enable_history_list
|
||
|
||
bashhist.c
|
||
- enable_history_list: initialize to -1 to note when it gets changed
|
||
by -o history or +o history at invocation
|
||
|
||
8/28
|
||
----
|
||
lib/readline/terminal.c
|
||
- TGETENT_SUCCESS, TGETFLAG_SUCCESS: defines to represent successful
|
||
returns from tgetent and tgetflag, since HPUX manages to get them
|
||
wrong. New patch from Osipov, Michael <michael.osipov@siemens.com>
|
||
- TGETFLAG: new define, make sure tgetflag returns TGETENT_SUCCESS
|
||
- _rl_init_terminal_io: use TGETENT_SUCCESS and TGETFLAG
|
||
|
||
configure.ac
|
||
- hpux: make sure to define TGETFLAG_BROKEN
|
||
|
||
8/30
|
||
----
|
||
tests
|
||
- add copyright notices to all scripts longer than 15 lines at the
|
||
request of the FSF
|
||
|
||
9/1
|
||
---
|
||
lib/readline/complete.c
|
||
- _rl_complete_internal: move logic that checks whether the last
|
||
completion attempt failed and the current attempt returned a single
|
||
match and insert the single completion here. A better implementation
|
||
of Richard Stallman's suggestion of 2/23.
|
||
|
||
9/3
|
||
---
|
||
bashline.c
|
||
- edit_and_execute_command: reset the readahead token after calling
|
||
restore_parser_state, in case some call to reset_parser set
|
||
token_to_read. Fixes bug reported by null <avalonvales@protonmail.com>
|
||
|
||
9/9
|
||
---
|
||
execute_cmd.c
|
||
- execute_command_internal: if we're executing a command list
|
||
(executing_list != 0), save the old fifo list and close any new
|
||
FIFOs that the command opens. Fixes bug reported by
|
||
Kamil Cukrowski <kamilcukrowski@gmail.com>
|
||
|
||
9/10
|
||
----
|
||
aclocal.m4,m4/intdiv0.m4
|
||
- make sure `exit' is used consistently with <stdlib.h> included
|
||
- make sure `main' isn't declared to implicitly return int
|
||
- include <ulimit.h> before using ulimit
|
||
- include <string.h> before testing string functions
|
||
- fixes from Florian Weimer <fweimer@redhat.com>
|
||
|
||
configure.ac
|
||
- setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL,
|
||
which always fails
|
||
|
||
shell.c
|
||
- disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of
|
||
the HAVE_DECL variants, which always fail configure tests
|
||
|
||
m4/intl.m4
|
||
- gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in
|
||
newer gettext releases
|
||
|
||
9/16
|
||
----
|
||
builtins/help.def
|
||
- help_builtin: make the closing quote printed after the argument list
|
||
for a glob pattern argument a translatable string to ease translation
|
||
for certain languages. Report from Roland Illig <roland.illig@gmx.de>
|
||
|
||
builtins/{reserved,complete,exec,getopts}.def
|
||
- minor typographical fixes from Roland Illig <roland.illig@gmx.de>
|
||
|
||
siglist.c
|
||
- include general.h for INT_STRLEN_BOUND
|
||
- initialize_siglist: use the same string for the strlen and xmalloc
|
||
for the message about an unknown signal number; use INT_STRLEN_BOUND
|
||
instead of a fixed 10 for the number
|
||
|
||
builtins/getopts.def,doc/{bash.1,bashref.texi}
|
||
- getopts: minor changes to the description of the effect of supplying
|
||
additional arguments. Report from Roland Illig <roland.illig@gmx.de>
|
||
|
||
9/17
|
||
----
|
||
jobs.[ch]
|
||
- save_proc_status: external interface to bgp_add, takes care of
|
||
blocking and unblocking SIGCHLD
|
||
- __P -> PARAMS
|
||
|
||
9/18
|
||
----
|
||
jobs.[ch]
|
||
- procsub_{free,add,search,delete,waitpid,waitall,clear,prune}: new
|
||
functions to keep track of the list of active process substitutions
|
||
and their statuses. Implementation is currently a singly-linked list
|
||
of PROCESS *, so functions that expect a PROCESS * to manipulate
|
||
continue to work. Inspired by report from leo.dalecki@ntymail.com
|
||
- find_pipeline,cleanup_dead_jobs,wait_for_background_pids: call new
|
||
procsub_* functions to manage procsub list; don't call the functions
|
||
in subst.c any more
|
||
|
||
subst.c
|
||
- process_substitute: call procsub_add with the PROCESS * returned
|
||
from make_child; let the functions in jobs.c manage the list.
|
||
waitchld continues to set the pid field in the fifo list as a hint
|
||
that a particular fd or FIFO is no longer used and can be reaped
|
||
- process_substitute: let the child process clear out any existing
|
||
procsub pid list
|
||
- wait_procsubs: no longer compiled in
|
||
|
||
sig.c
|
||
- termsig_handler: replace discard_last_procsub_child with call to
|
||
procsub_clear
|
||
|
||
lib/readline/display.c
|
||
- init_line_structures: fix a problem which results in references to
|
||
uninitialized memory when gdb sets the number of columns to 32767
|
||
(their `unlimited'). Modification of change from 5/23. Report and
|
||
fix from Andrew Burgess <andrew.burgess@embecosm.com>
|
||
|
||
9/19
|
||
----
|
||
parse.y
|
||
- xparse_dolparen: after calling parse_string to consume input, make
|
||
sure to reset the parser (reset_parser()) before restoring the EOF
|
||
token and the parser_state variable. Fixes issue with nested traps
|
||
running command substitutions in command lines with command
|
||
substitutions reported by Travis Everett <travis.a.everett@gmail.com>
|
||
|
||
9/20
|
||
----
|
||
doc/{bashref.texi,bash.1}
|
||
- fixed a typo in the example for the =~ operator: the ? should follow
|
||
the (a), not precede it. Report from hk <hkadeveloper@gmail.com>
|
||
- some changes to the text describing regular expression matching for
|
||
the =~ operator
|
||
|
||
9/25
|
||
----
|
||
general.c,builtins/shopt.def
|
||
- posix_glob_backslash: remove references to this variable and the
|
||
`posixglob' shell option
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- remove references to the `posixglob' shell option
|
||
|
||
9/26
|
||
----
|
||
{jobs,nojobs}.c
|
||
- DEFAULT_MAX_CHILD: bump this up to 4096
|
||
- set_maxchild: set lmaxchild to MAX_CHILD_MAX if getmaxchild returns
|
||
-1 without changing errno (assume that sysconf returns -1 meaning
|
||
unlimited)
|
||
- initialize_job_control: call set_maxchild instead of inline code
|
||
- mark_dead_jobs_as_notified: call set_maxchild to set js.c_childmax
|
||
if it hasn't been set yet
|
||
|
||
9/30
|
||
----
|
||
lib/glob/xmbsrtowcs.c
|
||
- xwcsrtombs: implementation of wcsrtombs from gnulib, modified to
|
||
treat invalid wide characters (or wide characters that can't be
|
||
converted to multibyte character sequences) as bytes. Should be
|
||
used only in unusual circumstances where wcsrtombs fails.
|
||
|
||
lib/glob/glob.c
|
||
- wdequote_pathname: if wcsrtombs fails to convert the dequoted wide
|
||
character pathname back to a sequence of multibyte characters, call
|
||
xwcsrtombs to try to treat the invalid wide characters as bytes --
|
||
the call to xdupmbstowcs treats bytes that don't convert to wide
|
||
characters as just bytes, which kind of causes this problem in the
|
||
first place. Inspired by report from Geoff Kuenning <geoff@cs.hmc.edu>
|
||
|
||
lib/readline/complete.c
|
||
- compute_lcd_of_matches: use the case-folding code (which performs
|
||
character-by-character checking and compares invalid multibyte
|
||
sequences as bytes) instead of the old case-sensitive code (which
|
||
used _rl_compare_chars), converting characters to lowercase as
|
||
needed. Fixes bug with invalid sequences in common filename prefixes
|
||
reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
10/1
|
||
----
|
||
builtins/shopt.def
|
||
- reset_shopt_options: add in resets for some missing shopt options.
|
||
Report and fix from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
execute_cmd.c
|
||
- execute_command_internal: make sure a failed attempt to define a
|
||
shell function causes the shell to exit if -e is enabled. Report
|
||
from Andreas Kusalananda Kähäri <andreas.kahari@abc.se>
|
||
- execute_command_internal: combine cm_function_def, cm_arith, and
|
||
cm_cond cases into one switch case, since the code is virtually
|
||
identical across all three
|
||
|
||
10/3
|
||
----
|
||
pathexp.[ch],lib/glob/glob.c,lib/glob/glob_loop.c
|
||
- remove all references to posix_glob_backslash in preparation for
|
||
implementing austin group interpretation #1234
|
||
|
||
pathexp.c
|
||
- unquoted_glob_pattern_p: revert to bash-4.4 behavior of returning 1
|
||
only if there is an unquoted `*', `?', or bracket expression, as
|
||
per austin group interpretation #1234
|
||
|
||
lib/glob/glob_loop.c
|
||
- INTERNAL_GLOB_PATTERN_P: revert to bash-4.4 behavior of returning 1
|
||
only if there is an unquoted `*', `?', or bracket expression, as
|
||
per austin group interpretation #1234
|
||
|
||
10/4
|
||
----
|
||
variables.c
|
||
- assign_seconds,get_seconds: use the tv_sec value returned from
|
||
gettimeofday() instead of time() to get a better approximation of
|
||
the number of seconds since the epoch for future calculations.
|
||
From a report by Stephane Chazelas <stephane.chazelas@gmail.com>
|
||
|
||
pathexp.[ch],{bashline,subst}.c
|
||
- shell_glob_filename: now takes an additional flags argument to pass
|
||
to quote_string_for_globbing
|
||
|
||
10/6
|
||
----
|
||
subst.c
|
||
- glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC
|
||
because quote removal hasn't been performed yet
|
||
|
||
10/7
|
||
----
|
||
pathexp.c
|
||
- quote_string_for_globbing: if we have an unquoted backslash followed
|
||
by a CTLESC-quoted character (not CTLESC-CTLESC), just perform the
|
||
usual CTLESC-to-backslash conversion instead of skipping over it.
|
||
Fixes issue raised in austin-group discussion about globbing by
|
||
Geoff Clare <gwc@opengroup.org> (austin-group issue 1234), though
|
||
it's still inherently ambiguous
|
||
|
||
10/8
|
||
----
|
||
include/shmbutil.h
|
||
- xwcsrtombs: extern declaration, to match other functions in that file
|
||
|
||
lib/glob/glob.c
|
||
- wcdequote_pathname: new function, actual backslash quote removal code
|
||
from wdequote_pathname; wdequote_pathname calls it
|
||
|
||
lib/glob/glob.c
|
||
- {udequote,wcdequote}_pathname: now public void functions
|
||
|
||
lib/glob/smatch.c
|
||
- DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or
|
||
wcdequote_pathname
|
||
|
||
lib/glob/sm_loop.c
|
||
- DEQUOTE_PATHNAME: appropriate extern declaration
|
||
- BRACKMATCH: call DEQUOTE_PATHNAME to dequote a character class name
|
||
in a bracket expression. This is the result of a discussion on the
|
||
austin-group mailing list, from Geoff Clare <gwc@opengroup.org> and
|
||
Robert Elz <kre@bmunnari.oz.au>
|
||
|
||
10/10
|
||
-----
|
||
execute_cmd.[ch]
|
||
- async_redirect_stdin: now a global function
|
||
|
||
subst.c
|
||
- process_substitute: call async_redirect_stdin in the child to keep
|
||
it from having stdin connected to the terminal, since it's not a
|
||
job control process
|
||
|
||
10/11
|
||
-----
|
||
subst.c
|
||
- process_substitute: in the child process, set interactive = 0, since
|
||
an asynchronous process substitution process is not interactive.
|
||
Seems to fix issue reported by Grisha Levit <grishalevit@gmail.com>
|
||
|
||
lib/sh/shmatch.c
|
||
- sh_regmatch: implement a suggestion from Grisha Levit
|
||
<grishalevit@gmail.com> and don't allow nocaseglob to enable case-
|
||
insensitive regexp matching. It hasn't been documented that way
|
||
in years
|
||
|
||
10/30
|
||
-----
|
||
bashhist.c
|
||
- bash_add_history: fix a couple of problems with adding extra blank
|
||
lines to history entries containing here-documents. Fixes bug
|
||
reported by Oguz <oguzismailuysal@gmail.com>
|
||
|
||
lib/sh/shmatch.c
|
||
- BASH_REMATCH: no longer set to readonly. From a suggestion from
|
||
Rocky Bernstein <rocky@gnu.org>
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- BASH_REMATCH: document that it's no longer set to readonly
|
||
|
||
subst.c
|
||
- getpattern: since expand_string_for_pat leaves the pattern quoted,
|
||
we need to remove quoted nulls before running the string through
|
||
string_list (and then quote_string_for_globbing, since QGLOB_CVTNULL
|
||
only handles pat[0] == CTLNUL). Fixes bug reported by Oguz
|
||
<oguzismailuysal@gmail.com>
|
||
|
||
11/4
|
||
----
|
||
configure.ac,config.h.in
|
||
- AC_HEADER_MAJOR: look for `major' and `minor' in various header files
|
||
and define MAJOR_IN_MAKEDEV or MAJOR_IN_SYSMACROS as appropriate.
|
||
From a patch from Eli Schwartz <eschwartz@archlinux.org>
|
||
|
||
examples/loadables/finfo.c
|
||
- include <sys/mkdev.h> and <sys/sysmacros.h> as appropriate for
|
||
definitions of major/minor
|
||
|
||
11/6
|
||
----
|
||
redir.c
|
||
- heredoc_expand: if we are expanding the WORD in a here-string, use
|
||
expand_assignment_string_to_string so the expansions are consistent
|
||
in contexts where word splitting is not performed. From a bug report
|
||
by Robin A. Meade <robin.a.meade@gmail.com>
|
||
|
||
11/7
|
||
----
|
||
parse.y
|
||
- xparse_dolparen: if the command substitution is incomplete or doesn't
|
||
end in `)', print an error message instead of allowing EOS to
|
||
terminate the comsub. From a bug report from
|
||
Oguz <oguzismailuysal@gmail.com>
|
||
|
||
11/11
|
||
-----
|
||
lib/sh/unicode.c
|
||
- u32toutf8: fix a typo that assigned the wrong value to the first
|
||
byte of a six-byte UTF-8 character. Report and fix from
|
||
István Pásztor <pasztorpisti@gmail.com>
|
||
|
||
11/15
|
||
-----
|
||
doc/bash.1,lib/readline/doc/{history.3,hsuser.texi}
|
||
- quick substitution: make it clear that ^s1^s2^ is equivalent to
|
||
!!:s^s1^s2^, since that's the internal transformation we perform.
|
||
Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- note that the `q' and `x' modifiers are mutually exclusive; last
|
||
one wins. Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- note that the `G' modifier can work with `&' as well as `s'.
|
||
Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- note that a word designator of `-' is equivalent to `0-'.
|
||
Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- note that a missing `new' in a substitution modifier causes
|
||
instances of `old' to be deleted
|
||
|
||
lib/readline/histexpand.c
|
||
- history_expand_internal: make multiple :p modifiers work to suppress
|
||
execution. Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- get_history_word_specifier: fix so a `^' word designator works as
|
||
the second part of a range.
|
||
Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- hist_error: make sure we don't blindly copy a null character into
|
||
the error string (e.g., if there is a missing word designator
|
||
following `:'). Reported by Jim Monte <jim.monte01@gmail.com>
|
||
- get_history_event: if the history event specifier (!) is followed
|
||
immediately by a `-' and a non-digit (e.g. !-a), make sure the - is
|
||
treated as part of a search string instead of making it an offset of
|
||
0. Reported by Jim Monte <jim.monte01@gmail.com>
|
||
|
||
11/19
|
||
-----
|
||
lib/readline/{colors,complete,histfile,input}.c,support/shobj-conf
|
||
- fixes to make readline compile on the latest HPE Nonstop (Tandem)
|
||
releases. From Randall S. Becker <rsbecker@nexbridge.com>
|
||
|
||
subst.c
|
||
- pat_subst: if we have a null match, make sure we advance by one
|
||
character, not one byte. Bug reported by Chris Carlen
|
||
<crobc@sbcglobal.net>
|
||
|
||
11/22
|
||
-----
|
||
jobs.[ch],nojobs.c,builtins/jobs.def
|
||
- get_job_by_pid: now takes a PROCESS ** third argument; if non-null,
|
||
it gets a pointer to the PROCESS struct corresponding to the PID
|
||
argument. A convenience, not used by any caller yet
|
||
|
||
builtins/wait.def
|
||
- interrupt_immediately: remove any uses, no longer used anywheren
|
||
|
||
variables.c
|
||
- check_unbind_variable: return -2 if the variable name is readonly
|
||
(change) or non-unsettable (new) to differentiate the return value
|
||
from -1 from makunbound (which means variable not found)
|
||
|
||
builtins/common.[ch]
|
||
- builtin_unbind_variable: identical to check_unbind_variable but calls
|
||
builtin_error; for use by builtin commands
|
||
|
||
buitins/wait.def
|
||
- wait_builtin: now has -p VARNAME option, which takes the pid
|
||
returned by `wait -n' or wait without arguments and assigns it to
|
||
VARNAME, unsetting VARNAME first. Requested by Robert Elz
|
||
<kre@bmunnari.oz.au> after a similar feature in netbsd sh (not
|
||
completely compatible yet)
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- wait: document new -p option
|
||
|
||
11/25
|
||
-----
|
||
lib/readline/display.c
|
||
- rl_redisplay: auto-set horizontal scrolling if the terminal has
|
||
only one line; disable it if we auto-set it if the terminal grows
|
||
to more than one line. Fix from Sören Tempel
|
||
<soeren@soeren-tempel.net>
|
||
|
||
lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
|
||
- horizontal-scroll-mode: document auto-setting behavior
|
||
|
||
builtins/set.def
|
||
- set_posix_mode: make setting posix mode when it's already set, or
|
||
unsetting it when it's not set, a no-op. Inspired by a report
|
||
from Ulrich Mueller <ulm@gentoo.org>
|
||
|
||
11/26
|
||
-----
|
||
doc/{bash.1,bashref.texi}
|
||
- functions: clarify that when in default mode, function names are not
|
||
limited to shell identifiers.
|
||
Suggested by Reuti <reuti@staff.uni-marburg.de>
|
||
|
||
11/27
|
||
-----
|
||
lib/readline/display.c
|
||
- _rl_optimize_redisplay: tell the redisplay routines to not worry
|
||
about calculating differences between the lines and just draw the
|
||
new one. Right now, it just sets the _rl_quick_redisplay flag
|
||
- rl_redisplay: if _rl_quick_redisplay is set, just draw NEW onto
|
||
the screen at column 0 with a dumb update and clear the rest of
|
||
the line. Intended to be used when the caller knows the new line is
|
||
sufficiently different from the old one (e.g., when drawing the
|
||
i-search prompt for the first time) that it doesn't pay off to do
|
||
the calculations. As a side effect, fixes the bug reported by
|
||
<20>лек<D0B5>ей Шилин <rootlexx@mail.ru>
|
||
|
||
lib/readline/isearch.c
|
||
- rl_display_search: if there isn't a search string, assume this is
|
||
the first time this is called and call _rl_optimize_redisplay to
|
||
give the redisplay code a hint
|
||
|
||
12/2
|
||
----
|
||
builtins/wait.def
|
||
- wait_builtin: allow argument to -p to be a valid array subscript
|
||
|
||
12/3
|
||
----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_fini: add call to _rl_optimize_redisplay because we are
|
||
switching the prompt back again and it's safer to redraw everything
|
||
(even though part of the line is the same) to deal with differences
|
||
in the prompt strings. Fixes additional problem reported by
|
||
<20>лек<D0B5>ей Шилин <rootlexx@mail.ru>
|
||
|
||
lib/readline/display.c
|
||
- update_line: quick redisplay no longer sets cpos_adjusted before
|
||
the dumb update
|
||
- update_line: adjust _rl_last_c_pos in the case of a dumb update if we
|
||
are redrawing the prompt that includes invisible characters, since
|
||
_rl_col_width does not. We adjust by the count of invisible chars in
|
||
the first line of the prompt
|
||
- update_line: make sure to clear the rest of the line if it looks like
|
||
the number of visible characters on the new line is less than the
|
||
number of visible characters on the current line; the old calculation
|
||
does that just for the number of bytes (which is also useful)
|
||
|
||
12/4
|
||
----
|
||
lib/readline/display.c
|
||
- rl_redisplay: if we are changing from one line to multiple lines,
|
||
don't try quick redisplay
|
||
- update_line: changes to quick redisplay to take advantage of knowing
|
||
the physical length of the prompt to avoid having to compute column
|
||
widths of the prompt string again; moved code to call clear screen
|
||
to the quick update section; no longer performs `goto dumb_update'
|
||
- update_line: try to take advantage of prompt_physical_chars when we
|
||
know we have written the prompt string (several places) to set
|
||
_rl_last_c_pos and calculate column widths
|
||
- update_line: if the spot where the old and new lines are the same is
|
||
before the end of the prompt string, adjust NLS and OLS so we write
|
||
the entire prompt string (as long as it's all on one line) and can
|
||
take advantage of already knowing prompt_physical_chars so we don't
|
||
have to compute column widths
|
||
- update_line: when copying chars from first diff to last match, adjust
|
||
_rl_last_c_pos by prompt_invis_chars_first_line, not wrap offset,
|
||
since we are on the first line, and only do this if we inserted more
|
||
bytes than wrap_offset (old code checked _rl_last_c_pos, which is
|
||
wrong in the presence of multibyte characters)
|
||
|
||
12/5
|
||
----
|
||
lib/readline/display.c
|
||
- ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos
|
||
is changed
|
||
|
||
12/12
|
||
-----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: check for multibyte characters mapped to one
|
||
of the editing functions we treat specially to modify the search
|
||
string
|
||
|
||
12/13
|
||
-----
|
||
support/shobj-conf
|
||
- FreeBSD and Dragonfly are ELF-only and can use the same code as
|
||
Linux, so add those to the linux stanza and remove the old FreeBSD
|
||
version-specific sections. Report and fix from Baptiste Daroussin
|
||
<bapt@FreeBSD.org>
|
||
|
||
bashline.[ch]
|
||
- bash_execute_unix_command: no longer static, available for other
|
||
parts of the shell to use
|
||
|
||
bashline.c
|
||
- unbind_unix_command: take a key sequence as an argument, and unbind
|
||
it in the appropriate unix command keymap
|
||
|
||
builtins/bind.def
|
||
- unbind_keyseq: if we are unbinding a key sequence bound to
|
||
bash_execute_unix_command, which means it was added by `bind -x',
|
||
call unbind_unix_command() to remove it from the appropriate unix
|
||
command keymap. Fixes issue originally raised by
|
||
Koichi Murase <myoga.murase@gmail.com> and recently by
|
||
Šimon Let <simon.a.let@gmail.com>
|
||
- bind_builtin: check the number of bindings to bash_execute_unix_command
|
||
before and after a call to rl_parse_and_bind and if there are fewer
|
||
after binding, we know that the bind has re-bound one of the key
|
||
sequences that was bound to execute a shell command. We unbind any
|
||
key sequences from the list before the call to rl_parse_and_bind that
|
||
don't appear in the list after the call using unbind_unix_command
|
||
|
||
12/19
|
||
-----
|
||
include/posixstat.h
|
||
- added some definitions for MinGW. Report and patch from
|
||
Eli Zaretskii <eliz@gnu.org>
|
||
|
||
12/20
|
||
-----
|
||
lib/readline/display.c
|
||
- update_line: when wrapping lines containing multibyte characters at
|
||
the wrap point, and the number of screen positions consumed by the
|
||
first character on the new line isn't the same as the old line,
|
||
make sure we set OE before the `goto dumb_update;' since clearing
|
||
the rest of the line may use it. Tentative fix for bug reported by
|
||
Kirill Chibisov <wchibisovkirill@gmail.com>
|
||
|
||
lib/readline/signals.c
|
||
- _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code,
|
||
like _rl_handle_signal does
|
||
|
||
12/26
|
||
-----
|
||
lib/sh/stringvec.c
|
||
- strvec_posixcmp: new function that conforms to posix requirement for
|
||
sorting globs: perform a bytewise comparison if the two strings
|
||
collate equally. Posix interp 963 and 1070
|
||
- strvec_sort: take a new flags argument, if non-zero use the posix
|
||
string comparison function
|
||
|
||
pathexp.c
|
||
- shell_glob_filename: call strvec_sort with the flag value to be
|
||
posix conformant
|
||
|
||
lib/sh/stringlist.c
|
||
- strvec_sort: change callers
|
||
|
||
12/29
|
||
-----
|
||
sig.c
|
||
- throw_to_top_level: set running_trap to 0 after calling run_trap_cleanup.
|
||
This avoids spurious (in non-release versions) warnings from
|
||
run_pending_traps the next time a trap handler for that signal
|
||
runs. Bug report from Martijn Dekker <martijn@inlv.org>
|
||
|
||
1/14/2020
|
||
---------
|
||
bashline.c
|
||
- find_cmd_start: don't treat the open brace in brace expansion as a
|
||
command start character; only treat open brace specially if it can
|
||
be a reserved word. Fixes bug reported back in October, 2019 in
|
||
https://savannah.gnu.org/support/index.php?110063
|
||
|
||
1/15
|
||
----
|
||
lib/readline/readline.c
|
||
- _rl_dispatch_subseq,_rl_subseq_result: if we push back a character
|
||
with _rl_unget_char or otherwise go back up the chain without a
|
||
sequence match, make sure we back up in rl_executing_keyseq.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
builtins/bind.def
|
||
- unbind_keyseq: if we unbind something that ends up pointing to a
|
||
shadow keymap, restore the ANYOTHERKEY binding that we used when
|
||
binding it.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
bashline.c
|
||
- bash_execute_unix_command: if we walked cmd_xmap for rl_executing_keyseq
|
||
and ended up pointing to a keymap (type == ISKMAP) we want the
|
||
binding for ANYOTHERKEY instead.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
lib/readline/bind.c
|
||
- rl_bind_key: if we're trying to bind a key sequence containing '\0'
|
||
using the old-style binding syntax (C-SPC), make sure we quote the
|
||
NULL so it will make it through rl_translate_keyseq().
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_bind_key: if we're overwriting a binding for a macro, make sure to
|
||
free the old macro value.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_generic_bind: if we're overwriting a macro saved to ANYOTHERKEY in
|
||
a shadow keymap created by rl_generic_bind, make sure to free the
|
||
macro data.
|
||
Report and fix from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
trap.c
|
||
- run_pending_traps: save and restore the value of running_trap around
|
||
cycle through pending signals so recursive trap handler calls don't
|
||
set running_trap to 0
|
||
- _run_trap_internal: allow some signals the shell treats specially
|
||
(e.g., SIGINT) to run recursive handlers
|
||
- _run_trap_internal: don't turn off SIG_INPROGRESS flag if it was on
|
||
for this signal when _run_trap_internal was called
|
||
- _run_trap_internal: save and restore the value of running_trap around
|
||
running the trap handler, except for SIGCHLD. Fixes bug reported by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
1/16
|
||
----
|
||
general.c
|
||
- posix_initialize: if turning posix mode off, restore settings from
|
||
any saved set, if one exists, instead of setting a default environment
|
||
|
||
1/17
|
||
----
|
||
parse.y,subst.c
|
||
- process_substitution: now available in POSIX mode. Most recently
|
||
requested by Martijn Dekker <martijn@inlv.org>; requested several
|
||
times in the past
|
||
|
||
doc/bashref.texi
|
||
- posix mode: remove restriction that posix mode is not available
|
||
|
||
lib/readline/vi_mode.c
|
||
- rl_domove_motion_callback: make sure to extend rl_line_buffer so it
|
||
can hold the dummy blank character we're appending. From a fuzzing
|
||
report by Tillmann Osswald <tosswald@ernw.de>
|
||
- vi_yank_dispatch: after we do an undo, make sure to fix point to be
|
||
less than the (new) rl_end
|
||
|
||
lib/readline/text.c
|
||
- rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on
|
||
invalid multibyte sequences
|
||
|
||
1/18
|
||
----
|
||
test.c
|
||
- for the `-v' operator, use a clever trick from Martijn Dekker and
|
||
just test whether N is between 0 and $#.
|
||
|
||
1/21
|
||
----
|
||
lib/readline/text.c
|
||
- rl_change_case: fix argument to rl_extend_line_buffer; make sure to
|
||
reset s and e after call in case rl_line_buffer was reallocated
|
||
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_save_replace: if start ends up being less than zero, make
|
||
sure we don't read before the start of rl_line_buffer
|
||
- rl_vi_overstrike_kill_line,rl_vi_overstrike_kill_word: replacement
|
||
functions for ^U and ^W in vi overstrike mode, to keep right value
|
||
for vi_replace_count.
|
||
- rl_vi_overstrike_yank: similar for ^Y and rl_yank
|
||
|
||
1/22
|
||
----
|
||
lib/readline/display.c
|
||
- update_line: if we're trying to wrap lines on an autowrap terminal,
|
||
punt and do a dumb update if the number of bytes in the first char
|
||
on the new line is greater than the number of bytes in the first char
|
||
of the old line. There's no guarantee we'll be able to extend the
|
||
old line buffer enough to accommodate the new bytes
|
||
- update_line: try to avoid some operations when wrapping lines if the
|
||
number of bytes in the first characters of the old and new lines is
|
||
the same
|
||
- update_line: when updating vis_lbreaks after fixing up the lines when
|
||
wrapping, make sure we don't exceed an index of _rl_vis_botlin when
|
||
updating the line break offsets
|
||
|
||
lib/readline/text.c
|
||
- rl_delete_text: if deleting text leaves the mark past rl_end, adjust
|
||
it to rl_end
|
||
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_goto_mark: make sure to call _rl_fix_point after setting
|
||
rl_point to rl_mark
|
||
|
||
1/23
|
||
----
|
||
lib/readline/kill.c
|
||
- rl_kill_region,region_kill_internal: call _rl_fix_point
|
||
|
||
lib/readline/text.c,lib/readline/rlprivate.h
|
||
- _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end
|
||
|
||
1/24
|
||
----
|
||
lib/readline/bind.c
|
||
- rl_translate_keyseq: rework how key sequences are translated with
|
||
the intent of normalizing backslash treatment. Since the current
|
||
behavior of, e.g., \C-\\, is inconsistent, this change chooses to
|
||
effectively treat and display \\ as \\ instead of \C-\. This is not
|
||
completely backwards compatible, but it seems like the most reasonable
|
||
choice. This allows things like \M-\a but is not compatible with
|
||
pre-bash-4.4 (readline 7.0) handling of \C-\, which is now treated
|
||
like \C-\0. If that proves to be a problem, we can add code to
|
||
understand \C-\ as equivalent to \C-\\. Since attempting to bind
|
||
"\C-\" has generated an error for a long time, it doesn't seem like
|
||
it will be too much of a problem.
|
||
Fixes from Koichi Murase <myoga.murase@gmail.com>
|
||
- rl_invoking_keyseqs_in_map: make sure to consistently output
|
||
backslash as `\\' instead of producing `\C-\'
|
||
Fixes from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
1/29
|
||
----
|
||
bashline.c
|
||
- readline_get_char_offset: translate a readline buffer offset
|
||
(rl_point, rl_mark, rl_end) into a number of (possibly multibyte)
|
||
characters
|
||
- readline_set_char_offset: translate a number of (possibly multibyte)
|
||
characters into a buffer offset in rl_line_buffer. Uses a private
|
||
readline function to do it, which is bad
|
||
- bash_execute_unix_command: use readline_{get,set}_char_offset to
|
||
translate the rl_point to a character offset
|
||
- bash_execute_unix_command: bind READLINE_MARK variable, exposing
|
||
the value of rl_mark to `bind -x' functions
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- READLINE_MARK: document new variable set by the shell
|
||
|
||
1/31
|
||
----
|
||
examples/loadables/accept.c
|
||
- accept: new loadable builtin that will accept a TCP connection on a
|
||
specified port. Inspired by Stan Marsh <gazelle@xmission.com>
|
||
|
||
2/1
|
||
---
|
||
lib/readline/histfile.c
|
||
- history_do_write,history_truncate_file: translate the return value rv
|
||
to errno when histfile_restore returns -1 (e.g., if rename() fails).
|
||
Report and fix from A <auroralanes@protonmail.ch>
|
||
|
||
2/3
|
||
---
|
||
lib/sh/ufuncs.c
|
||
- fsleep: if pselect/select is interrupted by a signal, return -1 and
|
||
let the caller deal with it
|
||
|
||
lib/sh/timeval.c
|
||
- multimeval: new function, multiply a timeval by a constant integer
|
||
- divtimeval: new function, divide a timeval by a constant integer
|
||
|
||
lib/sh/uconvert.c
|
||
- uconvert: new additional argument: EP. If non-null, it gets the
|
||
address of the first non-digit that ends conversion (like strtod);
|
||
we try to do as much of the conversion as possible if EP is set so
|
||
the caller can clean up
|
||
|
||
2/4
|
||
---
|
||
examples/loadables/mkfifo.c
|
||
- mkfifo: new loadable builtin
|
||
|
||
2/6
|
||
---
|
||
variables.c
|
||
- make_local_variable: make sure local variables that have the same
|
||
names as variables found in the temporary environment are marked as
|
||
local. From Grisha Levit <grishalevit@gmail.com> back in 12/2018
|
||
|
||
2/7
|
||
---
|
||
sig.[ch]
|
||
- restore_sigmask: function to restore top-level signal mask using
|
||
sigprocmask
|
||
|
||
{sig,eval,jobs,nojobs}.c
|
||
- replace calls to sigprocmask with restore_sigmask(); remove extern
|
||
declarations of top_level_mask
|
||
|
||
sig.c
|
||
- initialize_shell_signals: if SIGCHLD is blocked at shell startup,
|
||
not only remove it from top_level_mask but make sure it's unblocked
|
||
|
||
execute_cmd.c
|
||
- execute_pipeline: if lastpipe is enabled and we're executing the
|
||
rightmost pipeline element in the current shell, make sure to unblock
|
||
SIGCHLD before calling execute_command, in case `return' or `exec'
|
||
is run and that call doesn't return. From a report by
|
||
Harald van Dijk <harald@gigawatt.nl> following up to a report
|
||
by Martijn Dekker <martijn@inlv.org>
|
||
|
||
2/10
|
||
----
|
||
builtins/trap.def
|
||
- trap_builtin: in posix mode, when trap is run with -p, show
|
||
the disposition of all signals, even those that are still in the
|
||
default state, including signals that were ignored when the shell
|
||
starts up and haven't been reset. Don't do it in default mode.
|
||
From an austin-group discussion back in April, 2019 (interp 1211)
|
||
|
||
findcmd.c
|
||
- search_for_command: don't add commands without the execute bit set
|
||
to the command hash table. From https://savannah.gnu.org/patch/?9789
|
||
contributed by michaeljs1990
|
||
|
||
2/11
|
||
----
|
||
expr.c
|
||
- strlong: require `base#' to be followed by an integer constant;
|
||
otherwise throw an error. From a report from Jeremy Townshend
|
||
<jeremy.townshend@gmail.com> back in June, 2019
|
||
|
||
test.c
|
||
- unary_test: allow -v N to test whether or not positional parameter
|
||
N is set. Most recently suggested by Peng Yu <pengyu.ut@gmail.com>
|
||
and Martijn Dekker <martijn@inlv.org>
|
||
|
||
builtins/getopts.def
|
||
- dogetopts: use number_of_args() to compute the number of positional
|
||
parameters
|
||
|
||
{findcmd,variables,subst,trap,sig}.h,builtins/common.h
|
||
- __P --> PARAMS
|
||
|
||
builtins/shift.def,builtins/common.c
|
||
- shift_builtin: moved code that modifies dollar_vars and rest_of_args
|
||
to common.c:shift_args(int times), part of move to localize changes
|
||
to positional parameters
|
||
|
||
builtins/common.c,variables.c
|
||
- posparam_count: keep a running count of the number of posititional
|
||
parameters when dollar_vars and rest_of_args are set
|
||
|
||
2/12
|
||
----
|
||
subst.c
|
||
- number_of_args: just return posparam_count
|
||
|
||
builtins/shift.def
|
||
- shift_builtin: if asked to clear the positional parameters with
|
||
something like `shift $#', just call clear_dollar_vars instead of
|
||
iterating through them, unsetting them one by one
|
||
|
||
subst.[ch],builtins/common.[ch]
|
||
- number_of_args: moved to builtins/common.c
|
||
|
||
2/14
|
||
----
|
||
subst.c
|
||
- clear_fifo_list: when using named pipes, clear out the FIFO list
|
||
without unlinking anything and set NFIFO to 0
|
||
|
||
execute_cmd.c
|
||
- execute_disk_command: in the child, clear out the FIFO list, since
|
||
we haven't created any FIFOs yet
|
||
- execute_in_subshell: clear out the FIFO list, since we haven't
|
||
created any FIFOs yet
|
||
|
||
parse.y
|
||
- special_case_tokens: allow `time -- command'
|
||
|
||
2/21
|
||
----
|
||
subst.c
|
||
- get_var_and_type: if an unset variable (not an array) is supplied
|
||
with the `[@]' subscript, don't return "". Fix to bug reported by
|
||
Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>;
|
||
original bug introduced 7/29/2018
|
||
- array_transform: take a STARSUB argument instead of VARNAME, since
|
||
we've already computed what kind of index the array reference uses
|
||
in get_var_and_type, and passing VARNAME to figure out the index
|
||
type doesn't do the right thing when we're using indirect variable
|
||
expansion. Fixes bug reported by
|
||
Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
|
||
- array_remove_pattern: take the same new STARSUB argument for the
|
||
same reason
|
||
- parameter_brace_transform,parameter_brace_remove_pattern: change
|
||
callers to pass STARSUB instead of VARNAME
|
||
|
||
2/22
|
||
----
|
||
execute_cmd.c
|
||
- fix_assignment_words: if an assignment is supplied to a builtin that
|
||
creates or modifies local variables while a function is executing,
|
||
set the W_FORCELOCAL flag for that word in addition to any of the
|
||
various assignment flags
|
||
|
||
subst.c
|
||
- shell_expand_word_list: while processing a list of assignments that
|
||
are arguments to a builtin that creates or modifies local variables,
|
||
if make_internal_declare fails while attempting to create the local
|
||
variable (or give it attributes), skip attempting the assignment but
|
||
otherwise do not make this a fatal error. This results in two error
|
||
messages: one to create the variable or modify its attributes, and
|
||
one while attempting to assign the value, but the errors to not
|
||
cause the function to return immediately. Fixes inconsistency
|
||
reported by Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
|
||
|
||
|
||
2/23
|
||
----
|
||
trap.c
|
||
- first_pending_trap: generalize into first_pending_trap and
|
||
next_pending_trap
|
||
|
||
wait.def
|
||
- wait_builtin: close up the trapped-signal-arrives hole a little more
|
||
by looking for a signal that arrived between the last check for
|
||
pending traps and setting wait_intr_flag and behaving as if it
|
||
arrived while wait was executing. Use first_pending_trap and
|
||
next_pending_trap to find a pending trap that is not SIGCHLD
|
||
|
||
trap.c
|
||
- trap_handler: longjmp to wait_intr_buf unconditionally if
|
||
wait_intr_flag is set; don't bother with interrupt_immediately any
|
||
more
|
||
|
||
variables.c
|
||
- all_local_variables: now takes an arg saying whether to restrict
|
||
return value to visible variables or return all local variables,
|
||
even those that are unset (the new default)
|
||
- visible_variable_in_context: new function, restricts return values
|
||
to set local variables in the current context; variable_in_context
|
||
now returns all local variables in the current context, even the
|
||
unset ones
|
||
|
||
variables.h
|
||
- all_local_variables: change extern function declaration
|
||
|
||
builtins/setattr.def
|
||
- show_local_var_attributes: show all local variables at the current
|
||
variable context, including unset ones, and their attributes
|
||
- show_localname_attributes: show attributes for NAME as long as NAME
|
||
resolves to a local variable at the current variable context, even
|
||
if NAME is unset
|
||
|
||
builtins/common.h
|
||
- show_local_var_attributes, show_localname_attributes: new extern
|
||
declarations
|
||
|
||
builtins/declare.def
|
||
- declare_internal: allow `-p' option for `local' builtin
|
||
- declare_internal: if `local' is supplied without options, or with
|
||
the `-p' option, but no variable name arguments, display all local
|
||
variables at the current variable context by calling
|
||
show_local_var_attributes
|
||
- declare_internal: if `local -p' is supplied with variable name
|
||
arguments, call show_localname_attributes to display the attributes
|
||
for that name if it resolves to a local variable at the current
|
||
variable context. Fixes issue reported by
|
||
pepa65 <solusos@passchier.net>
|
||
|
||
subst.c
|
||
- array_var_assignment: if VAR is unset, print the declare command
|
||
without the assignment statement, just with the attributes
|
||
- array_transform: special-case the 'a' attribute and return the
|
||
attribute string even if the array variable is unset. Feature request
|
||
from Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
|
||
- parameter_brace_transform: if asked to display the attributes and
|
||
value ('A') of an unset variable, make sure we pass the variable, if
|
||
it exists with attributes but without a value, to string_transform
|
||
- string_transform: if we don't have a value but the operator is 'A',
|
||
pass the variable through to string_var_assignment
|
||
- string_var_assignment: if we have an unset variable with attributes,
|
||
return a declare command that just sets the attributes. Feature request
|
||
from Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
|
||
|
||
2/24
|
||
----
|
||
locale.c
|
||
- mblen: don't try to use unless HANDLE_MULITBYTE is defined. From
|
||
https://savannah.gnu.org/support/?110200
|
||
- set_default_locale: if HAVE_SETLOCALE isn't defined, set the default
|
||
locale to "C"
|
||
|
||
2/25
|
||
----
|
||
general.c
|
||
- interrupt_immediately: remove all references to this that are
|
||
already commented out
|
||
|
||
3/2
|
||
---
|
||
variables.c
|
||
- push_var_context,push_posix_tempvar_internal: assignment statements
|
||
preceding shell functions no longer persist after the function
|
||
completes in posix mode. POSIX interp #654, was in P1003.1-2017
|
||
- push_posix_temp_var: variable assignments preceding special builtins
|
||
now act as if an assignment statement had been executed in posix mode
|
||
(the Posix `current execution environment') instead of unconditionally
|
||
creating a global variable
|
||
|
||
trap.c
|
||
- clear_pending_traps: new function, just clears the pending traps flag
|
||
for all signals
|
||
|
||
3/6
|
||
---
|
||
execute_cmd.c
|
||
- execute_in_subshell: check for interrupts and terminating signals
|
||
before resetting the terminating signal handlers, and clear all
|
||
pending traps -- they're not pending for us and we should not run a
|
||
trap handler for them
|
||
- execute_in_subshell: enable bash-5.1 change from 11/29/2018 that
|
||
resets the signal-in-progress flag if we're running a command in
|
||
a subshell, since we're not running the trap command (we are the
|
||
trap command)
|
||
|
||
3/10
|
||
----
|
||
subst.c
|
||
- parameter_brace_expand: if we assign the empty string to a variable
|
||
using the [:]= expansion in a quoted expansion, make sure we note
|
||
we are returning a quoted null string to the caller by setting
|
||
W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo
|
||
<castilma@uni-bremen.de>
|
||
|
||
3/17
|
||
----
|
||
lib/readline/histfile.c
|
||
- history_truncate_file: only chown the file if we really need to. From
|
||
alex@lisas.de via https://savannah.gnu.org/support/?110207
|
||
|
||
lib/readline/bind.c
|
||
- rl_unbind_function_in_map: since we are looking for functions, not
|
||
key sequences, descend into keymaps attached to the keymap passed
|
||
as an argument. From a report from lockywolf@gmail.com back on 2/27,
|
||
TENTATIVE CHANGE
|
||
|
||
variables.h
|
||
- MKLOC_ARRAYOK,MKLOC_ASSOCOK: new flags values for
|
||
make_local_{array,assoc}_variable so we can avoid hard-coded values
|
||
of 1 and make it possible to eventually pass in additional flags
|
||
|
||
builtins/declare.def
|
||
- declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK
|
||
- declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK
|
||
|
||
variables.c
|
||
- make_local_{array,assoc}_variable: understand new flags, pass
|
||
MKLOC_INHERIT to make_local_variable if it appears in the flags
|
||
argument
|
||
|
||
builtins/declare.def
|
||
- declare_internal: add a new -I option for local and declare that
|
||
inherits attributes and value from a variable with the same name
|
||
at a previous scope. Inspired by netbsd sh
|
||
- if -I option is supplied, pass MKLOC_INHERIT to make_local_variable
|
||
and its array counterparts make_local_{array,assoc}_variable
|
||
|
||
subst.c
|
||
- shell_expand_word_list: pass -I to declare if constructing a declare
|
||
command with make_local_declare, meaning we have an array or assoc
|
||
compound assignment. (Slighty unsatisfactory, but ok for now) Fix
|
||
for bug report from Kevin Locke <kevin@kevinlocke.name>,
|
||
https://savannah.gnu.org/support/index.php?109669
|
||
|
||
3/18
|
||
----
|
||
examples/loadables/basename.c
|
||
- basename_builtin: handle -- option without crashing. Report by Peng Yu
|
||
<pengyu.ut@gmail.com>
|
||
|
||
jobs.c
|
||
- notify_of_job_status: if in posix-mode shell is started with -c,
|
||
jobs should print the status of completed jobs. From a report by
|
||
Robert Elz <kre@munnari.oz.au> back in 12/18
|
||
|
||
3/19
|
||
----
|
||
variables.c
|
||
- assign_in_env: if we're assigning POSIXLY_CORRECT or POSIX_PEDANTIC
|
||
in the temporary environment, save the values of the options
|
||
affected by posix mode so we can restore them when we restore the
|
||
old value of the variable after the command executes. Suggested by
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
3/20
|
||
----
|
||
syntax.h
|
||
- slashify_in_here_document: add `"' to this list, since POSIX says
|
||
that backslashes in here documents behave like backslashes in
|
||
double quotes, and backslash can quote a double quote in a double-
|
||
quoted string. This means that given P=A,
|
||
|
||
cat <<EOF
|
||
${P+\"$P\"}
|
||
EOF
|
||
|
||
and
|
||
|
||
echo "${P+\"$P\"}"
|
||
|
||
should output the same thing. From a report from Dan Jacobson
|
||
<jidanni@jidanni.org> back in 1/2019.
|
||
|
||
3/23
|
||
----
|
||
subst.c
|
||
- string_transform: add `U' (convert to uppercase), `u' (convert
|
||
first character to uppercase), and `L' (convert to lowercase)
|
||
transformations. Inspired by a discussion with Phil Smith
|
||
<phil@philsmith.com> back in May, 2019
|
||
- parameter_brace_transform: make sure `u', `U', and `L' are valid
|
||
transform operators
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- parameter transformation: document new `U', `u', and `L' operators
|
||
|
||
eval.c
|
||
- execute_prompt_command: if an array variable PROMPT_COMMANDS exists,
|
||
prefer it to PROMPT_COMMAND and execute all of the commands contained
|
||
as array elements in index order. From a proposal by Daniel
|
||
Colascione <dancol@google.com> back in 1/2018
|
||
- execute_array_command: function for array_walk to use when executing
|
||
commands in PROMPT_COMMANDS
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- PROMPT_COMMANDS: new array variable
|
||
|
||
3/24
|
||
----
|
||
builtins/ulimit.def
|
||
- new -R option, for RLIMIT_RTTIME (max time a real-time process can
|
||
run without blocking). Patch from Maciej Wolny
|
||
<maciekwolny123@gmail.com> back in 7/2017
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- ulimit: document new -R option
|
||
|
||
lib/readline/{display.c,rlprivate.h}
|
||
- _rl_clear_screen: now takes an argument saying whether to attempt to
|
||
clear the terminal scrollback buffer if the right termcap capability
|
||
exists
|
||
|
||
lib/readline/{text.c,readline.h}
|
||
- rl_clear_display: new bindable command that clears the screen and
|
||
scrollback buffer
|
||
|
||
lib/readline/funmap.c
|
||
- clear-display: new bindable command name
|
||
|
||
lib/readline/emacs_keymap.c
|
||
- emacs mode M-C-l now bound to clear-display
|
||
|
||
doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
|
||
- clear-display: document new function and default emacs mode binding
|
||
|
||
arrayfunc.c
|
||
- assign_assoc_from_kvlist: allow compound assignments to associative
|
||
arrays that do not contain words of the form `[key]=value', assume
|
||
such lists are of the form (key1 value1 key2 value2). A missing or
|
||
empty key is an error; a missing value is treated as NULL. You
|
||
cannot mix the two forms. Inspired by a suggestion from Sebastian
|
||
Gniazdowski <sgniazdowski@gmail.com> back in 7/2019
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- documented new associative array assignment syntax
|
||
|
||
assoc.[ch]
|
||
- assoc_to_kvpair: new function that returns a string with quoted
|
||
key/value pairs from given associative array
|
||
|
||
array.[ch]
|
||
- array_to_kvpair: new function that returns a string with quoted
|
||
key/value pairs from given indexed array (for completeness)
|
||
|
||
subst.c
|
||
- parameter_brace_transform: new operator `K': produces the (possibly
|
||
quoted) value of a variable, except for arrays, where it expands to
|
||
indexed or associative array assignments in key/value pair form
|
||
- string_transform,parameter_list_transform: expand `K' to (possibly
|
||
quoted) values
|
||
- array_var_assignment: take a new fourth argument saying which kind
|
||
of assoc assignment statement to produce; calls array_to_kvpair or
|
||
assoc_to_kvpair as appropriate and just returns that value if
|
||
necessary without creating a declare command
|
||
- array_transform: if the operator is `K', call array_var_assignment
|
||
with new argument that will produce a list of key/value pairs
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- document new 'K' parameter transformation operator
|
||
|
||
3/25
|
||
----
|
||
doc/bash.1,lib/readline/doc/{history.3,readline.3}
|
||
- some text and formatting cleanups from Bjarni Ingi Gislason
|
||
<bjarniig@rhi.hi.is>
|
||
|
||
bashhist.c
|
||
- SYSLOG_MAXLEN: increase to 1024, since that seems to be what most
|
||
syslog daemons handle
|
||
- bash_syslog_history: if the line is longer than SYSLOG_MAXLEN minus
|
||
the header length, log it in multiple message with a sequence number
|
||
instead of truncating. Inspired by a report from
|
||
<sunhuilin@unionpay.com> back in 7/2018
|
||
|
||
lib/readline/text.c
|
||
- rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p,
|
||
rl_keep_mark_active: new functions to manage an active region. We
|
||
don't do anything with an active region yet. Part of a large patch
|
||
for active regions from Daniel Colascione <dancol@google.com>
|
||
originally back in 3/2018
|
||
- rl_clear_screen: call rl_keep_mark_active to keep the region active
|
||
across the screen refresh
|
||
- rl_newline: make sure to deactivate the region even though we don't
|
||
do any redisplay with it yet
|
||
|
||
lib/readline/readline.h
|
||
- rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p,
|
||
rl_keep_mark_active: new extern function declarations. They are
|
||
public functions for now
|
||
|
||
lib/readline/readline.c
|
||
- readline_internal_setup: make sure the region starts out as not
|
||
active
|
||
- readline_internal_charloop: make sure to deactivate the mark after
|
||
a command, unless the command calls rl_keep_mark_active keep it
|
||
active
|
||
|
||
lib/readline/kill.c
|
||
- rl_bracketed_paste_begin: set rl_mark before inserting the pasted
|
||
text, so the pasted text defines the region
|
||
- rl_bracketed_paste_begin: set the region as active after inserting
|
||
the pasted text
|
||
|
||
lib/readline/util.c
|
||
- _rl_abort_internal: make sure we deactivate the region
|
||
|
||
lib/readline/{terminal.c,rlprivate.h}
|
||
- _rl_cr: new function to just output the term_cr (or '\r'). Part of
|
||
the active region patch
|
||
|
||
lib/readline/display.c
|
||
- _rl_cr: use where appropriate to replace MSDOS-dependent code and
|
||
calls to tputs
|
||
|
||
lib/readline/terminal.c
|
||
- get and store the terminal sequences to enter and exit standout
|
||
(usually some background color) mode
|
||
|
||
3/26
|
||
----
|
||
subst.[ch]
|
||
- copy_fifo_list: now returns void *
|
||
- close_new_fifos: now takes a void * as the first argument, since it's
|
||
usually the return value from copy_fifo_list
|
||
- close_new_fifos: (named pipes): cast first argument to a char *,
|
||
since copy_fifo_list will (someday) return a bitmap
|
||
- close_new_fifos: (HAVE_DEV_FD): cast first argument to a pid_t *,
|
||
since it takes a copy of dev_fd_list; use that in the loop to
|
||
determine whether or not to close file descriptors. First half of
|
||
fix for bug reported by Valentin Lab <valentin.lab@kalysto.org>
|
||
- unlink_fifo_list: (named pipes): when compacting the list, make sure
|
||
to avoid the copy if i == j, and, after copying fifo_list[i] to
|
||
fifo_list[j], null out fifo_list[i] so we don't try to access it
|
||
later
|
||
|
||
execute_cmd.c
|
||
- execute_command_internal: don't call reap_procsubs after executing
|
||
the command. Rest of fix for bug reported by Valentin Lab
|
||
<valentin.lab@kalysto.org>
|
||
- execute_command_internal,execute_builtin_or_function: ofifo_list is
|
||
now a void * instead of a char *
|
||
|
||
3/30
|
||
----
|
||
lib/readline/{terminal.c,rlprivate.h}
|
||
- _rl_standout_{on,off}: new functions, to enter and exit terminal
|
||
standout mode
|
||
|
||
lib/readline/rlprivate.h
|
||
- _rl_refresh_line: new extern declaration
|
||
|
||
lib/readline/display.c
|
||
- visible and invisible lines: added members to deal with tracking the
|
||
`current face'
|
||
- realloc_line: broke code to manage visible_line and invisible_line
|
||
allocation out of init_line_structures, added code to manage arrays
|
||
of visible and invisible line face info per character
|
||
- invis_{addc,adds,nul}: new functions to add characters to the
|
||
invisible line and keep the invisible face data updated with whatever
|
||
the current face is
|
||
- set_active_region: keep track of the display region that should be
|
||
in standout mode
|
||
- rl_redisplay: use invis_addc/adds/nul to update the invisible line
|
||
buffer instead of modifying invisible_line directly
|
||
- _rl_refresh_line: moved body of function here from text.c
|
||
|
||
lib/readline/text.c
|
||
- rl_refresh_line: now just calls _rl_refresh_line and marks the display
|
||
as fixed
|
||
|
||
3/31
|
||
----
|
||
variables.c
|
||
- bind_variable_internal: dynamic variables with assignment functions
|
||
now honor the readonly attribute by giving an error. Fixes issue
|
||
reported by Rob Landley <rob@landley.net>
|
||
- assign_seconds: allow seconds to be assigned using an arithmetic
|
||
expression
|
||
- assign_random: allow RANDOM to be assigned using an arithmetic
|
||
expression
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- HISTCMD: note that assignments to HISTCMD have no effect
|
||
|
||
4/2
|
||
---
|
||
execute_cmd.c
|
||
- execute_in_subshell: make sure we note that we're not reading our
|
||
command input from a buffered stream any more, so we don't
|
||
sync the buffered stream backwards in subsequent commands this
|
||
subshell runs. Fixes bug reported by O<>uz <oguzismailuysal@gmail.com>
|
||
|
||
4/3
|
||
---
|
||
builtins/read.def
|
||
- read_builtin: if a read in posix mode is interrupted by a signal,
|
||
make sure to preserve the value of errno around calls to
|
||
check_signals and run_pending_traps so any error message isn't quite
|
||
as confusing. Issue reported by Stan Marsh <gazelle@xmission.com>
|
||
|
||
lib/sh/zread.c
|
||
- zread: preserve value of errno (always EINTR) around calls to
|
||
check_signals or check_signals_and_traps
|
||
|
||
trap.c
|
||
- run_debug_trap: allow suppress_debug_trap_verbose being set to
|
||
turn off `set -v' temporarily while executing the DEBUG trap (if
|
||
it's set)
|
||
|
||
builtins/fc.def
|
||
- set suppress_debug_trap_verbose so set -v won't be in effect while
|
||
the DEBUG trap runs. Most recently reported by Ami Fischman
|
||
<ami@fischman.org>; originally raised by Boruch Baum
|
||
<boruch_baum@gmx.com> back in 10/2017
|
||
|
||
4/6
|
||
---
|
||
lib/readline/display.c
|
||
- puts_face,putc_face: new functions to write strings or characters to
|
||
the display while handling standout mode
|
||
- update_line,_rl_move_cursor_relative: take additional argument(s)
|
||
describing the visible and invisible faces corresponding to the
|
||
visible and invisible lines, respectively
|
||
|
||
lib/readline/readline.c
|
||
- _rl_enable_bracketed_paste: for the time being, initialize to 1 (on
|
||
by default)
|
||
|
||
trap.c
|
||
- run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0
|
||
since run_pending_trap usually does these things
|
||
|
||
sig.c
|
||
- throw_to_top_level: only call the SIGINT trap if there is a SIGINT
|
||
trap pending (shouldn't matter, just a check)
|
||
|
||
bashline.c
|
||
- bash_event_hook: try to identify the signal of interest we've
|
||
received
|
||
- bash_event_hook: if in posix mode running the read builtin, and we
|
||
get a (trappped) SIGINT, throw to top level so we can interrupt
|
||
the read. From a report by Robert Elz <kre@munnari.oz.au>
|
||
|
||
4/7
|
||
---
|
||
lib/readline/display.c
|
||
- update_line: make sure to update and compare face data at the same
|
||
time as comparing old and new line data: the lines are only the same
|
||
if the face information and character information are identical
|
||
(ofd, ols, etc.)
|
||
- update_line: make sure to copy face data along with line data
|
||
- update_line: use puts_face in place of _rl_output_some_chars to
|
||
output face data along with line data
|
||
- _rl_move_cursor_relative: when we write characters, make sure to take
|
||
the face data into account using puts_face
|
||
[END OF INTEGRATION OF ACTIVE MARK AND FACE PATCHES from
|
||
Daniel Colascione <dancol@google.com>]
|
||
|
||
{jobs,nojobs}.c
|
||
- make_child: to avoid installing a handler for SIGTERM in interactive
|
||
shells, and avoid race conditions with child processes resetting the
|
||
SIGTERM signal handler to the default, block SIGTERM and then
|
||
reset the SIGTERM handler to SIG_DFL before fork, then reset the
|
||
handler to SIG_IGN and unblock it in the parent after fork() returns.
|
||
Fix for readline and SIGTERM handling reported by Chris Down
|
||
<chris@chrisdown.name> (original change was back in 2/2013) that
|
||
allows a bash waiting in readline() for input to be killed with a
|
||
SIGTERM sent by another process
|
||
- take out calls to RESET_SIGTERM, no longer needed
|
||
|
||
execute_cmd.c
|
||
- execute_in_subshell,execute_simple_command,execute_disk_command:
|
||
remove calls to CHECK_SIGTERM, since we don't install a handler
|
||
any more
|
||
|
||
lib/readline/readline.c
|
||
- _rl_enable_bracketed_paste: enabled by default for the time being
|
||
|
||
4/9
|
||
---
|
||
jobs.h
|
||
- JWAIT_WAITING: new flag for wait functions; means only wait for jobs
|
||
with the J_WAITING flag set
|
||
- J_WAITING: new job flag, part of arg list to `wait -n'
|
||
- IS_WAITING(i): job i has the J_WAITING flag set
|
||
|
||
jobs.c
|
||
- wait_for_any_job: if the flags includes JWAIT_WAITING, we only return
|
||
jobs with the J_WAITING flag already set; otherwise we skip them.
|
||
For `wait -n args' support
|
||
|
||
builtins/wait.def
|
||
- set_waitlist: take a list of jobspecs and set the J_WAITING flag in
|
||
each valid job from the list
|
||
- unset_waitlist: turn off the J_WAITING flag for all jobs where it's
|
||
set
|
||
- wait_builtin: if -n is supplied with a list of arguments, set the
|
||
J_WAITING flag in each job in the list, call wait_for_any_job with
|
||
the JWAIT_WAITING flag, and clean up by calling unset_waitlist().
|
||
From a suggestion from Robert Elz <kre@munnari.oz.au> back in 3/2019
|
||
(originally in 10/2017)
|
||
|
||
4/11
|
||
----
|
||
lib/readline/display.c
|
||
- update_line: in step 5b of the line wrapping prompt code, make sure
|
||
OFDF and NFDF are set before performing a dumb update
|
||
|
||
4/12
|
||
----
|
||
sig.c
|
||
- termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before
|
||
resending a terminating signal to ourselves, in the event that this
|
||
is called in a signal handler context with the terminating signal
|
||
blocked. Inspired by a report from <gentoo_eshoes@tutanota.com>
|
||
|
||
4/13
|
||
----
|
||
|
||
lib/readline/text.c
|
||
- rl_newline: if the region is active, call rl_redisplay to clear
|
||
standout mode before returning
|
||
|
||
lib/readline/display.c
|
||
- norm_face: new function to mark a portion of the invisible face
|
||
buffer as normal text (no standout)
|
||
- rl_redisplay: if the line consumes more than a screen's worth of
|
||
lines, mark the lines that are off the top of the display as having
|
||
a `normal' face
|
||
|
||
4/14
|
||
----
|
||
variables.c
|
||
- LINENO: no longer has the integer attribute, since it does not take
|
||
arithmetic expressions on assignment (use $((expr)) instead)
|
||
|
||
lib/readline/mbutil.c
|
||
- _rl_find_prev_utf8char: new function, uses the structure of UTF-8
|
||
characters to find the start of the previous one no matter where we
|
||
start: at the beginning of the next character, at the end of a
|
||
multibyte character, or in the middle of a multibyte character.
|
||
EXPERIMENTAL
|
||
- _rl_find_prev_mbchar_internal: for now, call _rl_find_prev_utf8char
|
||
if we are in a UTF-8 locale. EXPERIMENTAL
|
||
|
||
4/15
|
||
----
|
||
lib/readline/mbutil.c
|
||
- _rl_utf8_mblen: changes to handle invalid multibyte sequences better,
|
||
even when N means that the sequence would be too short anyway
|
||
|
||
examples/loadables/csv.c
|
||
- csv: new loadable builtin to parse a line of csv data and store it
|
||
into an array supplied as an argument
|
||
|
||
4/16
|
||
----
|
||
examples/loadables/cut.c
|
||
- cut: new loadable builtin
|
||
- lcut: new builtin that does what cut does but on a string supplied
|
||
as an argument (only one string for now)
|
||
|
||
4/17
|
||
----
|
||
jobs.h
|
||
- FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second
|
||
argument to make_child
|
||
|
||
jobs.c
|
||
- make_child: now takes a set of flags as the second argument
|
||
|
||
execute_cmd.c
|
||
- make_child: change callers to pass FORK_ASYNC instead of a non-zero
|
||
value as the second argument
|
||
|
||
subst.c
|
||
- make_child: change callers to pass FORK_ASYNC instead of a non-zero
|
||
value as the second argument
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- document that the words in a compound array assignment undergo all
|
||
the shell word expansions, including filename generation and word
|
||
splitting. From a report from E. Choroba <choroba@matfyz.cz>
|
||
|
||
4/18
|
||
----
|
||
subst.c
|
||
- command_substitute: use JOB_CONTROL instead of INTERACTIVE in the
|
||
test to determine whether or not to give the terminal back to
|
||
pipeline_pgrp
|
||
|
||
jobs.c
|
||
- make_child: if FORK_NOTERM is set in the flags argument, don't call
|
||
give_terminal_to
|
||
|
||
{jobs,nojobs}.c,jobs.h
|
||
- wait_for: now takes a second argument, a flags word
|
||
|
||
{execute_cmd,subst}.c
|
||
- wait_for: change all callers to add second argument to wait_for
|
||
|
||
jobs.c
|
||
- wait_for: if JWAIT_NOTERM is set in the flags argument, don't call
|
||
give_terminal_to
|
||
|
||
4/19
|
||
----
|
||
subst.c
|
||
- command_substitute: block SIGINT around call to read_comsub, so we
|
||
let any interrupts affect the command substitution. Fixes issue
|
||
reported by DALECKI Léo <leo.dalecki@ntymail.com>
|
||
|
||
hashcmd.h
|
||
- FILENAME_HASH_BUCKETS: increase to 256
|
||
|
||
assoc.h
|
||
- ASSOC_HASH_BUCKETS: new define, set to 1024
|
||
|
||
variables.c
|
||
- make_new_assoc_variable,make_local_assoc_variable: call assoc_create
|
||
with ASSOC_HASH_BUCKETS as argument. This changes the hash function
|
||
and how the array keys are ordered (which is not guaranteed)
|
||
|
||
builtins/read.def
|
||
- read_builtin: in posix mode, or if the read call returns -1/EINTR,
|
||
don't call run_pending_traps until the read command returns. This
|
||
allows a trap action to see the same exit status that the read
|
||
builtin would return when it exits on a signal (e.g., SIGINT == 130).
|
||
From a suggestion by <gentoo_eshoes@tutanota.com>
|
||
|
||
4/20
|
||
----
|
||
hashlib.c
|
||
- hash_rehash: function to rehash a table, after increasing or decreasing
|
||
the number of buckets. From patches from Thomas Kremer
|
||
(https://savannah.gnu.org/patch/?9850) and Koichi Murase
|
||
<myoga.murase@gmail.com>
|
||
- hash_grow,hash_shrink: grow or shrink a hash table by a factor of
|
||
HASH_REHASH_MULTIPLIER (4)
|
||
- hash_insert,hash_search: call hash_grow if necessary
|
||
|
||
arrayfunc.c
|
||
- convert_var_to_{array,assoc}: if the original variable had no value
|
||
(it was unset), the array variable should be unset as well. Reported
|
||
by andrej@podzimek.org
|
||
|
||
4/21
|
||
----
|
||
bashline.c
|
||
- set_saved_history: change logic used to decide where in the history
|
||
operate_and_get_next should start by using a logical offset into the
|
||
history list that is an offset from history_base. This avoids having
|
||
to take whether or not the history is stifled and full into account.
|
||
Report and fix from Greg Price <gnprice@gmail.com>
|
||
- operate_and_get_next: just calculate the logical offset of where we
|
||
should be in the history instead of an absolute offset
|
||
|
||
lib/readline/input.c
|
||
- _rl_nchars_available: new function, returns the number of characters
|
||
available to be read if FIONREAD is available
|
||
|
||
4/22
|
||
----
|
||
lib/readline/{readline.c,rlprivate.h}
|
||
- _rl_pending_command: new struct to hold information about a pending
|
||
command for readline to execute when the current command completes.
|
||
A command can set this up so that it gets executed like a
|
||
continuation before redisplay
|
||
|
||
lib/readline/readline.c
|
||
- readline_internal_charloop: after _rl_dispatch returns, check
|
||
_rl_command_to_execute, and, if it's non-zero, redisplay and then
|
||
execute it as a command
|
||
- added a small set of library-private functions for managing the
|
||
executing key sequence (not used yet)
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: if we have found an opcode or have added a
|
||
character to the search string and searched for it, reset the keymap
|
||
and okeymap members of the search context in preparation for reading
|
||
another key sequence/opcode
|
||
- _rl_isearch_dispatch: if we read a key sequence bound to an editing
|
||
command that is not an `opcode', set up _rl_command_to_execute to
|
||
execute it after the searching returns and arrange to break out of
|
||
the search
|
||
- _rl_isearch_dispatch: if we paste in text from bracketed paste, set
|
||
the mark as active so we can highlight it when we display the search
|
||
string
|
||
- _rl_isearch_dispatch: if we've found the search string, activate the
|
||
mark and set rl_point and rl_mark so the search string is highlighted
|
||
when we display the search results
|
||
- _rl_isearch_dispatch: do translation for keys that map to
|
||
rl_do_lowercase_version like we do when dispatching while reading a
|
||
key sequence
|
||
|
||
4/23
|
||
----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: if bracketed paste mode is enabled and there are
|
||
enough characters waiting in the terminal's input queue, try to read
|
||
the bracketed paste prefix and jump straight to the opcode execution
|
||
if we read it. Otherwise, just go on with the ESC. Inspired by report
|
||
from <gentoo_eshoes@tutanota.com>
|
||
|
||
parse.y
|
||
- parse_comsub: posix-mode shells don't allow a closing right paren to
|
||
delimit a pending here-document -- it requires the newline
|
||
|
||
doc/bashref.texi
|
||
- POSIX mode: updated posix mode description with the new here-document
|
||
delimiter requirement
|
||
|
||
lib/readline/search.c
|
||
- _rl_nsearch_dispatch: if bracketed paste mode is enabled, and we read
|
||
an ESC, try to see if we have a bracketed paste op and insert the
|
||
pasted next. If we don't, go on with the ESC
|
||
- _rl_nsearch_dosearch: experimental code to highlight the search string
|
||
when displaying the line found in the history. Only done when we are
|
||
not searching for a pattern, since we don't have information on the
|
||
end of the matching portion of the line. Experimental because it
|
||
changes where we put point and mark if searching is successful
|
||
|
||
expr.c
|
||
- expr_streval: if find_variable for the case where the string is not
|
||
an array reference doesn't find anything, see if we can find
|
||
something by using find_variable_last_nameref and use the value
|
||
from there in the call to expr_streval, kind of using the expression
|
||
recursion to complement the nameref recursion. Report from
|
||
Daniel Molina <lluvia@autistici.org>
|
||
|
||
4/24
|
||
----
|
||
jobs.c
|
||
- {start,stop}_pipeline: don't reset pipeline_pgrp to 0 if it's already
|
||
the same as shell_pgrp, since we don't want to reset it in the middle
|
||
of a shell started to run a command or process substitution (after
|
||
forking a child to run one command, but before forking another, for
|
||
instance). Reported by Rob Landley <rob@landley.net>
|
||
|
||
4/27
|
||
----
|
||
parse.y
|
||
- function_def: break the productions starting with `function' without
|
||
`()' into two productions to avoid a shift-reduce conflict. Report
|
||
and patch from Dale R. Worley <worley@alum.mit.edu>
|
||
|
||
variables.h
|
||
- localvar_inherit: add extern declaration here
|
||
|
||
subst.c
|
||
- shell_expand_word_list: take out change from 3/17 to pass -I to
|
||
make_internal_declare; it generates errors the user will find
|
||
confusing if there is a variable with the same name but a different
|
||
type at a previous scope
|
||
- shell_expand_word_list: check for and note whether or not -I is
|
||
supplied to the declaration command, since it changes the default
|
||
behavior of a compound assignment without -a or -A
|
||
- shell_expand_word_list: if we have a compound assignment that is an
|
||
argument to a declaration command, but there are no options supplied
|
||
to the command that determine the type of the array, make sure we
|
||
call make_internal_declare with either -a (no localvar_inherit or -I)
|
||
or at least -- (if we are inheriting), because we don't want the
|
||
declare to get skipped before we perform the word assignment. Fixes
|
||
bug reported by Ross Goldberg <ross.goldberg@gmail.com>
|
||
|
||
4/28
|
||
----
|
||
subst.c
|
||
- expand_declaration_argument: new function, broke code that handles
|
||
compound assignments that are arguments to declaration commands out
|
||
of shell_expand_word_list into this function. No functional change
|
||
yet
|
||
|
||
4/29
|
||
----
|
||
subst.c
|
||
- expand_compound_assignment_word: helper function for
|
||
expand_declaration_argument: takes NAME[+]=( VALUE ), converts VALUE
|
||
to a list of words, then single-quotes each word and reconstructs
|
||
the original word. This assumes the result will go to
|
||
do_word_assignment, which will remove the single quotes
|
||
- expand_oneword: helper function for expand_compound_assignment_word,
|
||
takes VALUE and performs the splitting into words, and then the
|
||
expansion and single-quoting of each individual word. Indexed and
|
||
associative arrays take different code paths, because they undergo
|
||
different expansions and associative arrays need special handling to
|
||
avoid having to scan for the end of the subscript multiple times
|
||
- expand_declaration_argument: call expand_compound_assignment_word to
|
||
get the expansion-before-calling-builtins word expansion sequence
|
||
correct. Better fix for for bug report from Kevin Locke
|
||
<kevin@kevinlocke.name>,
|
||
https://savannah.gnu.org/support/index.php?109669
|
||
|
||
arrayfunc.c
|
||
- quote_array_compound_word: take [IND]=VALUE and convert it to
|
||
['IND']='VALUE'. Called by quote_compound_array_list for each word
|
||
in the list
|
||
- expand_and_quote_assoc_qword: take [KEY]=VALUE and convert it to
|
||
['expanded-key']='expanded-value' (or VALUE to 'expanded-value').
|
||
Called by subst.c:expand_oneword() for each word in the list
|
||
- quote_compound_array_list: take a list of words and convert each
|
||
[IND]=VALUE to ['IND']='VALUE' (or just 'VALUE' if there is no
|
||
[IND]=). Used for indexed arrays
|
||
|
||
arrayfunc.h
|
||
- expand_and_quote_assoc_word,quote_compound_array_list: new extern
|
||
declarations
|
||
|
||
4/30
|
||
----
|
||
doc/{bashref.texi,bash.1}
|
||
- rework description of reserved words a little; add a reserved words
|
||
node to bashref.texi. Based on a report from Dale R. Worley
|
||
<worley@alum.mit.edu>
|
||
|
||
builtins/history.def
|
||
- history_builtin: if the shell is restricted, don't allow pathnames
|
||
with slashes to be read or written. From a report from
|
||
Diffie <nano@mm.st>
|
||
|
||
shell.c
|
||
- maybe_make_restricted: add HISTFILE to the list of readonly variables
|
||
|
||
doc/{bashref.texi,bash.1}
|
||
- document new restricted shell restrictions
|
||
|
||
5/1
|
||
---
|
||
jobs.c
|
||
- wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM
|
||
is set in the flags argument
|
||
|
||
subst.c
|
||
- command_substitute: call make_child with FORK_NOTERM flag so it
|
||
doesn't try to set the terminal's process group
|
||
- command_substitute: call wait_for with JWAIT_NOTERM so it doesn't
|
||
try to set the terminal's process group
|
||
- command_substitute: now that wait_for doesn't try to reset the
|
||
terminal's process group, remove the code that tries to clean up
|
||
after that
|
||
|
||
5/4
|
||
---
|
||
doc/bash.1
|
||
- make sure to mention /etc/inputrc as the ultimate default readline
|
||
init file, like other documentation does. Update from
|
||
Greg Price <gnprice@gmail.com>
|
||
|
||
lib/readline/readline.c
|
||
- if the private startup hook function variable _rl_internal_startup_hook
|
||
is set, execute that after any user-specified startup hook
|
||
|
||
lib/readline/rlprivate.h
|
||
- _rl_internal_startup_hook: new extern declaration
|
||
|
||
bashline.c,lib/readline/{misc.c,readline.h}
|
||
- operate_and_get_next: moved to rl_operate_and_get_next so it's
|
||
available to all readline programs, uses _rl_internal_startup_hook.
|
||
Based on patch from Greg Price <gnprice@gmail.com>
|
||
|
||
lib/readline/funmap.c
|
||
- "operate-and-get-next": now a bindable readline command
|
||
|
||
lib/readline/emacs_keymap.c
|
||
- rl_operate_and_get_next: bound to ^O in emacs mode by default
|
||
|
||
doc/bash.1,lib/readline/{readline.3,rluser.texi}
|
||
- operate-and-get-next: move to readline section of the manuals, out of
|
||
bash-specific functions section
|
||
|
||
5/5
|
||
---
|
||
hashlib.c
|
||
- hash_string: use a series of shifts and adds to avoid a multiply by
|
||
FNV_PRIME. From Landon Curt Noll's FNV web page
|
||
|
||
builtins/fc.def
|
||
- fc_gethist,fc_gethnum: now take an additional argument indicating the
|
||
operating mode: if the arg is 1, fc is listing commands; if it is 0,
|
||
fc is executing commands. Affects how -0 is handled (fc_gethnum
|
||
returns -1). Changed callers to handle the return value appropriately.
|
||
Report from Jason Franklin <jason.franklin@quoininc.com> about
|
||
seg fault and core dump
|
||
- fc_builtin: if fc_gethnum returns < 0 when setting histbeg or histend,
|
||
report a range error
|
||
|
||
doc/bash.1,lib/readline/doc/hsuser.texi
|
||
- fc: document how 0 and -0 are treated for listing and executing
|
||
|
||
shell.c
|
||
- run_one_command: call parse_and_execute with SEVAL_RESETLINE so the
|
||
line number gets set to 1. Reported by Rob Landley <rob@landley.net>
|
||
|
||
5/8
|
||
---
|
||
support/config.{guess,sub}
|
||
- update to latest versions
|
||
|
||
configure.ac
|
||
- add support for `genode' from Emery Hemingway <ehmry@posteo.net>
|
||
|
||
5/14
|
||
----
|
||
test.c
|
||
- term: fix case where an argument that looks like a unary operator,
|
||
but doesn't have enough tokens left to have an argument to that
|
||
operator, was not being treated as a one-argument test. Affects
|
||
only uses of test with four and greater arguments, which posix says
|
||
are unspecified. This is a bug, or at least an incompatibility, at
|
||
least 30 years old.
|
||
- test_command: if there are unconsumed arguments, call test_syntax_error
|
||
with a `syntax error' argument if the first remaining argument starts
|
||
with a `-'. Better than a generic `too many arguments' error
|
||
|
||
5/19
|
||
----
|
||
configure.ac,config.h.in
|
||
- getrandom: add test, define HAVE_GETRANDOM
|
||
- getentropy: add test, define HAVE_GETENTROPY
|
||
|
||
variables.c
|
||
- get_urand32: use getrandom; provide imperfect emulation that uses
|
||
getentropy if available, and falls back to reading /dev/urandom if
|
||
that's not available. The idea is to use /dev/urandom as little as
|
||
possible
|
||
|
||
5/20
|
||
----
|
||
configure.ac
|
||
- updated version to 5.1-alpha
|
||
|
||
lib/readline/readline.h
|
||
- updated defines to readline version 8.1
|
||
|
||
variables.c
|
||
- brand: if shell_compatibility_level is 50 or below, don't xor the
|
||
top and bottom halves of the 32-bit random number together, since
|
||
previous versions did not
|
||
|
||
5/21
|
||
----
|
||
COMPAT
|
||
- overhauled and updated the descriptions of the various shopt compatNN
|
||
options
|
||
|
||
doc/bashref.texi
|
||
- Shell Compatibility Mode: new section, describes compatibility levels,
|
||
BASH_COMPAT, and the various compatNN shopt options
|
||
|
||
5/23
|
||
----
|
||
doc/bash.1
|
||
- added Shell Compatibility mode section
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- changed shopt section to list the compatibility options and refer
|
||
to Shell Compatibility Mode section
|
||
- BASH_COMPAT: overhauled the text, refers to Shell Compatibility Mode
|
||
section
|
||
|
||
5/27
|
||
----
|
||
variables.c,/lib/sh/random.c
|
||
- moved functions that manage 16-bit and 32-bit random values to
|
||
lib/sh/random.c
|
||
|
||
alias.c
|
||
- add_alias: don't bother checking null alias values for ending in
|
||
space or tab
|
||
|
||
braces.c,include/typemax.h
|
||
- move sh_imaxabs and overflow and underflow detection to typemax.h
|
||
so the expression evaluation code can use it in the future
|
||
|
||
5/28
|
||
----
|
||
lib/readline/kill.c
|
||
- _rl_bracketed_read_mbstring: make sure to fill in mb[0] even if
|
||
the locale says MB_CUR_MAX == 1 in case a caller uses it. Partial
|
||
fix for bug reported by Phi Debian <phi.debian@gmail.com>
|
||
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_change_char: make sure _rl_vi_last_replacement gets filled in
|
||
in the case where MB_CUR_MAX == 1. Rest of fix for bug reported by
|
||
Phi Debian <phi.debian@gmail.com>
|
||
- _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement
|
||
|
||
5/29
|
||
----
|
||
lib/malloc/malloc.c
|
||
- __P -> PARAMS
|
||
- union mhead: now 16 bytes to force 16-byte alignment; extra 8 bytes
|
||
at the end of struct minfo to use for guard bytes. Enabled if
|
||
pointers are 64 bits (SIZEOF_CHAR_P == 8)
|
||
- if we have 64-bit pointers, prepopulate the 64-byte bin first instead
|
||
of the 32-byte bin (pointers and WORD_DESCs still fit into 32 bytes,
|
||
but WORD_LISTs are now 36 bytes with malloc overhead). We can still
|
||
split 64-byte blocks to satisfy 32-byte requests
|
||
- internal_malloc: fill in the new 8 mh_magic8 bytes with MAGIC1 guard
|
||
bytes
|
||
- internal_malloc: print a warning message if the returned pointer is
|
||
not aligned according to MALIGN_MASK
|
||
- internal_free: detect underflow by checking that mh_magic8 is full
|
||
of MAGIC1 bytes
|
||
- internal_realloc: detect underflow by checking that mh_magic8 is full
|
||
of MAGIC1 bytes
|
||
|
||
lib/malloc/stats.c
|
||
- _print_malloc_stats: slight adjustment for better column alignment
|
||
|
||
6/1
|
||
---
|
||
execute_cmd.c
|
||
- execute_command_internal: treat a redirection failure with errexit
|
||
set as a command failure that exits the shell. Bug report from
|
||
Hyunho Cho <mug896@naver.com>
|
||
|
||
6/3
|
||
---
|
||
redir.c
|
||
- redirection_error: takes a new argument, FN, which if non-NULL is
|
||
the filename to be used in the error message.
|
||
|
||
redir.[ch],builtins/evalstring.c
|
||
- redirection_error: changed extern declaration and callers
|
||
|
||
redir.c
|
||
- do_redirection_internal: takes a new third parameter, FNP, a char **
|
||
to use (*FNP, if non-NULL) to store and return the expanded filename
|
||
for those redirections that take one
|
||
- do_redirections: pass a char ** (&fn) to do_redirection_internal to
|
||
get a pointer to the expanded filename; pass it to redirection_error
|
||
if appropriate. Free FN in any case, since do_redirection_internal
|
||
won't. Fix for double expansion of filename in certain redirections
|
||
reported by O<>uz <oguzismailuysal@gmail.com>
|
||
|
||
6/4
|
||
---
|
||
parse.y
|
||
- parse_comsub: while we're reading a here-document, don't perform any
|
||
history expansion (set history_expansion_inhibited). Fixes issue
|
||
reported by "ladyrick" <ladyrick@qq.com>
|
||
|
||
general.h,parse.y
|
||
- __P -> PARAMS
|
||
|
||
shell.c
|
||
- shellstart: struct timeval used to initialize shell starting time;
|
||
shell_start_time now initialized from shellstart.tv_sec
|
||
|
||
variables.c
|
||
- assign_seconds: reset shellstart to set shell starting time
|
||
|
||
pcomplete.c
|
||
- include posixtime.h instead of <sys/time.h>
|
||
|
||
lib/sh/{ufuncs,uconvert}.c
|
||
- include posixtime.h instead of the inline conditional includes
|
||
|
||
aclocal.m4
|
||
- BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the
|
||
deprecated AC_HEADER_EGREP
|
||
|
||
posixtime.h
|
||
- struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement
|
||
definition
|
||
|
||
lib/sh/gettimeofday.c
|
||
- gettimeofday: replacement function, so we don't have to use
|
||
HAVE_GETTIMEOFDAY in the rest of the code
|
||
|
||
6/5
|
||
---
|
||
{lots of files}.[ch]
|
||
builtins/{lots of files}.{c,h,def}
|
||
lib/glob/{lots of files}.[ch]
|
||
lib/malloc/{lots of files}.[ch]
|
||
lib/sh/{lots of files}.c
|
||
include/{lots of files}.h
|
||
examples/loadables/{lots of files}.c
|
||
- __P -> PARAMS
|
||
|
||
doc/{bash.1,bashref.texi}
|
||
- SECONDS: clarify that the number of seconds is always determined by
|
||
querying the system clock
|
||
|
||
6/8
|
||
---
|
||
configure.ac
|
||
- if CFLAGS is not supplied in the environment or on the command line,
|
||
add the gcc options that suppress warnings about parens and print
|
||
formats in a slightly different way that will avoid some collisions
|
||
|
||
lib/readline/readline.c
|
||
- _rl_dispatch_subseq: don't set rl_last_func to rl_vi_arg_digit, just
|
||
the same as if it were rl_digit_argument. This allows functions like
|
||
rl_yank_last_arg, which behave differently when called multiple times
|
||
in a row, to work closer to what is expected. This allows what
|
||
Leo Alekseyev <dnquark@gmail.com> reported to work, with caveats
|
||
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_yank_arg: make sure to pass `key' to rl_yank_nth_arg, in case
|
||
it needs to use it later
|
||
- rl_vi_redo: suppress attempts to redo `.' when the current keymap is
|
||
vi_movement_keymap, since that will recursively call vi_redo
|
||
|
||
6/11
|
||
----
|
||
redir.c
|
||
- limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can
|
||
handle atomic writes without hanging. Tested on FreeBSD 13
|
||
|
||
[bash-5.1-alpha frozen]
|
||
|
||
6/15
|
||
----
|
||
subst.c
|
||
- do_assignment_internal: call stupidly_hack_special_variables on the
|
||
name returned from the variable assignment, in case there was a
|
||
nameref expansion, and on the original name only if the assignment
|
||
returned NULL. Fixes bug reported by James D. Lin <jamesdlin@gmail.com>
|
||
|
||
6/16
|
||
----
|
||
builtins/hash.def
|
||
- hash_builtin: don't print anything if the hash table is empty when
|
||
listing portably (-l) unless the shell compatibility level is <= 50
|
||
Issue originally raised by <beluro@web.de>
|
||
|
||
6/17
|
||
----
|
||
pathexp.c
|
||
- glob_name_is_acceptable: extend GLOBIGNORE to ignore `.' and `..'
|
||
as a terminal pathname component instead of just ignoring filenames
|
||
that are `.' or `..'. From a suggestion by Ilkka Virta
|
||
<itvirta@iki.fi>
|
||
|
||
6/18
|
||
----
|
||
po/Makefile.in.in
|
||
- MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have
|
||
to create the variable manually
|
||
|
||
lib/readline/doc/rltech.texi
|
||
- add descriptions of the active mark functions that are available to
|
||
applications. I guess they will remain public
|
||
|
||
subst.c
|
||
- valid_parameter_transform: new function, reject transformations
|
||
longer than a single character or invalid transformation operators
|
||
- parameter_brace_transform: call valid_parameter_transform
|
||
|
||
6/22
|
||
----
|
||
lib/sh/zread.c
|
||
- lbuf: bump size up to ZBUFSIZ (default 4096). From a report by
|
||
Jason A. Donenfeld <Jason@zx2c4.com>
|
||
|
||
lib/sh/zcatfd.c
|
||
- zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096)
|
||
|
||
lib/sh/zmapfd.c
|
||
- zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096)
|
||
|
||
6/29
|
||
----
|
||
aclocal.m4
|
||
- BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants,
|
||
from Jessica Clarke <jrtc27@jrtc27.com>
|
||
|
||
xmalloc.c
|
||
- HAVE_SBRK: use #if instead of #ifdef so we only use it if we think
|
||
it works
|
||
|
||
examples/loadables/finfo.c
|
||
- st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke
|
||
<jrtc27@jrtc27.com>
|
||
|
||
unwind_prot.c
|
||
- unwind_protect_mem_internal: make sure we allocate at least as many
|
||
bytes for an entire UNWIND_ELT. Fix from Jessica Clarke
|
||
<jrtc27@jrtc27.com>
|
||
|
||
7/1
|
||
---
|
||
eval.c
|
||
- alrm_catcher: use write(2) instead of fprintf to print the
|
||
auto-logout message to the terminal
|
||
|
||
jobs.c
|
||
- UNQUEUE_SIGCHLD: set queue_sigchld to 1 around call to waitchld(),
|
||
since it is not being called from a signal handler and so SIGCHLD is
|
||
not blocked. Fixes report by Godmar Back <godmar@gmail.com>
|
||
|
||
7/2
|
||
---
|
||
doc/{bash.1,bashref.texi}
|
||
- read: clarify that without any name arguments, the line assigned to
|
||
REPLY is not modified. From a question by M. Nejat AYDIN
|
||
<mnaydin@yahoo.com> with input from Eli Schwartz
|
||
<eschwartz@archlinux.org>
|
||
|
||
7/5
|
||
---
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_done_inserting: make sure to close out all undo groups when
|
||
leaving insert mode, so we don't have anything dangling.
|
||
Report and fix from David Fries <David@Fries.net>
|
||
|
||
7/6
|
||
---
|
||
lib/readline/vi_mode.c
|
||
- _rl_vi_domove_motion_cleanup: the `c' and `C' commands should enter
|
||
insert mode even if the motion command doesn't delete any text.
|
||
From a report by David Fries <David@Fries.net>
|
||
- _rl_vi_done_inserting: add a missing rl_end_undo_group when
|
||
_rl_vi_doing_insert is set: there should be one begun by
|
||
rl_vi_start_inserting and one begun by the command (change or replace).
|
||
From a report by David Fries <David@Fries.net>
|
||
- rl_vi_replace: set _rl_vi_last_key_before_insert to 'R' explicitly,
|
||
since other code checks that and we want to allow users to rebind
|
||
this function
|
||
|
||
7/7
|
||
---
|
||
lib/readline/vi_mode.c
|
||
- rl_vi_{delete,change,yank}_to: if we have a non-null _rl_vimvcxt,
|
||
just reinitialize it so we don't have to allocate a new one. This is
|
||
a change primarily for callback mode, and fixes a memory leak
|
||
|
||
builtins/evalstring.c
|
||
- optimize_shell_function: try to optimize away the fork in the last
|
||
command in a shell function body, under certain conditions
|
||
|
||
execute_cmd.c
|
||
- execute_function: attempt to optimize away forks in a shell function
|
||
that is already marked NO_FORK and being executed in a command
|
||
substitution
|
||
|
||
7/8
|
||
---
|
||
{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c
|
||
- interrupt_immediately: remove, no longer used
|
||
|
||
jobs.c
|
||
- waitchld: don't perform asynchronous notification if we are currently
|
||
executing a builtin (executing_builtin != 0). Inspired by a report
|
||
from Godmar Back <godmar@gmail.com>
|
||
|
||
7/9
|
||
---
|
||
lib/readline/signals.c
|
||
- _rl_handle_signal: block SIGTTOU while handling a SIGTTOU, since we
|
||
no longer run this in a signal handling context where SIGTTOIU would
|
||
be blocked
|
||
|
||
7/14
|
||
----
|
||
execute_cmd.c
|
||
- execute_simple_command: use new variable `cmdflags' instead of using
|
||
simple_command->flags directly; initialize from simple_command->flags
|
||
- check_command_builtin: take a simple command list of words starting
|
||
with `command' and including a command_word argument, and peel off
|
||
the `command' and any instances of `-p' and `--' and return the
|
||
updated list
|
||
- execute_simple_command: if the first word of the simple command is
|
||
`command', call check_command_builtin to peel off any `command' and
|
||
`-p' and `--' and go on to execute the rest of the words as a simple
|
||
command. If we're in posix mode, we've got the special builtins
|
||
handled before this runs. Fixes complaint about `command' in the
|
||
background running an extra bash process from Dmitry Alexandrov
|
||
<dag@gnui.org>
|
||
|
||
7/17
|
||
----
|
||
doc/bash.1
|
||
lib/readline/doc/{rltech,hstech,rluser}.texi
|
||
lib/readline/doc/{readline,history}.3
|
||
- a few small tweaks to make the language gender-neutral
|
||
|
||
7/18
|
||
----
|
||
subst.c
|
||
- expand_word_internal: case `:' make sure the shell is either not in
|
||
posix mode or W_TILDEEXP is set before turning on W_ITILDE. The old
|
||
code would turn it on unconditionally if the W_ASSIGNMENT flag was
|
||
set. Fixes bug reported by O<>uz <oguzismailuysal@gmail.com>
|
||
|
||
7/20
|
||
----
|
||
builtins/complete.def
|
||
- replace macros used to print compspec actions, options, and other
|
||
info with a small set of functions that traverse the structs used
|
||
to hold that information and print everything instead of eumerating
|
||
each option and action separately. From a patch submitted by
|
||
Martin Kealey <martin@kurahaupo.gen.nz>
|
||
|
||
7/27
|
||
----
|
||
variables.c
|
||
- push_posix_tempvar_internal: restore $SHELLOPTS after restoring the
|
||
values of shell options saved by `local -' by calling set_shellopts().
|
||
Report from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
flags.c
|
||
- reset_shell_flags: set histexp_flag to 0 and let bash_history_reinit
|
||
take care of setting history_expansion appropriately. Report and fix
|
||
from Grisha Levit <grishalevit@gmail.com>
|
||
|
||
7/28
|
||
----
|
||
general.c
|
||
- assignment: if (FLAGS & 1), we are parsing the contents of a compound
|
||
assignment, and a word must begin with a `[' and have a valid
|
||
subscript terminated by `]' before the `=' to be considered an
|
||
assignment statemen and subsequently expanded like one. Report from
|
||
Alexey Izbyshev <izbyshev@ispras.ru>
|
||
|
||
7/30
|
||
----
|
||
lib/glob/sm_loop.c
|
||
- BRACKMATCH: if the bracket expression is matching simple characters
|
||
and not a range, compare the character from the string and the
|
||
pattern directly, as required by Posix interp 948
|
||
|
||
lib/glob/smatch.c
|
||
- charcmp_wc: split off code that calls wcscoll from rangecmp_wc,
|
||
just return the results of wcscoll
|
||
- rangecmp_wc: call charcmp_wc and impose a total ordering
|
||
by performing a byte comparison (or wint_t comparison) of C1 and C2
|
||
as required by Posix interp 948 (charcmp_wc takes care of the
|
||
behavior of FORCECOLL)
|
||
- collequiv_wc: call charcmp_wc instead of rangecmp_wc
|
||
- charcmp: character comparison code from rangecmp
|
||
- rangecmp: call charcmp and impose total ordering as required by
|
||
Posix interp 948
|
||
- collequiv: call charcmp instead of rangecmp
|
||
- _fnmatch_fallback: ASCII version of fallback for equivalence classes
|
||
when there are no multibyte characters in the pattern; just calls
|
||
fnmatch with a reconstructed equivalence class pattern
|
||
- collequiv: call _fnmatch_fallback if charcmp returns non-zero and
|
||
the configure check indicates fnmatch has character class support.
|
||
Fixes issue reported by Harald van Dijk <harald@gigawatt.nl>
|
||
|
||
8/2
|
||
---
|
||
lib/readline/signals.c
|
||
- _rl_handle_signal: since we're not called in a signal handler context
|
||
any more, we don't need to explicitly unblock the signal we received
|
||
so the application's signal handler will get it when we resend the
|
||
signal to ourselves. It doesn't hurt anything to do it, but we don't
|
||
have to
|
||
- _rl_handle_signal: Set up a framework for any signals that need to
|
||
be blocked during cleanup: add the signal to SET (initialized to the
|
||
existing set of blocked signals) and set BLOCK_SIG to 1. We block
|
||
that set around the call to rl_cleanup_after_signal().
|
||
- _rl_handle_signal: on AIX, if the signal is SIGHUP, make sure we
|
||
block SIGHUP while running rl_cleanup_after_signal()
|
||
|
||
8/3
|
||
---
|
||
jobs.c
|
||
- start_job: don't allow `fg' or `bg' in a command substitution to
|
||
attempt to start a parent's jobs. Suggested by O<>uz
|
||
<oguzismailuysal@gmail.com>
|
||
|
||
builtins/set.def
|
||
- set_current_options: only call change_flag or SET_BINARY_O_OPTION_VALUE
|
||
if the value has changed from what is stored in the bitmap, to avoid
|
||
any side effects from setting the options and save time on any
|
||
unnecessary function calls. Inspired by report from Grisha Levit
|
||
<grishalevit@gmail.com>
|
||
|
||
parse.y
|
||
- xparse_dolparen: before we jump to top level, check whether we are
|
||
still reading from the string (we might have run all the unwind-
|
||
protects) and turn off PST_CMDSUBST if we are not. Fixes fuzzing
|
||
bug reported by Jakub Wilk <jwilk@jwilk.net>
|
||
|
||
8/4
|
||
---
|
||
subst.c
|
||
- process_substitute: set subshell_environment to include SUBSHELL_ASYNC
|
||
in the child process, since we passed FORK_ASYNC to make_child. Fixes
|
||
DEBUG trap problem reported by Jonathan Rascher <jon@bcat.name>
|
||
|
||
subst.c
|
||
- unlink_all_fifos: new function, just unconditionally closes and
|
||
unlinks (if using FIFOs) each pipe used for process substitution.
|
||
There is an open to unblock any child processes sleeping on the
|
||
FIFO first. Inspired by a suggestion from "CHIGOT, CLEMENT"
|
||
<clement.chigot@atos.net>
|
||
|
||
shell.c
|
||
- exit_shell: call unlink_all_fifos() instead of unlink_fifo_list()
|
||
|
||
sig.c
|
||
- termsig_handler: call unlink_all_fifos() instead of
|
||
unlink_fifo_list()
|
||
|
||
8/5
|
||
---
|
||
arrayfunc.c
|
||
- quote_compound_array_list: turn empty strings into '' instead of
|
||
leaving them unmodified. Fixes bug in changes from 4/29 reported
|
||
by andy_bash <andy_bash@objectmail.com>
|
||
|
||
8/10
|
||
----
|
||
bashline.c
|
||
- edit_and_execute_command,bash_execute_unix_command: restore the bash
|
||
signal handlers before running parse_and_execute() so bash will catch
|
||
and handle signals, instead of letting readline catch them without
|
||
any opportunity to run _rl_handle_signal(). Fixes bug reported by
|
||
Stan Marsh <gazelle@xmission.com>
|
||
|
||
8/11
|
||
----
|
||
builtins/fc.def
|
||
- fc_gethnum: return HIST_INVALID for -0 if not in listing mode
|
||
- fc_builtin: throw an out-of-range error if histbeg or histend gets
|
||
set to HIST_INVALID
|
||
- fc_builtin: don't throw errors for other out-of-range history
|
||
specifications, clamp them at the beginning or end of the history
|
||
list, as appropriate, per POSIX. Report and fix from Martijn Dekker
|
||
<martijn@inlv.org>
|
||
|
||
8/12
|
||
----
|
||
builtins/fc.def
|
||
- fc_gethnum: return HIST_NOTFOUND (new error) if the string is not a
|
||
number and doesn't correspond to any command in the history list
|
||
- fc_builtin: print a "no command found" error message if fc_gethnum
|
||
returns HIST_NOTFOUND
|
||
|
||
8/14
|
||
----
|
||
flags.c
|
||
- no_invisible_vars: removed undocumented `-I' flag
|
||
|
||
{flags,variables}.c,flags.h,builtins/{declare,setattr.def}
|
||
- no_invisible_vars: remove all references
|
||
|
||
command.h
|
||
- PF_ALLINDS: new flag, means to expand an array variable name without
|
||
a subscript as if it were subscripted by `@' instead of `0'
|
||
|
||
subst.c
|
||
- parameter_brace_expand_word: if PFLAGS contains PF_ALLINDS, expand
|
||
an array variable name as if it were subscripted by "@" instead of
|
||
0/"0": a string with the element values separated by " ". Little
|
||
nuance; we're just interested in whether or not there are any
|
||
values at all
|
||
- parameter_brace_expand: if we are expanding something like ${foo@a},
|
||
pass PF_ALLINDS to parameter_brace_expand_word and
|
||
parameter_brace_expand_indir so we don't get tripped up on `nounset'
|
||
if foo has an assigned subscript other than 0/"0". Inspired by a
|
||
report from Andrew Neff <andrew.neff@visionsystemsinc.com>
|
||
|
||
8/17
|
||
----
|
||
bashhist.c
|
||
- bash_add_history,maybe_add_history: don't need to call shell_comment
|
||
if we are in the middle of adding a here-document, since it may
|
||
call the parser recursively on data that is not guaranteed to be
|
||
valid input. From a report by Hyunho Cho <mug896@gmail.com>
|
||
|
||
8/24
|
||
----
|
||
lib/readline/complete.c
|
||
- compare_match: compare TEXT from the line buffer and MATCH, a
|
||
possible completion for TEXT, after dequoting TEXT if necessary
|
||
- rl_complete_internal,rl_menu_complete : if show-all-if-unmodified is
|
||
set, use compare_match instead of a straight strcmp to determine if
|
||
the match has changed the text to complete, so we can use it for
|
||
filenames that require quoting. Report and pointer to fix from
|
||
Abon B <gnuabonbon@gmail.com>
|
||
|
||
8/25
|
||
----
|
||
eval.c
|
||
- execute_prompt_command: PROMPT_COMMAND can now be an array, subsuming
|
||
PROMPT_COMMANDS, which bash no longer looks for. Prompted by a
|
||
suggestion from Martijn Dekker <martijn@inlv.org>
|
||
|
||
8/26
|
||
----
|
||
builtins/fc.def
|
||
- fc_gethnum: now takes a flags word as the third argument, with two
|
||
current flag values: HN_LISTING, which means we are listing history
|
||
entries, and HN_FIRST, which means we are parsing the first in a
|
||
first,last range of history entries
|
||
- fc_gethnum: if we have a number >= 0, and it's out of range, return
|
||
different values (0 or last history) depending on whether we are
|
||
parsing the first or last in a range argument. Based on a report from
|
||
Martijn Dekker <martijn@inlv.org>
|
||
|
||
8/31
|
||
----
|
||
parse.y
|
||
- grammar: call handle_eof_input_unit from the eof-after-error
|
||
production only from interactive top-level shells, so a syntax error
|
||
in `eval' doesn't exit an interactive shell. Report and fix from
|
||
Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
bashline.c
|
||
- bash_execute_unix_command: if we call parse_and_execute with allocated
|
||
memory, make sure not to include SEVAL_NOFREE in the flags so it will
|
||
free that command string before returning. Report and fix from
|
||
Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
array.[ch]
|
||
- array_to_argv: now takes a second argument: COUNTP; returns the number
|
||
of elements stored in the strvec
|
||
- array_to_argv: don't store array elements with null values; it makes
|
||
it hard for callers to walk the whole array reliably
|
||
|
||
pcomplete.c
|
||
- gen_shell_function_matches: change call to array_to_argv
|
||
|
||
array.h
|
||
- execute_array_command: now takes the entire ARRAY * as the first
|
||
parameter
|
||
|
||
eval.c
|
||
- execute_array_command: now takes the entire array, puts the elements
|
||
into a strvec, and executes each element of the strvevc as a command.
|
||
This protects against a command from PROMPT_COMMAND[n] unsetting the
|
||
corresponding element of PROMPT_COMMAND.
|
||
From a report from Koichi Murase <myoga.murase@gmail.com>
|
||
|
||
9/7
|
||
---
|
||
[bash-5.1-beta frozen]
|
||
|
||
9/8
|
||
---
|
||
lib/readline/display.c
|
||
- _rl_update_final: don't bother doing anything if the line structures
|
||
have not been initialized. Report and fix from gary@catalyst.net.nz
|
||
|
||
variables.c
|
||
- get_histcmd: perform the same adjustment as in prompt_history_number;
|
||
make sure to subtract one if we're doing this while executing a
|
||
command that has already been saved to the history list. Inspired
|
||
by a report from L A Walsh <bash@tlinx.org>
|
||
|
||
9/14
|
||
----
|
||
aclocal.m4
|
||
- BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported
|
||
by Andreas K. Hüttel <dilfridge@gentoo.org>
|
||
|
||
syntax.h
|
||
- slashify_in_here_document: restore previous value that doesn't
|
||
include double quote, since it's only special in certain cases
|
||
|
||
subst.c
|
||
- expand_word_internal: when processing backslash-double quote inside
|
||
a ${...} construct inside a here documemt, treat it the same as if
|
||
it were double-quoted, as posix says. Fixes report from
|
||
Andreas Schwab <schwab@linux-m68k.org>
|
||
|
||
9/15
|
||
----
|
||
support/signames.c
|
||
- added a number of more esoteric signal names from AIX and Solaris
|
||
|
||
parse.y
|
||
- report_syntax_error: make sure that the exit status is only set to
|
||
one of the special builtin exit statuses if we are really executing
|
||
a builtin here, not just if parse_and_execute_level > 0. Reported by
|
||
Rob Landley <rob@landley.net>
|
||
|
||
execute_cmd.c
|
||
- EX_BADSYNTAX: make sure that gets translated into EX_BADUSAGE (2)
|
||
- execute_simple_command: if a function returns a value greater than
|
||
EX_SHERRBASE, use builtin_status to translate it, as if a builtin
|
||
were being executed
|
||
- builtin_status: make sure a status > EX_SHERRBASE gets translated to
|
||
EXECUTION_FAILURE
|
||
|
||
9/21
|
||
----
|
||
subst.c
|
||
- process_substitute: set up input from /dev/null (standard for an
|
||
asynchronous process) only if the shell is interactive and reading
|
||
input from the terminal. This allows scripts to use process
|
||
substitution to filter stdin. From a report from
|
||
Andreas Schwab <schwab@linux-m68k.org>
|
||
|
||
9/23
|
||
----
|
||
doc/{bash.1,bashref.texi}
|
||
- ENV: a couple of changes clarifying that it's only used when an
|
||
interactive shell is started in posix mode. Report from
|
||
Reuben Thomas <rrt@sc3d.org>
|
||
|
||
examples/loadables/asort.c
|
||
- asort: loadable builtin to sort an array. Contributed by
|
||
Geir Hauge <geir.hauge@gmail.com>
|
||
|
||
10/1
|
||
----
|
||
|
||
[bash-5.1-rc1 frozen]
|
||
|
||
10/7
|
||
----
|
||
subst.c
|
||
- process_substitute: try it without setting the stdin for a process
|
||
substitution started from an interactive shell to /dev/null. We will
|
||
have to see if this causes problems like those reported back in
|
||
9/2019 by Grisha Levit. From a report by Hyunho Cho <mug896@gmail.com>
|
||
|
||
lib/readline/terminal.c
|
||
- _rl_init_terminal_io: if the terminal is unknown, disable bracketed
|
||
paste on the assumption it can't handle the enable/disable escape
|
||
sequences
|
||
|
||
10/8
|
||
----
|
||
lib/readline/terminal.c
|
||
- _rl_init_terminal_io: if the terminal name is "dumb", disable
|
||
bracketed paste mode. Suggested by
|
||
Andreas Schwab <schwab@linux-m68k.org>
|
||
|
||
10/13
|
||
-----
|
||
trap.[ch]
|
||
- set_trap_state: new function to allow other signal handlers to set
|
||
the internal state that trap_handler would set to note that the
|
||
shell received a trapped signal. Used by sigint_sighandler().
|
||
|
||
sig.c
|
||
- sigint_sighandler: call set_trap_state to set the pending trap state
|
||
for SIGINT if trap_handler is not called. Needed because
|
||
throw_to_top_level now checks whether a signal is pending before
|
||
running the trap (change from 4/2020)
|
||
|
||
builtins/trap.def
|
||
- trap_builtin: if the shell is interactive (interactive_shell != 0)
|
||
but running something like PROMPT_COMMAND that sets
|
||
parse_and_execute_level > 0 but interactive == 0, make sure to set
|
||
the signal handler to the default interactive shell SIGINT handler
|
||
(sigint_sighandler) instead of the default non-interactive one.
|
||
Fixes bug reported by Daniel Farina <daniel@fdr.io> with a hint
|
||
from felix <felix@f-hauri.ch>
|
||
|
||
10/26
|
||
-----
|
||
|
||
lib/readline/{readline.c,rlprivate.h}
|
||
- _rl_enable_active_region: new variable, mirrors value of
|
||
_rl_enable_bracketed_paste
|
||
- BRACKETED_PASTE_DEFAULT: new define, default initial value of
|
||
_rl_enable_bracketed_paste and _rl_enable_active_region
|
||
|
||
lib/readline/bind.c
|
||
- hack_special_boolean_var: make sure that _rl_enable_active_region
|
||
is set appropriately when "enable-bracketed-paste" is modified
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: make sure that we activate the mark on finding
|
||
the search string only if _rl_enable_active_region is non-zero, even
|
||
if bracketed paste is enabled
|
||
|
||
lib/readline/search.c
|
||
- noninc_dosearch: make sure that we activate the mark on finding
|
||
the search string only if _rl_enable_active_region is non-zero, even
|
||
if bracketed paste is enabled
|
||
|
||
lib/readline/kill.c
|
||
- rl_bracketed_paste_begin: make sure we activate the mark only if
|
||
_rl_enable_active_region is enabled
|
||
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: the requirement for number of available unread
|
||
characters (bytes) to trigger the bracketed paste test is now
|
||
BRACK_PASTE_SLEN-1, like for non-incremental searches
|
||
|
||
10/29
|
||
-----
|
||
|
||
doc/bash.1,lib/readline/rluser.texi
|
||
- enable-bracketed-paste: change to note the the current default is `On'
|
||
|
||
10/30
|
||
-----
|
||
lib/glob/glob.c
|
||
- wdequote_pathname: if wcsrtombs fails, make sure to check whether it
|
||
leaves wpathname set to a non-NULL value before checking whether or
|
||
not *wpathname is a null character (indicating an incomplete
|
||
conversion). Fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972286
|
||
with an assist from Bernhard Übelacker <bernhardu@mailbox.org>
|
||
|
||
11/1
|
||
----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: when checking whether the current character is
|
||
one of the isearch `opcodes', only check the multibyte character
|
||
member of CXT if we're currently running in a multibyte locale. Don't
|
||
assume that other parts of the code will set mb[0] = c and mb[1] = 0.
|
||
Report from Detlef Vollmann <dv@vollmann.ch>
|
||
|
||
[bash-5.1-rc2 frozen]
|
||
|
||
11/10
|
||
-----
|
||
lib/readline/isearch.c
|
||
- _rl_isearch_dispatch: if we are aborting the search, make sure to
|
||
call _rl_fix_point and to make sure the point and mark are less
|
||
than the new rl_end, in case they got out of sync. Report and fix
|
||
from Tillmann Osswald <tosswald@ernw.de>
|
||
|
||
test.c
|
||
- unary_test: assume the argument has already been expanded (the code
|
||
paths for [[ and [ expand it) and add AV_NOEXPAND to the flags passed
|
||
to array_value if assoc_expand_once is enabled. Prompted by a report
|
||
from Greg Wooledge <wooledg@eeg.ccf.org>
|
||
|
||
[bash-5.1-rc3 frozen]
|
||
|
||
11/18
|
||
-----
|
||
doc/{bash.1,bashref.texi}
|
||
- small tweaks to the ulimit description to make it more consistent with
|
||
the Posix standard's terminology
|
||
|
||
12/4
|
||
----
|
||
|
||
[bash-5.1-release frozen]
|