]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - CWRU/changelog
bash-5.2 distribution sources and documentation
[thirdparty/bash.git] / CWRU / changelog
index 27f62c0260202a37836372757fe86bd5f8109472..da6d4aa1c36207626e9c7dc7cba546dcb196e3ae 100644 (file)
 
-                                9/15/2016
+                                12/6/2020
                                 ---------
-[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Å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 ÐиÑиллов Ðима <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
+[bash-5.1 released]
 
                                   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>
+Makefile.in
+       - bashline.o: add dependency on ${DEFDIR}/builtext.h. Report from
+         Fazal Majid <fazal@majid.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>
+builtins/wait.def
+       - wait_builtin: don't assign the variable given with -p if there are no
+         jobs to wait for. Report and fix from OÄuz <oguzismailuysal@gmail.com>
 
-                                  12/17
-                                  -----
-expr.c
-       - exp2 -> expmuldiv
+arrayfunc.c
+       - kvpair_assignment_p: return non-zero if argument L appears to be a
+         key-value pair associative array compound assignment
+       - expand_and_quote_kvpair_word: run a single word in a key-value pair
+         associative array compound assignment through the appropriate
+         expansions and single-quote the result
 
-lib/sh/smatch.c
-       - fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being
-         used
+arrayfunc.h
+       - kvpair_assignment_p, expand_and_quote_kvpair_word: extern declarations
 
-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
+subst.c
+       - expand_oneword: detect whether VALUE appears to be a key-value
+         pair compound assignment and call the appropriate function to expand
+         each word in the resulting list. Fixes inconsistency reported by
+         oguzismailuysal@gmail.com
 
-variables.c
-       - rseed: make it explicitly 32 bits; that's all we're interested in
-         anyway
+                                  12/12
+                                  -----
+subst.c
+       - command_substitute: don't reset pipeline_pgrp to shell_pgrp if we
+         are already forked to run a command (SUBSHELL_FORK). Fixes SIGINT
+         in command substitution in here-document in forked child issue
+         reported by oguzismailuysal@gmail.com
 
                                   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]
+execute_cmd.c
+       - execute_pipeline: execute the lastpipe code even if prev == 0. It
+         can only be 0 here if stdin was closed when this function was
+         executed
+       - execute_pipeline: if prev == 0, set lstdin to a sentinel (-1) that
+         means to close fd 0 after executing the command, and call close(prev)
+         before restoring stdin. restore_stdin now understands -1, and closes
+         fd 0. Fixes issue reported by Tomas Janousek <tomi@nomi.cz>
 
                                   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
+doc/bashref.texi
+       - PROMPT_COMMANDS: clean up a couple of remaining instances of this
+         name. Report from Eli Schwartz <eschwartz@archlinux.org>
 
                                   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>
+subst.c
+       - command_substitute: make sure that the child process always has
+         pipeline_pgrp == shell_pgrp: if pipeline_pgrp is non-zero when we
+         get to the child, meaning that we're part of an already-forked
+         child that is, for instance, running redirections, we need to reset
+         shell_pgrp to it to preserve the invariant. Fixes bug with terminal
+         being set to the incorrect pgrp reported by oguzismailuysal@gmail.com
 
-                                  12/27
+                                  12/29
                                   -----
-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
+configure.ac,builtins/shobj-conf,m4/threadlib.m4
+       - midnightbsd: update auto-configuration to treat MidnightBSD like
+         FreeBSD. From https://savannah.gnu.org/patch/?10006
 
-                                  12/28
+                                  12/30
                                   -----
-parser.h
-       - PST_COMMENT: new state, set when the shell is reading characters
-         until newline as part of comment processing
+examples/loadables/stat.c
+       - stattime: use strftime with a default format or the format supplied
+         with the -F option to format the file time information
+       - stat_builtin: now takes a -F fmt option for a strftime format string;
+         change to function calling sequences to pass the format down to
+         stattime
 
-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>
+examples/loadables/Makefile.in
+       - stat: now built and installed by default
 
                                   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>
+command.h
+       - SUBSHELL_IGNTRAP: new flag value
 
-lib/malloc/malloc.c
-       - stdlib.h: include if botch isn't defined to provide a declaration
-         for abort()
+jobs.c
+       - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the
+         child process, meaning that we should not execute trap handlers for
+         trapped signals
 
-hashlib.c,Makefile.in
-       - fixes to make hash library testing work for others from
-         Eduardo Bustamante <dualbus@gmail.com>
+execute_cmd.c
+       - execute_in_subshell, execute_simple_command, execute_disk_command:
+         make sure to unset SUBSHELL_IGNTRAP after a child process restores
+         the original signal dispositions
+       - execute_simple_command: make sure to set SUBSHELL_IGNTRAP after
+         make_child returns and we're setting subshell_environment directly
 
-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>
+subst.c
+       - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after
+         the child process has reset the trapped signal dispositions
 
-                                   1/8
-                                   ---
+trap.c
+       - trap_handler: if we get a signal for which we have set a trap, but
+         SUBSHELL_IGNTRAP is set in subshell_environmnent, make sure we
+         restore the original signal disposition and resend the signal to
+         ourselves. Fixes issue reported by Nikolay Borisov <nborisov@suse.com>
+         (or at least makes the race window much smaller)
 
-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>
+sig.c
+       - initialize_terminating_signal: set the original signal handler from
+         the return value from sigaction; a minor optimization that saves a
+         system call or two
 
+                                1/5/2021
+                                --------
 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>
+       - declare_internal: make some option combinations that don't make
+         sense errors (e.g., -f and -a/-A/-i/-n)
+       - declare_internal: if we build a new variable name by expanding the
+         value of a nameref variable, make sure to chop the `+' in a `+='
+         off before going on
 
-                                   1/9
+                                   1/7
                                    ---
-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>
+doc/{bash.1,bashref.texi}
+       - bind: add an example to the synopsis making it clear that you can
+         use any readline command line as a non-option argument, as it says
+         in the text. From a report from Dan Jacobson <jidanni@jidanni.org>
 
                                   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.
+locale.c
+       - local_shiftstates -> locale_shiftsates in the non-multibyte code
+         branch. Reported by Henry Bent <henry.r.bent@gmail.com>
 
-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>
+subst.c
+       - expand_compound_assignment_word: make sure to call dispose_words on
+         the WORD_LIST * returned from expand_oneword after turning it back
+         into a string. Fixes memory leak reported by Alexander Mescheryakov
+         <alexander.s.m@gmail.com>
 
                                   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())
+       - bind_variable_internal: when performing an assignment to a subscripted
+         array variable that was the value of a nameref (used in the original
+         assignment), don't call make_variable_value on the value, since that
+         messes up +=. Just call assign_array_element and let that take care
+         of calling make_variable_value appropriately. Fixes bug reported by
+         Oguz <oguzismailuysal@gmail.com>
 
-                                  1/29
+                                  1/14
                                   ----
-builtins/evalstring.c
-       - can_optimize_connection,optimize_fork: add the last command in lists
-         separated by `;' to the list of candidates for fork optimization
+findcmd.c
+       - search_for_command: if `checkhash' is set, don't add non-executable
+         files to the command hash table, since we will just remove them
+         later
 
-                                  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>
+lib/sh/winsize.c
+       - get_new_window_size: set *rp and *cp even if READLINE is not defined
 
-                                  1/31
+                                  1/15
                                   ----
-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>
+lib/sh/winsize.c
+       - get_new_window_size: call rl_set_window_size only if we can determine
+         we're using readline: an interactive shell without no-line-editing,
+         or if we've already initialized readline, presumably in a non-
+         interactive shell 
 
-                                   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
+support/Makefile.in
+       - man2html: add LDFLAGS_FOR_BUILD to the recipe. Report from
+         Jeffrey Walton <noloader@gmail.com>
 
-                                  2/11
+                                  1/17
                                   ----
-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
+       - rl_operate_and_get_next: fix old K&R function declaration. Report
+         from Tom Tromey <tom@tromey.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>
+       - _rl_internal_char_cleanup: move code that cleans up the active region
+         and deactivates the mark inside this function so callback mode
+         applications get the intended functionality. Report and fix from
+         sparrowhawk996@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>
+       - rl_parse_and_bind: when using the arithmetic comparison operators on
+         the version, make sure to invert the tests so that we stop parsing
+         if the test fails. Report and fix from Tom Tromey <tom@tromey.com>
 
-                                  2/19
+                                  1/19
                                   ----
+Makefile.in
+       - pipesize.h: add dependency on ${BUILTINS_LIBRARY} to avoid parallel
+         makes trying to create it twice. Report and fix from
+         Richard Purdie <richard.purdie@linuxfoundation.org>
 
-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
+                                  1/21
                                   ----
-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
+subst.c
+       - param_expand: if a nameref expands to array[@] or array[*], make sure
+         to call chk_atstar so the right variables are set to split the
+         result. Report from Oguz <oguzismailuysal@gmail.com>
 
-                                  2/21
+                                  1/22
                                   ----
-builtins/cd.def
-       - bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always
-         failing
+builtins/declare.def
+       - Rewrote to reduce complexity. Still needs some work.
 
-command.h
-       - W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword}
+lib/readline/*.h, lib/tilde/tilde.h
+       - PARAMS: remove, rely on compilers understanding function prototypes
 
-subst.c
-       - expand_string_for_rhs: set W_EXPANDRHS in word to be expanded
+lib/readline/{undo.c,histlib.h}
+        - _hs_replace_history_data: move extern declaration to histlib.h
 
-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
+lib/readline/readline.c
+       - _rl_parse_colors: instead of an extern declaration for this, include
+         "parse-colors.h" for it
 
-                                  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>
+lib/readline/{histfile.c,histlib.h}
+       - _hs_append_history_line: move extern declaration to histlib.h
 
-                                  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>
+lib/readline/history.h
+       - HS_HISTORY_VERSION: define to 0x0801 (current library version) if
+         it's not already defined. We conditionally define it in case an
+         application has (unwisely) chosen to use it, since the history
+         library doesn't do anything with it yet
 
-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>
+lib/readine/{rlprivate.h,{search,misc,readline}.c}
+       - _rl_free_history_entry: add extern declaration to rlprivate.h, remove
+         extern declaration from c source files. Use HS_HISTORY_VERSION as a
+         sentinel that it's ok to use HIST_ENTRY in rlprivate.h
 
-                                  2/25
+lib/readline/{rlprivate.h,{isearch,search,undo}.c}
+       - _rl_saved_line_for_history: add extern declaration to rlprivate.h,
+         remove extern declaration from c source files, using HS_HISTORY_VERSION
+         in the same way
+
+                                  1/24
                                   ----
-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
+lib/readline/signals.c
+       - _rl_handle_signal: make sure that all sigprocmask calls are protected
+         by HAVE_POSIX_SIGNALS. Report and fix from Tom Tromey <tom@tromey.com>
 
-                                  2/26
+                                  1/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>
+lib/readline/callback.c
+       - rl_callback_read_char: make sure rl_linefunc is non-NULL before
+         calling through the pointer. The line function could have been
+         removed by the application before readline processes any typeahead
+         input. Bug reported by Matthias Klose <doko@debian.org>, pointer
+         to root cause from Koichi Murase <myoga.murase@gmail.com>
 
-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>
+lib/glob/glob.c
+       - skipname,wskipname: put in some additional checks for `.' to ensure
+         that we don't get false positives (or incomplete tests) that can 
+         affect the results of extglob patterns. Reported by
+         gregrwm <rhn-users@greatlakedata.com>
 
-                                  2/27
+                                  1/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>
+lib/glob/glob.c
+       - extglob_skipname,wextglob_skipname: fixed an off-by-one error (SE
+         was being set to one character before the end of the pattern string,
+         not the null character at the end of the pattern string like other
+         callers of glob_patscan) that caused the last character of the last
+         subpattern to be cut off when calling skipname
+       - extglob_skipname,wextglob_skipname: some cleanups so the code is
+         closer to identical for the single-byte and wide character versions
 
-                                   3/1
+                                   2/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>
+       - execute_simple_command: in posix mode, if we have a variable
+         assignment error while assigning into the temporary environment (e.g.,
+         assigning to a readonly variable), a non-interactive shell running a
+         special builtin exits; a non-interactive shell running anything else
+         jumps back to the top level. A shell compiled with -DSTRICT_POSIX
+         exits unconditionally.
+       - execute_simple_command: make sure posix mode sets $? to non-zero
+         if a variable assignment error occurs preceding a non-special builtin
 
-                                   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>
+       - do_assignment_statements: take the code from expand_word_list_internal
+         that performs assignment statements, either standalone or preceding 
+         simple command names, and factor it out into this function
+       - expand_word_list_internal: call do_assignment_statements where
+         appropriate
 
-                                   3/7
+                                   2/2
                                    ---
-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>
+       - dequote_pathname: fix function definition for non-multibyte systems.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  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
+Makefile.in,doc/Makefile.in
+       - for certain targets, remove files before creating them to deal with
+         symlinked build trees.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-{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
+examples/loadables/accept.c
+       - include limits.h before typemax.h
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  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>
+builtins/gen-helpfiles.c
+       - if USING_BASH_MALLOC is defined, make sure to undefine malloc as well
+         as free. Fixes bug reported by George R Goffe <grgoffe@yahoo.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)
+builtins/Makefile.in
+       - install-help: now depends on $(HELPFILES_TARGET) so we make sure the
+         separate helpfiles are created before we try to install them if we
+         don't go through the `all' makefile target
 
-array.[ch]
-       - array_subrange: now takes additional PFLAGS argument to pass to
-         string_list_pos_params
+configure.ac
+       - HELPDIR: now ${datadir}/bash/helpfiles
 
-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
+                                   2/3
+                                   ---
+parse.y
+       - parse_string_to_word_list: before expanding a compound assignment
+         statement body, make sure to save any alias that's currently being
+         expanded. Restore the alias after the compound assignment is parsed.
+         Reported back in 11/2020 by Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
 
-subst.c
-       - parameter_brace_substring: add PFLAGS argument to array_subrange
+                                   2/4
+                                   ---
+lib/readline/histexpand.c
+       - history_expand_internal: when calling the history_inhibit_expansion
+         function, make sure to call it using the string as we've expanded it
+         to that point (RESULT), adding the expansion and next characters
+         temporarily, since we make expansion decisions based on what we've
+         accumulated, not what we started with. This makes things like
+         echo abc!$!$ work, where before the second `!' inhibited expansion
+         because bash_history_inhibit_expansion mistakenly took it as the
+         second character in a `$!' word expansion. Fixes bug reported back
+         in 10/2020 by Paul Fox <paul.d.fox@gmail.com>
 
-arrayfunc.c
-       - array_keys: use string_list_pos_params instead of calling
-         string_list_dollar_{star,at} directly.
+array.h
+       - array_pop: instead of calling array_dispose_element from this macro,
+         just call array_shift with the AS_DISPOSE flag
 
-arrayfunc.[ch]
-       - array_keys: now takes a PFLAGS argument, passes to string_list_pos_params
+                                   2/5
+                                   ---
+bashhist.c
+       - shell_comment: move condition to return 0 if the delimiter stack is
+         not empty or the shell is parsing a here document into the function
+         itself, don't have the callers check so the check is in one place.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
 
-subst.c
-       - parameter_brace_expand: add PFLAGS argument to call to array_keys
+array.h,variables.c
+       - ARRAY_ELEMENT_REPLACE: convenience define for modifying an array
+         element's value
 
-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
+variables.c
+       - pop_args: a couple of code simplifications
 
-                                  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
+                                   2/7
+                                   ---
+lib/malloc/malloc.c
+       - pagesz: at least MALLOC_PAGESIZE_MIN (4096) bytes
+       - union mhead: now 16-byte aligned on all systems, 32-bit and 64-bit
+         pointers
+       - binsizes: since the smallest allocation overhead is now 16 bytes,
+         redo the buckets so binsizes[0] == 32; adjust the thresholds for
+         split/coalesce/prepopulate/mmap (NBUCKETS = 28; STARTBUCK = 0).
+         Sizes stay pretty much the same; indices change
+       - consistently use MALLOC_SIZE_T instead of long/unsigned int/int
+       - use MAGIC8_NUMBYTES as the length of the mh_magic8 buffer, in case
+         it changes later for alignment
+       - internal_remap: new function, calls mremap to reallocate a chunk of
+         memory allocated using mmap(); called from internal_realloc if the
+         old size and new size are both bigger than the mmap threshold
+       - internal_realloc: call internal_remap if the old size and new size
+         are both above the threshold where we use mmap for allocation
 
-                                  3/18
+                                  2/10
                                   ----
-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>
+include/timer.h
+       - new file, declaration for a timer struct to be used by a set of
+         functions to implement timers using SIGALRM or select/pselect
 
-                                  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
+lib/sh/timers.c
+       - new file, set of functions to manipulate timer objects and timeouts
+         using SIGALRM or select/pselect. Inspired by a patch from
+         Koichi Murase <myoga.murase@gmail.com>. Not used yet
 
-                                  3/21
+                                  2/11
                                   ----
-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>
+builtins/read.def
+       - read_builtin: if there is a timeout set, block SIGCHLD around calls
+         to zread and its siblings, or calls to readline for `read -e', so
+         SIGCHLD (and the consequent waitpid) doesn't interrupt the read.
+         Fixes bug reported by Koichi Murase <myoga.murase@gmail.com>, but
+         there may be a different fix coming
 
-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
+Makefile.in,builtins/Makefile.in
+       - fix up dependencies, especially on builtins.h and builtext.h
 
-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
+                                  2/12
                                   ----
-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
+lib/readline/input.c
+       - rl_read_key: if we set rl_done == 1, set RL_STATE_DONE as well
+         Reported by Koichi Murase <myoga.murase@gmail.com>
 
-                                  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>
+lib/readline/isearch.c
+       - _rl_search_getchar: only call _rl_read_mbstring if rl_read_key returns
+         >= 0, avoid some work
 
-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>
+lib/readline/vi_mode.c
+       - _rl_vi_callback_change_char,_rl_vi_change_char: don't overwrite the
+         last replacement string if _rl_vi_callback_getchar returns -1.
+         It will likely make no difference, since the next read will return
+         an error or EOF, but being careful
+       - rl_vi_overstrike: if _rl_overwrite_char doesn't return 0, break out
+         of the loop
 
-                                  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
+lib/readline/text.c
+       - _rl_overwrite_char: return 1 if _rl_read_mbstring returns < 0 so
+         we don't try to insert garbage
 
-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
+bashline.c
+       - posix_edit_macros: handle rl_read_key() returning <= 0
 
-                                  3/28
+                                  2/15
                                   ----
-variable.c
-       - seedrand: add a couple more variables to the random seed
+parse.y
+       - read_comsub: make sure to turn on the LEX_RESWDOK flag if we are in
+         a case statement and read a `)', since we can get a valid `esac'.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
+       - read_comsub: if we're in a case statement, recognize `}' as a
+         reserved word and set the LEX_RESWDOK flag for the next word, since
+         we can get an esac (or another reserved word) after it
 
-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
+                                  2/16
+                                  ----
+parse.y
+       - reserved_word_acceptable: add ARITH_CMD and COND_END to the list of
+         tokens that can precede a reserved word, so you can use reserved
+         words after ((...)) and [[...]].
+         Reported by Koichi Murase <myoga.murase@gmail.com>
 
-config-{top,bot}.h
-       - set up to use mkdtemp if available
+                                  2/17
+                                  ----
+parse.y
+       - parse_comsub: use new LEX_CASEWD flag to track when we are reading
+         the WORD in `case WORD in' and turn on the LEX_RESWDOK flag when
+         that word ends. This allows $(case x in esac), which no one uses.
+       - parse_comsub: use LEX_PATLIST flag to track when we are reading a
+         case pattern list so `|' doesn't turn on the LES_RESWDOK flag
+       - parse_comsub: case_level: simple counter to count the number of esacs
+         we need to see before we're no longer in a case statement; analog of
+         esacs_needed_count from the lexer
 
-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
+                                  2/19
+                                  ----
+parse.y
+       - CHECK_FOR_RESERVED_WORD: don't return ESAC if we read `esac' after a
+         left paren in a case pattern list. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
+       - parse_comsub: if we read a `(' while looking for a case pattern list
+         and LEX_CKESAC is set, we have a leading left paren in the pattern
+         list and should turn off LEX_CKESAC so (esac) doesn't prematurely
+         terminate the case command. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
 
-examples/loadables/mktemp.c
-       - mktemp: new loadable builtin, with BSD options and basic semantics
+                                  2/26
+                                  ----
+builtins/history.def
+       - history_builtin: when checking negative offsets to -d, which are
+         supposed to count back from the end of the history list, check the
+         range against 0 instead of history_base, because the calculation is
+         done against history_length, which is independent of history_base.
+         Report and fix from Christopher Gurnee <chris@gurneeconsulting.net>
 
-                                  3/29
+                                  2/28
                                   ----
-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
+doc/bashref.texi
+       - replaced a number of uses of @var with a mixture of @env and @dfn
+         to better match up with the texinfo standards
 
-builtins/read.def
-       - bind_read_variable: now uses builtin_bind_variable
+doc/{bash.1,bashref.texi}
+       - clarify some aspects of the coproc description, especially the
+         use of NAME and when it's optional
 
-                                   4/4
+                                   3/1
                                    ---
-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>
+subst.c
+       - read_comsub: fix off-by-one error in mbrtowc that causes a read one
+         character past the end of buf. Report and fix from
+         Platon Pronko <platon7pronko@gmail.com> in
+         https://savannah.gnu.org/patch/?10035
 
-                                   4/8
+                                   3/3
                                    ---
-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
+builtins/ulimit.def
+       - ulimit_builtin: Posix compatibility: if the last command specified
+         by an option does not have an option argument, but there is an
+         operand remaining after all the options are parsed, treat the
+         operand as an argument to that last command. From an austin-group
+         discussion and a Geoff Clare suggestion back in November, 2020.
+         Austin Group interpretation 1418
+
+examples/shellmath
+       - a package of shell functions to perform floating-point math entirely
+         in bash. Contributed by Michael Wood <mawood20@gmail.com>. Available
+         at https://github.com/clarity20/shellmath
+
+                                   3/4
                                    ---
-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"
+support/shobj-conf
+       - darwin: take out the -arch-only option in SHOBJ_XLDFLAGS and
+         SHOBJ_ARCHFLAGS; no longer needed
 
-                                  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
+doc/{bash.1,bashref.texi}
+       - coprocesses: suggested changes from rms@gnu.org; recommend the
+         `coproc NAME { commands; }' form as the simplest and most flexible
 
-lib/sh/zmapfd.c
-       - zmapfd: increased the default allocation sizes
+                                   3/5
+                                   ---
+builtins/exec.def
+       - exec_builtin: set last_command_exit_value before calling exit_shell
+         so any exit trap gets the right value for $?. From Matthew Bauer
+         <mjbauer95@gmail.com> via https://savannah.gnu.org/patch/?10039
 
-lib/sh/zcatfd.c
-       - zcatfd: increased the default allocation sizes
+                                   3/8
+                                   ---
+include/timer.h
+       - SHTIMER_ALRMSET: new flag, indicates that there is an active alarm
+         associated with this timer (falarm() was called)
 
-input.c
-       - localbuf: increased the default buffer size for reads
+lib/sh/timers.c
+       - shtimer_set: set the SHTIMER_ALRMSET flag after calling falarm
+       - shtimer_unset: don't call falarm(0,0) unless the SHTIMER_ALRMSET flag
+         is set
 
-                                  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
+                                   3/9
+                                   ---
+include/posixtime.h
+       - added some BSD convenience defines if they are not present
 
-                                  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>
+parse.y,shell.h
+       - {save,restore}_parser_state: save and restore shell_eof_token and
+         pushed_string_list; change callers (e.g., xparse_dolparen) so they
+         don't have to manage them
 
-                                  4/14
+                                  3/10
                                   ----
-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>
+builtins/common.h
+       - extern declarations for moving to timers (sh_timer) for read builtin
+         timeouts
 
-                                  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>
+quit.h
+       - CHECK_ALRM: remove, no longer used
 
-                                  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
+trap.c
+       - check_signals: call check_read_timeout instead of CHECK_ALRM
 
-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>
+       - bash_event_hook: use read_timeout instead of checking `sigalrm_seen';
+         that no longer exists
+       - bash_event_hook: accommodate readline timing out (not used yet)
 
+lib/sh/zread.c
+       - zread: call read_builtin_timeout() to check for a timeout before
+         calling a blocking read()
+         
 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
+       - sigalrm,reset_timeout,check_read_timeout,read_builtin_timeout: new
+         and modified functions to use sh_timers for timeouts instead of
+         SIGALRM. Based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
+       - read_builtin: use sh_timers for read timeouts (-t N) instead of
+         using SIGALRM
+       - edit_line: simulate receiving SIGALRM if readline times out (not
+         used yet)
 
-                                  4/24
+                                  3/11
                                   ----
-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>
+lib/readline/readline.c
+       - rl_initialize: call _rl_timeout_init to set things up for any timeout 
+         that was set with rl_set_timeout
+       - readline_internal_charloop: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline(). The readline timeout changes
+         were based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
 
-                                  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
+lib/readline/readline.h
+       - extern declarations for new timeout functions and hook
+       - rl_clear_timeout: new define
 
-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>
+lib/readline/callback.c
+       - rl_callback_read_char: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline()
 
-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>
+lib/readline/util.c
+       - _rl_abort_internal: if we time out, don't ring the bell; let the
+         caller handle it
 
-                                   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
+lib/readline/input.c
+       - extern declarations for public and readline-library-private functions
+         and hooks to implement timeouts
+       - rl_set_timeout,rl_timeout_remaining: new public functions
+       - _rl_timeout_select: new function, uses select/pselect to implement
+         read timeouts that take timeouts set with rl_set_timeout into account;
+         calling hook function if a timeout occurs
+       - rl_gather_tyi, _rl_input_available: use _rl_timeout_select, taking
+         any existing timeout into consideration if it expires before the
+         timeout passed as an argument
+       - rl_getc: use _rl_timeout_select and handle any timeouts by calling
+         _rl_timehout_handle
+       - set_alarm,reset_alarm: new functions to implement timeouts using
+         SIGALRM for systems that lack a working select/pselect
+       - _rl_timeout_init: new function, sets things up for reading input
+         with a specified timeout
+       - _rl_timeout_handle: a timeout handler; calls any event hook and
+         sets up to abort the current readline() call
+       - _rl_timeout_handle_sigalrm: a timeout handler for systems using
+         SIGALRM to implement timeouts
+
+lib/readline/parens.c
+       - rl_insert_close: use _rl_timeout_select to take timeouts into account
 
-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>
+lib/readline/rlprivate.h
+       - extern declarations for readline-library-private timeout functions
 
-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/rltty.c
+       - rl_deprep_terminal: don't print a newline after the bracketed paste
+         disable sequence if we timed out
 
-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>
+lib/readline/signals.c
+       - _rl_handle_signal: if sig is SIGALRM, call _rl_timeout_handle_sigalrm()
 
-configure.ac
-       - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS
+lib/readline/doc/rltech.texi
+       - rl_set_timeout,rl_timeout_remaining: document new public functions
+       - RL_STATE_TIMEOUT: document new possible state value for rl_readline_state
+       - rl_timeout_event_hook: document new hook function, called when
+         readline times out
 
-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>
+builtins/read.def
+       - read_builtin: changes to use the readline timeout functions to
+         implement timeouts with `read -e'; these use rl_set_timeout and
+         sh_timer structs together
 
-                                  5/12
+                                  3/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
+subst.c
+       - expand_string_dollar_quote: new function, expands $'...' and $"..."
+         in a string for those code paths that don't expand it themselves
 
-                                  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)
+subst.h
+       - expand_string_dollar_quote: extern declaration
 
-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
+parse.y
+       - read_secondary_line: if $'...' or $"..." appears in the line, call
+         expand_string_dollar_quote to expand them. This now returns new
+         memory, need to change callers
 
-                                  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>
+make_cmd.c
+       - make_here_document: account for read_secondary_line returning newly
+         allocated memory, free `full_line' appropriately
 
-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>
+bashline.c
+       - shell_expand_line,history_and_alias_expand_line: expand $'...' and
+         $"..." in the line by calling expand_string_dollar_quote, since
+         that happens after history expansion and before alias expansion in
+         normal processing 
 
-                                  5/17
+                                  3/15
                                   ----
-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>
+subst.c
+       - expand_string_dollar_quote: fix out-of-order initialization
 
-                                  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
+Makefile.in
+       - {TAGS,tags}: add ETAGS/ETAGSFLAGS/CTAGS/CTAGS flags; make sure to
+         cd to the source directory before running them to get source files
+         that don't have absolute paths. Fix from Mike Jonkmans
+         <bashbug@jonkmans.nl>
 
-                                  5/19
+parse.y
+       - xparse_dolparen: don't longjmp if FLAGS includes SX_NOLONGJMP. From
+         a report by Xu Lu <oliver_lew@outlook.com>
+
+                                  3/16
                                   ----
-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
+subst.c
+       - process_substitute: set startup_state and parse_and_execute_level
+         to see if we can avoid a fork()
+
+bashline.c
+       - bash_spell_correct_word: bindable command (spell-correct-word) to
+         perform spelling correction on the current `shellword', using the
+         same code as the `cdspell' option and directory spelling correction
+         during completion. Feature suggested by in 10/2020 by
+         Karl Kleinpaste <karl@kleinpaste.org>
+       - bash_spell_correct_word: bound to "C-x s" by default in emacs mode
+
+lib/readline/display.c
+       - rl_redisplay: fix redisplay problem that occurs when switching from
+         the rl-digit-argument prompt "(arg: N)" back to the regular prompt,
+         and the regular prompt contains invisible characters
+
+doc/bash.1,lib/readline/doc/rluser.texi
+       - spell-correct-word: document new function and its default binding
 
-                                  5/20
+                                  3/17
                                   ----
 doc/{bash.1,bashref.texi}
-       - SRANDOM: document new special variable
+       - cd: slight changes to specify that it sets PWD and OLDPWD
+       - {pushd,popd}: make it clear that these builtins use cd to change
+         the current working directory; change wording to simplify the
+         description and clarify the exit status
 
-                                  5/22
+                                  3/18
                                   ----
-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>
+execute_cmd.c
+       - execute_disk_command: after performing redirections, call
+         unlink_all_fifos() to remove the FIFOs created as part of
+         expanding redirections. They should have been opened by then, and
+         we're going to call shell_execve right away anyway, so we won't be
+         around to remove the FIFOs. From a report from
+         Michael Felt <aixtools@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>
+                                  3/22
+                                  ----
+parse.y
+       - alias_expand_token: slight tweak to check for alias expansion: perform
+         expansion unconditionally if PST_ALEXPNEXT is set, and disable it
+         in case statement pattern lists if the previous token indicates a
+         command name is acceptable.
+         From a report by Oguz <oguzismailuysal@gmail.com>
+
+config-bot.h
+       - HAVE_MKDTEMP: fix typo
 
-                                  5/23
+                                  3/25
                                   ----
-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>
+lib/readline/terminal.c
+       - look in terminfo for key sequences for page up (kP) and page down
+         (kN) and bind them to history-search-{backward,forward},
+         respectively. From a patch from Xose Vazquez Perez
+         <xose.vazquez@gmail.com>
 
-                                  5/24
+                                  3/30
                                   ----
-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>
+doc/bashref.texi
+       - expand the node describing $"..." string translation with additional
+         details and examples
 
-                                  5/30
+                                  3/31
                                   ----
-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
+misc.c
+       - rl_fetch_history: moved here from vi_mode.c
+       - rl_fetch_history: negative arguments count back from the end of
+         the history, instead of taking you to the beginning of the history
+         list
+       - rl_fetch_history: in vi mode, an out-of-range argument rings the
+         bell and doesn't change the line
 
-{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
+vi_mode.c
+       - rl_vi_fetch_history: call rl_fetch_history
 
-jobs.h
-       - wait_for_job, wait_for_background_pids: add additional argument to
-         declaration
+readline.h
+       - rl_fetch_history: new extern declaration
 
-builtins/wait.def
-       - wait_builtin: set pstat.{pid,status} each time through the pid-or-job
-         loop and for wait without arguments
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - rl_fetch_history: add description
+
+builtins/setattr.def
+       - show_var_attributes: if a variable's value indicates that it should
+         be ANSI-C quoted, use ansic_quote instead of sh_double_quote to
+         format the value string. From proposal by Greg Wooledge
+         <greg@wooledge.org>
 
-                                   6/4
+                                   4/5
                                    ---
-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>
+arrayfunc.c
+       - unbind_array_element: if FLAGS includes VA_ONEWORD, don't use
+         skipsubscript to parse the subscript, just assume the entire SUB is
+         the subcript and that it contains the closing `]', so we just want
+         everything in SUB except the last character.
 
-config-top.h
-       - CASEMOD_CAPCASE: no longer defined by default
+parse.y:
+       - select_command: use compound_list instead of list, like for_command.
+         Report by Greywolf <greywolf@starwolf.com>
+       - list: move this into compound_list (replacing the instance of `list'
+         in the compound_list production), remove from the grammar
 
-                                   6/5
+                                   4/6
                                    ---
-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
+arrayfunc.c
+       - unbind_array_element: use VA_NOEXPAND instead of literal 1
 
-                                   6/7
+                                   4/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>
+lib/readline/funmap.c
+       - default_funmap: add missing `vi-undo' to the list of vi-mode bindable
+         functions. Reported by Xirui Zhao <quinean@icloud.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>
+                                   4/8
+                                   ---
 
-                                  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
+config-top.h
+       - DEFAULT_LOADABLE_BUILTINS_PATH: default value for BASH_LOADABLES_PATH
+
+doc/{bash.1,bashref.texi}
+       - enable: note that it uses $BASH_LOADABLES_PATH, and that the default
+         is system-dependent
 
-                                  6/12
+variables.c
+       - initialize_shell_variables: initialize BASH_LOADABLES_PATH to the
+         default given in DEFAULT_LOADABLE_BUILTINS_PATH
+
+                                  4/12
                                   ----
-jobs.c
-       - wait_for_background_pids: wait for the last procsub only if it's the
-         same as last_asynchronous_pid
+doc/{bash.1,bashref.texi}
+       - add link to git master tar file as a place to get the current version
 
+                                  4/14
+                                  ----
 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>
+       - attempt_shell_completion: use -1 as a sentinel value for
+         in_command_position indicating that we cannot be in a command position
+         (e.g., because we're the target of a redirection) and should not
+         check for a programmable command completion or tell the programmable
+         completion code to use command completion. Report and fix from
+         Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  6/13
+                                  4/16
                                   ----
-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
+builtins/bind.def
+       - bind_builtin: reverse sense of strvec_search return value when
+         deciding whether or not to remove a unix-command binding from the
+         cmd keymap. Bug report by Dale Sedivec <dale@codefu.org>
 
-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
+lib/readline/doc/rltech.texi
+       - RL_PROMPT_{START,END}_IGNORE: document current values of \001 and
+         \002. Report from Mingye Wang <arthur200126@gmail.com>
 
-                                  6/14
+                                  4/19
                                   ----
-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
+arrayfunc.c
+       - assign_assoc_from_kvlist: fix memory leak reported by konsolebox
+         <konsolebox@gmail.com>
 
-                                  6/15
+                                  4/20
                                   ----
-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>
+command.h,subst.c
+       - W_ITILDE: remove, replace with a variable since it's only used inside
+         a single call to expand_word_internal
 
-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
+                                  4/21
+                                  ----
+{subst.c,make_cmd.c,parse.y}
+       - W_DQUOTE: no longer used, use W_NOPROCSUB and W_NOTILDE directly
+         (for arithmetic commands and words in arithmetic for commands)
 
-                                  6/19
+                                  4/24
                                   ----
-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.
+bashline.c
+       - executable_completion: since this function gets an unquoted filename
+         from rl_filename_completion_function, we need to quote special
+         characters before passing it to bash_directory_completion_hook.
+         Report from Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
+
+                                  4/26
+                                  ----
+lib/readline/search.c
+       - _rl_nsearch_abort: move function calls around so _rl_restore_prompt
+         happens before rl_clear_message, like when aborting an incremental
+         search. Suggested by sparrowhawk996@gmail.com
+
+subst.h
+       - ASS_ALLOWALLSUB: new assignment flag value, means to allow @ and * as
+         valid array subscripts when assigning to existing associative arrays
+
+arrayfunc.c
+       - assign_array_element: allow assignment of key `@' to an existing
+         associative array if the caller passes ASS_ALLOWALLSUB
+       - assign_compound_array_list: allow ( [@]=value ) to an existing
+         associative array
+
+builtins/declare.def
+       - declare_internal: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element
+         as part of local_aflags. This affects declare, local, and typeset
+
+subst.c
+       - do_assignment_internal: allow a[@]=value to an existing associative
+         array by passing ASS_ALLOWALLSUB to assign_array_element
+
+                                  4/27
+                                  ----
+builtins/common.[ch]
+       - builtin_bind_var_to_int: wrapper for bind_var_to_int to be used by
+         builtin commands; placeholder for future work
+
+builtins/wait.def
+       - builtin_bind_var_to_int: use instead of bind_var_to_int
 
-                                  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
+builtins/common.c
+       - builtin_bind_variable: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element.
+         This affects printf and read
 
-pathexp.h
-       - posix_glob_backslash: new extern declaration
+builtins/variables.[ch]
+       - bind_var_to_int: add third `flags' argument to pass to bind_variable
+         instead of always passing 0
 
-builtins/shopt.def
-       - posixglob: new option, reflects the value of posix_glob_backslash
+redir.c,builtins/common.c,builtins/printf.def
+       - bind_var_to_int: change callers, add third flags argument
 
-general.c
-       - posix_vars: add posix_glob_backslash to the table
-       - posix_initialize: set posix_glob_backslash to 1 when turning on
-         posix mode
+builtins/common.c
+       - builtin_bind_var_to_int: pass ASS_ALLOWALLSUB to bind_var_to_int so
+         builtins like wait can assign to assoc[@] and assoc[*]
 
-                                  6/21
+                                  4/28
                                   ----
-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
+bashline.c
+       - command_word_completion_function: make sure to initialize
+         old_glob_ignore_case before trying to restore from it
+       - command_word_completion_function: if we are completing a glob
+         pattern, make sure to set rl_filename_completion_desired, so we get
+         quoting and appending -- we are completing a filename, after all.
+         From a report from Manuel Boni <ziosombrero@gmail.com>
 
-                                  6/27
-                                  ----
-{config.h.in,configure.ac}
-       - setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as
-         appropriate
+lib/readline/bind.c
+       - enable-active-region: separate control of the active region and
+         bracketed paste. Still set to the same default value as bracketed
+         paste, and enabling bracketed paste enables the active region.
+         Now you can enable bracketed paste and then turn off the active
+         region.
 
-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
+doc/bash.1,lib/readline/doc/{readline.3,rltech.texi}
+       - enable-active-region: document new bindable readline variable and
+         its effects
 
-                                  6/28
+                                  4/30
                                   ----
-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>
+command.h
+       - W_ARRAYREF: new flag, meaning the word is a valid array reference
+         with subscript, replaces W_DOLLARSTAR, which was unused
 
-bashline.c
-       - completion_glob_pattern: just call glob_pattern_p and make sure it
-         returns 1 (non-backslash globbing characters)
+subst.c        
+       - expand_subscript_string,expand_array_subscript: new functions to
+         parse and expand-and-quote array subscripts. For future use
 
-builtins/help.def
-       - help_builtin: don't try pattern matching the help topic argument
-         unless glob_pattern_p returns 1
+                                   5/3
+                                   ---
+builtins/mapfile.def
+       - mapfile: if the delimiter is a newline, set unbuffered_read = 1
+         for any file descriptor that isn't seekable and lseek sets errno
+         to ESPIPE (pipes, FIFOs, maybe terminal devices). If it's not a
+         newline, only allow buffered reads if the file descriptor is a
+         regular file. Report from Koichi Murase <myoga.murase@gmail.com>
 
-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>
+builtins/read.def
+       - read_builtin: only set unbuffered_read = 1 if the input is coming
+         from a pipe (which we can't seek on) or the input is a terminal and
+         we want to read a specified number of characters or we're using a
+         non-standard delimiter
 
-                                   7/1
+                                   5/4
                                    ---
-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
+builtins/mapfile.def
+       - mapfile: call zsyncfd before calling the callback. Suggested by
+         Koichi Murase <myoga.murase@gmail.com>; we'll see how it goes
 
-                                   7/3
+                                   5/5
                                    ---
-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
+subst.h
+       - expand_subscript_string: extern declaration
 
-                                   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
+{arrayfunc,subst}.c
+       - expand_subscript_string: replace expand_assignment_string_to_string
+         with calls to this when expanding array subscripts
 
-                                   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>
+subst.c
+       - cond_expand_word: call expand_word_internal with Q_ARITH if `special'
+         says we should quote for an arithmetic expression context
+       - expand_word_internal: call expand_array_subscript when we see `[' in
+         arithmetic or array subscript contexts, make conditional on the
+         compatibility level later
+       - expand_word_internal: make sure W_ARRAYREF makes it through this
+         function and into the returned word
 
-                                   7/9
+                                   5/6
                                    ---
-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
+arrayfunc.c
+       - array_expand_index: call evalexp with a flag of 0 since we call
+         expand_arith_string with Q_ARITH and we want evalexp to remove
+         the quotes
+
+execute_cmd.c
+       - eval_arith_for_expr,execute_arith_command: now that Q_ARITH has an
+         effect on array subscripts (it quotes the special expansion
+         characters), call evalexp with 0 as the flags arg so quote removal
+         is performed on this quoted argument. Make this conditional on the
+         shell compatibility level later
+       - execute_cond_command: make sure to expand the argument to -v by
+         calling cond_expand_node with Q_ARITH, and correspondingly turn off
+         assoc_expand_once when calling unary_test with that argument, since
+         we want it to be expanded again to remove the quotes
+       - execute_cond_command: expand the arguments to the arithmetic operators
+         with Q_ARITH and pass TEST_ARITHEXP to binary_test to ensure that
+         it lets evalexp expand the arguments to remove the quoting
 
-                                  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)
+test.c
+       - arithcomp: if TEST_ARITHEXP is in FLAGS, call evalexp with a flag
+         if 0 to force evalexp to expand the arguments to remove the quoting
 
-                                  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>
+subst.c
+       - param_expand: since we call expand_arith_string with Q_ARITH, we need
+         to call evalexp with 0 instead of EXP_EXPANDED for $((...)) expansion
+       - expand_word_internal: if we recursively call expand_word_internal to
+         expand the contents of a double-quoted string, make sure we pass
+         through Q_ARITH if it appears in QUOTED
+       - verify_substring_values: call expand_arith_string with Q_ARITH and
+         correspondingly call evalexp with 0 instead of EXP_EXPANDED
 
-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
+execute_cmd.c
+       - execute_cond_node: if -v is the operator, and the operand is a valid
+         array reference, pass TEST_ARRAYEXP flag to unary_test
 
-                                  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>
+                                   5/7
+                                   ---
+builtins/common.[ch]
+       - set_expand_once: set array_expand_once to the value passed as the
+         first argument, returning the original value
 
-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>
+builtins.h
+       - ARRAYREF_BUILTIN: new flag for shell builtins, means that the builtin
+         can take array references, with subscripts, as arguments
 
-                                  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
+builtins/mkbuiltins.c
+       - set ARRAYREF_BUILTIN flag on builtins given in the arrayvar_builtins
+         array
 
-                                  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
+execute_cmd.c
+       - execute_cond_node: use set_expand_once to set array_expand_once to 0
+         before calling unary_test with -v (see change from 5/6)
 
 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>
+       - unbind_array_element: allow the caller to choose whether or not a
+         subscript of `*' or `@' unsets the entire array by passing
+         VA_ALLOWALL in FLAGS. Right now, since the unset builtin doesn't
+         pass VA_ALLOWALL, those subscripts unset individual elements for
+         associative arrays. We preserve the old behavior of unsetting
+         indexed arrays for the time being with new indexed-array-specific
+         code
 
-                                  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>
+                                   5/9
+                                   ---
 
-shell.c
-       - set_exit_status: set last_command_exit_value to the argument and make
-         sure to set PIPESTATUS from that exit value
+builtins/shopt.def
+       - expand_once_flag: "assoc_expand_once" option now sets this flag,
+         calls set_assoc_expand on change
+       - set_assoc_expand: sets assoc_expand_once to mirror expand_once_flag;
+         placeholder for future changes
 
-shell.h
-       - set_exit_status: extern declaration
+builtins/common.h
+       - expand_once_flag: 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
+                                  5/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - note that case patterns undergo quote removal. Reported by
+         AlvinSeville7cf <alvinseville7cf@gmail.com>
 
-sig.c
-       - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set
-         last_command_exit_value
+                                  5/11
+                                  ----
 
-variables.c
-       - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value
+builtins/bashgetopt.c
+       - list_optflags: flags associated with the word corresponding to
+         list_optarg, assuming list_optarg is a separate argument
 
-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/bashgetopt.h
+       - list_optflags: extern declaration
 
-builtins/evalstring.c
-       - parse_and_execute: set PIPESTATUS when we set last_command_exit_value
+builtins/set.def
+       - unset_builtin: set VFLAGS each time through the loop, since we take
+         whether or not the word has W_ARRAYREF set into account
+       - unset_builtin: don't pass VA_ALLOWALL to unbind_array_element for
+         now
 
-braces.c
-       - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value
+test.c
+       - unary_test: in the -v case, use assoc_expand_once in the first call
+         to valid_array_reference ()
 
-eval.c
-       - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value
+builtins/printf.def
+       - printf_builtin: only set VA_ONEWORD if the option argument to -v has
+         W_ARRAYREF set (look at list_optflags)
 
-make_cmd.c
-       - set PIPESTATUS when setting $? due to syntax errors or constructs
-         not being available
+                                  5/12
+                                  ----
+
+subst.c
+       - expand_array_subscript: don't quote @ or * in the expanded subscript
+         at all, even when they are the only character in the subscript. See
+         how this works out -- it might uncover places where we need to allow
+         `*' and `@' as subscripts where they are not allowed now
 
 expr.c
-       - expr_streval: set PIPESTATUS when setting $? due to syntax errors
+       - expr_bind_variable: pass ASS_ALLOWALLSUB to bind_int_variable so we
+         can allow (( A[@]=value )) when A is an existing associative array
 
-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
+arrayfunc.h
+       - AV_ATSTARKEYS: new flag value, means to accept a[@] and a[*] but
+         treat them as keys/expressions and not special values
 
-redir.c
-       - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value
-         on error conditions
+arrayfunc.c
+       - array_value_internal: check AV_ATSTARKEYS and don't treat them as
+         ALL_ELEMENT_SUB values; they fall through to use as keys/indices
 
-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>
+test.c
+       - unary_test: if -v is passed an array reference, add AV_ATSTARKEYS to
+         the flags passed to array_value so we treat @ and * as keys for an
+         existing associative array
 
-                                  7/22
+                                  5/13
                                   ----
-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
+subst.c
+       - expand_cond_word: if SPECIAL == 3 (arithmetic expression), dequote the
+         resulting WORD_LIST * as if special == 0, because we don't want to
+         quote the list for pattern matching. Report from
+         Adjudicator Darren <adjudicatordarren@protonmail.com>
 
-                                  7/29
+                                  5/14
                                   ----
-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
-
+subst.c
+       - expand_array_subscript: add double quote (") to the list of characters
+         that are backslash-quoted in subscripts after word expansion.
+         skipsubscript treats them specially, so you have to quote them to
+         do things like `key='"' ; array[$key]=1 ; [[ -v array[$key] ]]'
 
-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
+                                  5/16
                                   ----
-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
+builtins/wait.def
+       - wait_builtin: if we longjmp to wait_intr_buf, call unset_waitlist if
+         we have called set_waitlist (wflags & JWAIT_WAITING). Fixes bug with
+         wait -n interrupted by a trapped signal (not SIGINT) reported by
+         Jonas Alfredsson <jonas.alfredsson@protonmail.com>
 
-lib/readline/misc.c
-       - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key
+jobs.c
+       - wait_sigint_cleanup: restore the old sigint handler before we longjmp
+         out by calling restore_sigint_handler()
 
-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
+                                  5/17
                                   ----
-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>
+builtins/read.def
+       - bind_read_variable: now takes an additional argument, flags to pass
+         to builtin_bind_variable; change callers
+       - SET_VFLAGS: set vflags and bindflags
+       - read_builtin: call SET_VFLAGS to set vflags and bindflags from each
+         word before calling valid_array_reference and bind_read_variable
 
-                                  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
+builtins/common.c
+       - builtin_bind_variable: set vflags (for valid_array_reference) and
+         bindflags (for bind_variable/assign_array_element) separately for
+         clarity
 
-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
+arrayfunc.c
+       - assign_array_element: sanity check: make sure that the subscript
+         returned by array_variable_name consumes the entire NAME, otherwise
+         flag it as a subscript error. This keeps things like
+         `KEY=' ]'; read assoc[$KEY] <<< hello' from assigning to incomplete
+         subscripts
 
-bashhist.c
-       - enable_history_list: initialize to -1 to note when it gets changed
-         by -o history or +o history at invocation
+builtins/printf.def
+       - printf_builtin: if LIST_OPTFLAGS includes W_ARRAYREF, set VA_NOEXPAND
+         in VFLAGS
 
-                                  8/28
+                                  5/17
                                   ----
-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
+lib/readline/complete.c
+       - compute_lcd_of_matches: move a couple of strlen calls out of a loop
+         in calls to mbrtowc; performance improvement only. Report and fix
+         from sparrowhawk996@gmail.com
 
-                                  8/30
-                                  ----
-tests
-       - add copyright notices to all scripts longer than 15 lines at the
-         request of the FSF
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: take a key sequence and its length and
+         return the index into the key sequence following any initial numeric
+         argument. Return -1 if there is no numeric argument (the caller is
+         expected to make sure) or if the key sequence consists *only* of
+         the numeric argument. The caller should use the remainder of the
+         key sequence to look up the desired key binding.
 
-                                   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.
+lib/readline/readline.h
+       - rl_trim_arg_from_keyseq: extern declaration
 
-                                   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>
+       - bash_execute_unix_command: if the argument count is > 1 or we have
+         an explicit argument, call rl_trim_arg_from_keyseq to get past the
+         numeric argument and deal with the rest of the key sequence. We still
+         need a way to pass it to the invoked program or function. From
+         a report from Jesper Nygards <jesper.nygards@gmail.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
+                                  5/18
                                   ----
-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
+bashline.c
+       - bash_execute_unix_command: if the user supplied a numeric argument
+         when invoking bash_execute_unix_command, pass it to the command in
+         the READLINE_ARGUMENT variable
 
-shell.c
-       - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of
-         the HAVE_DECL variants, which always fail configure tests
+lib/readline/readline.[ch]
+       - _rl_del_executing_keyseq: convenience function to `delete' the last
+         character added to the executing key sequence. Intended to be used
+         before calling rl_execute_next or similar functions that push input
+         back to be re-read
 
-m4/intl.m4
-       - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in
-         newer gettext releases
+doc/{bash.1,bashref.texi}
+       - READLINE_ARGUMENT: documented new variable available for commands
+         defined using `bind -x' keybindings
 
-                                  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>
+lib/readline/doc/rltech.texi
+       - rl_trim_arg_from_keyseq: documented new function
 
-builtins/{reserved,complete,exec,getopts}.def
-       - minor typographical fixes from Roland Illig <roland.illig@gmx.de>
+                                  5/19
+                                  ----
 
-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/evalstring.c
+       - should_suppress_fork: suppress the fork if we're in a process
+         substitution subshell, in addition to being a simple command
+         without redirections. From a report back in 10/2020 from
+         Hyunho Cho <mug896@gmail.com>
 
-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>
+bashline.c
+       - command_word_completion_function: if we're trying to complete an
+         absolute program (one containing a slash), don't run strcmp or
+         strcasecmp on the return value from rl_filename_completion_function,
+         since that duplicates work the filename completion function already
+         does. From a report back in 1/2021 by awa54@cdak.net
 
-                                  9/17
+                                  5/22
                                   ----
-jobs.[ch]
-       - save_proc_status: external interface to bgp_add, takes care of
-         blocking and unblocking SIGCHLD
-       - __P -> PARAMS
+parse.y
+       - CHECK_FOR_RESERVED_WORD: if we are returning an ESAC and unsetting
+         PST_CASESTMT, decrement esacs_needed_count
 
-                                  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
+parse.y,shell.h
+       - sh_parser_state_t: save and restore esacs_needed_count and
+         expecting_in_token in the shell parser state struct and
+         save_parser_state/restore_parser_state
 
-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
+print_cmd.c
+       - print_simple_command: don't bother to call command_print_word_list
+         with an empty list
+       - print_simple_command: don't print a space before a redirection list
+         if there weren't any command words to print
 
-sig.c
-       - termsig_handler: replace discard_last_procsub_child with call to
-         procsub_clear
+                                  5/24
+                                  ----
 
-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>
+lib/sh/input_avail.c
+       - nchars_avail: make sure SET and OSET are declared on systems with
+         select(2). Reported by Larkin Nickle <me@larbob.org>
 
-                                  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>
+       - cond_term: if we read a `!' toggle CMD_INVERT_RETURN instead of
+         setting it unconditionally. Report and patch from
+         Vincent Menegaux <vincent.menegaux@gmail.com> via
+         https://savannah.gnu.org/patch/?10070
 
-                                  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
+                                  5/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
+       - test: add the ( $2 $3 ) case to the description of the four-argument
+         behavior. Inspired by a discussion with Christoph Anton Mitterer
+         <calestyo@scientia.net>
 
-                                  9/26
+                                  5/27
                                   ----
-{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
+doc/bashref.texi
+       - replace most of the GNU parallel section with a reference to the
+         tutorial on gnu.org
 
-                                  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.h
+       - GX_NEGATE: new flag; indicates whether the pattern is being negated
+         as part of an extglob pattern. Not used yet
 
 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>
+       - extglob_skipname,wextglob_skipname: pass GX_NEGATE to the skipname
+         functions if the pattern is being negated. Not checked yet
 
-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
+                                  5/28
                                   ----
-builtins/shopt.def
-       - reset_shopt_options: add in resets for some missing shopt options.
-         Report and fix from Grisha Levit <grishalevit@gmail.com>
+doc/{bash.1,bashref.texi}
+       - dotglob: add text to clarify that `.' and `..' have to be matched by
+         a pattern beginning with `.' or -- and this is the sketchy part --
+         that a pattern beginning with `.' has to be one of the patterns in
+         an extended glob expression
 
-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
+lib/glob/glob.c
+       - skipname,wskipname: perform the special checks for `.' only if the
+         pattern is not being negated
 
-                                  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
+                                   6/3
+                                   ---
+parse.y,shell.h
+       - eol_ungetc_lookahead: save and restore as part of the parser state
+         included in {save,restore}_parser_state
 
-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
+                                   6/7
+                                   ---
+lib/readline/display.c
+       - puts_face: make sure to cast each member of STR to unsigned char, so
+         it's not misinterpreted as EOF, which putc_face does not display.
+         Report and fix from Volodymyr Prodan <vovcat@gmail.com> in
+         https://savannah.gnu.org/patch/?10076
 
-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
+examples/shobj-conf
+       - aix*gcc: change SHOBJ_LD to ${CC}, prefix the SHOBJ_LDFLAGS flags
+         with -Wl, so gcc will pass them to the linker. Report from
+         lehel@maxer.hu in https://savannah.gnu.org/support/?110505
 
-                                  10/4
+                                  6/11
                                   ----
-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>
+doc/{bash.1,bashref.texi}
+       - cd: additional arguments are not ignored; they raise an error.
+         Report from Douglas McIlroy <douglas.mcilroy@dartmouth.edu>
+
+lib/glob/strmatch.h
+       - FNM_DOTDOT: enable special handling for `.' and `..': if FNM_PERIOD
+         is not set, `.' and `..' at the start of a string or as a pathname
+         component need to be matched by a `.' in the pattern and cannot be
+         matched by `?', `*', or a bracket expression
+       
+lib/glob/glob.c
+       - glob_vector: pass FNM_DOTDOT to strmatch() if noglob_dot_filenames
+         is not set to enable special handling of `.' and `..'. Prompted by a
+         discussion with Nora Platiel <nplatiel@gmx.us>
+       - skipname,wskipname: remove special checks for `.' and (disabled)
+         checks for `..'
 
-pathexp.[ch],{bashline,subst}.c
-       - shell_glob_filename: now takes an additional flags argument to pass
-         to quote_string_for_globbing
+lib/glob/sm_loop.c
+       - GMATCH: implement special handling for FNM_DOTDOT and `.' and `..':
+         make sure they can't be matched by any special glob characters at
+         the start of the string or as a pathname component (if FNM_PATHNAME
+         is set). This also means that !(pattern) won't return `.' or `..'
+         if dotglob is set
+       - GMATCH,EXTMATCH: don't pass FNM_DOTDOT down to recursive calls, like
+         FNM_PERIOD, once we process the first character in the string or
+         pathname component
 
-                                  10/6
-                                  ----
-subst.c
-       - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC
-         because quote removal hasn't been performed yet
+lib/glob/smatch.c
+       - ISDIRSEP,PATHSEP,SDOT_OR_DOTDOT,PDOT_OR_DOTDOT: provide definitions
+         for single-byte or wide character strings for sm_loop.c to use
 
-                                  10/7
+                                  6/16
                                   ----
-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
+doc/{bash.1,bashref.texi},lib/readline/doc/{rluser,rltech}.texi
+       - slight wording changes to rewrite gender-specific language. From a
+         report by Vipul Kumar <kumar+bug-bash@onenetbeyond.org>, suggested
+         language from G. Branden Robinson <g.branden.robinson@gmail.com>,
+         Lawrence Velázquez <vq@larryv.me>,
+         and Andrew Church <achurch+bash@achurch.org>
 
-lib/glob/glob.c
-       - wcdequote_pathname: new function, actual backslash quote removal code
-         from wdequote_pathname; wdequote_pathname calls it
+builtins/fc.def
+       - fc_builtin: make sure an entry in the history list is non-null
+         before trying to write it to stdout or the temporary file. From a
+         report from Sibo Dong <sibo.dong@outlook.com>
 
-lib/glob/glob.c
-       - {udequote,wcdequote}_pathname: now public void functions
+builtins/common.[ch]
+       - builtin_arrayref_flags: given a WORD_DESC * (which includes flags)
+         and a base set of flags, return a set of flags to pass to
+         valid_array_reference and similar functions
 
-lib/glob/smatch.c
-       - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or
-         wcdequote_pathname
+builtins/set.def
+       - unset_builtin: call builtin_arrayref_flags to set vflags
 
-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>
+                                  6/19
+                                  ----
 
-                                  10/10
-                                  -----
-execute_cmd.[ch]
-       - async_redirect_stdin: now a global function
+parse.y
+       - parse_comsub: rewrite to recursively call the parser (yyparse()) and
+         return a string constructed from the resulting parse tree. Probably
+         will only work with bison. Error reporting is more accurate about
+         line numbers and invalid tokens, and command substitution errors 
+         are caught earlier, before expansion
+       - DOLPAREN: new token, never created by yylex; only ever set by
+         parse_comsub and xparse_dolparen to indicate we're recursively
+         calling the parser for a command substitution
+       - comsub: new grammar production that's triggered by DOLPAREN and
+         parses a command substitution, returning a <command>. It's one of
+         the possible end states for the top-level parser
+       - grammar: only call rewind_input_string if the shell's input is
+         coming from a string
+       - shell_ungets: push a string back onto the shell input; only used by
+         make_here_document for backwards compatibility -- allowing a here-
+         document to be terminated by a token at the end of a command
+         substitution
+       - yylex: don't need any more special handling when returning
+         shell_eof_token, but we keep the clause for future work
+       - read_token_word: don't handle backslashes (leave them in the input
+         stream) if we are reading a command substitution (PST_NOEXPAND)
+       - reserved_word_acceptable: allow reserved words after DOLPAREN
+       - report_syntax_error: better error handling if we hit EOF while
+         looking for the ending right paren in a command substitution
+       - parse_string_to_word_list,parse_compound_assignment: make sure to
+         turn off parse_comsub sentinel temporarily
 
-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
+make_cmd.c
+       - make_here_document: backwards compatibility: if we end a here
+         document on the same line as the end of a command substitution,
+         allow the token to terminate the here document (without requiring
+         a newline) and push the remainder of the line back for the parser
+         to consume and terminate the command substitution
 
-                                  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>
+builtins/evalstring.c
+       - parse_string: if we read shell_eof_token and use it to terminate a
+         command, rewind the input string here before returning, instead of
+         guessing where to rewind it in the caller
 
-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
+                                  6/22
+                                  ----
 
-                                  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>
+redir.c
+       - do_redirection_internal: if VARASSIGN_REDIR_AUTOCLOSE is non-zero,
+         add a redirect to automatically close {var}<fn and other styles of
+         varassign redirection. It's zero by default
 
-lib/sh/shmatch.c
-       - BASH_REMATCH: no longer set to readonly. From a suggestion from
-         Rocky Bernstein <rocky@gnu.org>
+builtins/shopt.def
+       - varredir_close: new shell option, mirrors the value of
+         varassign_redir_autoclose. Suggested multiple times by multiple
+         people
 
 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>
+       - varredir_close: document new shell option (the name is tentative)
 
-examples/loadables/finfo.c
-       - include <sys/mkdev.h> and <sys/sysmacros.h> as appropriate for
-         definitions of major/minor
-
-                                  11/6
+                                  6/24
                                   ----
-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>
+       - yylex: if read_token returns a value < 0, return YYerror to the
+         parser
+       - parse_comsub: if the current_token is not shell_eof_token when
+         yyparse returns, return an error to read_token_word instead of
+         trying to keep parsing. Fixes interactive-only (?) bug reported by
+         Koichi Murase <myoga.murase@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
+parser.h
+       - PST_NOERROR: don't print error messages in yyerror(), just reset
+         the parser and return
 
-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>
+parse.y
+       - yyerror: if parser_state & PST_NOERROR, don't print an error message
+       - xparse_dolparen: if the flags includes SX_COMPLETE, add PST_NOERROR
+         to parser_state, to inhibit error messages. Fixes bug with adding
+         lines with incomplete command substitutions to the history list
+         reported by Koichi Murase <myoga.murase@gmail.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
+       - skip_matched_pair: make sure to pass the SX_COMPLETE flag to
+         extract_delimited_string
 
-builtins/wait.def
-       - interrupt_immediately: remove any uses, no longer used anywheren
+                                  6/28
+                                  ----
 
-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)
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: handle rl_vi_arg_digit if VI_MODE is
+         defined. Report and fix from Koichi Murase <myoga.murase@gmail.com>
+       - rl_trim_arg_from_keyseq: rework to handle case where the digit
+         argument is given as a discrete sequence of multiple rl_digit_argument
+         commands (e.g, "M-1 M-2" instead of "M-1 2"). Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-builtins/common.[ch]
-       - builtin_unbind_variable: identical to check_unbind_variable but calls
-         builtin_error; for use by builtin commands
+subst.c
+       - pat_subst: avoid calling RESIZE_MALLOCED_BUFFER with STRLEN(s) as an
+         argument, since it ends up going into a loop. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-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)
+lib/sh/casemod.c
+       - cval: take the string length as an argument, to avoid having to call
+         strlen every time (in HANDLE_MULTIBYTE mode). The caller already has
+         this info. Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - wait: document new -p option
+builtins/complete.def
+       - print_cmd_name: single-quote the command name if it contains any
+         shell metacharacters
+       - print_one_completion: call print_arg with a second arg of 1 if the
+         function name contains shell metacharacters. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-                                  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>
+                                  6/30
+                                  ----
 
-lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
-       - horizontal-scroll-mode: document auto-setting behavior
+configure.ac
+       - substitute BASE_CFLAGS_FOR_BUILD and STYLE_CFLAGS into Makefile
+         targets
+       - take STYLE_CFLAGS out of the CFLAGS_FOR_BUILD variable that gets
+         substituted
+       - remove STYLE_CFLAGS from CFLAGS
+       - use `:+' expansion to set variables based on whether $GCC is set
+         or null, since configure can do GCC=
 
-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>
+support/Makefile.in
+       - man2html: remove CCFLAGS_FOR_BUILD from the recipe, leaving only
+         LDFLAGS_FOR_BUILD. Report from Jay K <jayk123@hotmail.com>
+       - gen-helpfiles: remove CCFLAGS_FOR_BUILD from the recipe, leaving
+         only LDFLAGS_FOR_BUILD
+       - man2html: use $(STYLE_CFLAGS) in BASE_CCFLAGS variable for C file
+         compilation options
 
-                                  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>
+{,builtins}/Makefile.in, lib/{sh,readline,malloc,glob}/Makefile.in
+       - use STYLE_CFLAGS so specifying CFLAGS=-g to make doesn't clutter the
+         output with warnings about parens and format strings
 
-                                  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
-         ÐлекÑей Ð¨Ð¸Ð»Ð¸Ð½ <rootlexx@mail.ru>
+                                   7/9
+                                   ---
+lib/readline/search.c
+       - make_history_line_current: call _rl_free_saved_history_line to clean
+         up _rl_saved_line_from_history and get all the code that frees it
+         into one place
 
-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
+lib/readline/misc.c
+       - _rl_free_saved_history_line: if rl_undo_list points to the data
+         member of _rl_saved_line_from_history, set it to NULL to avoid having
+         it point to freed memory, since the next thing we do now is to free
+         the undo list the data member points to
+       - _rl_start_using_history: call _rl_free_saved_history_line instead of
+         calling _rl_free_history_entry directly. Fixes memory leak reported
+         by Trung Dam <trungdam@yahoo.com>
 
-                                  12/2
+                                  7/12
                                   ----
-builtins/wait.def
-       - wait_builtin: allow argument to -p to be a  valid array subscript
+lib/readline/search.c
+       - make_history_line_current: free rl_undo_list before replacing the
+         current line with the line from history, since it is a private
+         undo list from reading the search string
 
-                                  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
-         ÐлекÑей Ð¨Ð¸Ð»Ð¸Ð½ <rootlexx@mail.ru>
+lib/readline/rlmbutil.h
+       - Since wchar_t/mbrtowc/wcrtomb are limited to 16 bits on Windows
+         with MSVC, start abstracting the differences using WCHAR_T/
+         MBRTOWC/WCRTOMB
 
-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
+                                  7/13
                                   ----
-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
+lib/readline/{complete,display,input,text,util,vi_mode}.c
+       - use WCHAR_T/MBRTOWC/WCRTOMB. Part of a set of Windows MSVC fixes
+         from sparrowhawk996@gmail.com
 
-                                  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>
+builtins/{enable,hash,help}.def
+       - enable_builtin: use sh_chkwrite after output to check for write errors
+
+                                  7/16
+                                  ----
+arrayfunc.c
+       - quote_compound_array_word: free SUB and VALUE after assigning from
+         sh_single_quote(). From a coverity report from
+         Siteshwar Vashisht <svashisht@redhat.com>
 
-bashline.[ch]
-       - bash_execute_unix_command: no longer static, available for other
-         parts of the shell to use
+bashhist.c
+       - bash_remove_history_range: free DISCARD_LIST after freeing its
+         elements
 
 bashline.c
-       - unbind_unix_command: take a key sequence as an argument, and unbind
-         it in the appropriate unix command keymap
+       - bash_directory_expansion: add code to free D as a separate branch,
+         though it's never hit in practice
 
-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>
+builtins/trap.def
+       - showtrap: free T even if show_default == 1 if it's a non-default
+         trap string
 
-                                  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>
+                                  7/17
+                                  ----
+execute_cmd.c
+       - execute_coproc: free NAME on invalid identifier error
 
-lib/readline/signals.c
-       - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code,
-         like _rl_handle_signal does
+lib/glob/glob.c
+       - glob_vector: make sure NEXTLINK is allocated using malloc before
+         passing it to free()
+       - glob_filename: free RESULT before returning glob_error_return when
+         there is only a filename
 
-                                  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
+print_cmd.c
+       - indirection_level_string: make sure we free PS4 after calling
+         decode_prompt_string if *ps4 == 0
 
-pathexp.c
-       - shell_glob_filename: call strvec_sort with the flag value to be
-         posix conformant
+subst.c
+       - parameter_brace_transform: if vtype == VT_VARIABLE, we need to free
+         a non-null VAL
 
-lib/sh/stringlist.c
-       - strvec_sort: change callers
+variables.c
+       - assign_in_env: if NAME is not a valid shell identifier, free it
+         after printing the error message and before returning. These are
+         the rest of the fixes from Siteshwar Vashisht <svashisht@redhat.com>
 
-                                  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>
+                                  7/22
+                                  ----
+shell.c
+       - main: set dollar_vars[0] to shell_script_filename before calling
+         run_startup_files() in the non-interactive case. Restore it after
+         run_startup_files returns so we can get better error messages if
+         we can't open a script file. Suggested by several people, originally
+         by Marc Aurèle La France <tsi@tuyoix.net> back in 2/2021 (in a
+         different form) and most recently by Tapani Tarvainen
+         <bash@tapanitarvainen.fi>
 
-                                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
+                                  7/28
+                                  ----
+trap.c
+       - any_signals_trapped: return that a signal is trapped only if it's
+         not ignored. This is an additional opportunity for optimization,
+         reported in https://bugzilla.redhat.com/show_bug.cgi?id=1981926
 
-                                  1/15
+                                  7/30
                                   ----
-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>
+examples/loadables/sleep.c
+       - main: if the uconvert conversion fails, but the argument appears to
+         contain a GNU-like interval specifier like "1m30s", return
+         EX_DISKFALLBACK so the execute_builtin code tries to run the
+         external version
 
-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>
+builtins/enable.def
+       - enable_shell_builtin: if the builtin isn't found, return EX_NOTFOUND
+         to allow the caller (enable_builtin) to react differently if it
+         wants to
+       - dyn_load_builtin: if the shared object isn't found, return EX_NOTFOUND,
+         change enable_builtin to deal with it
+       - enable_builtin: if there are no supplied options, and we attempt to
+         enable a non-existent builtin, try modifying `enable name' to the
+         equivalent of `enable -f name name' and return success if we
+         successfully load a builtin from a shared object. Proposed several
+         times, most recently by Robert Elz <kre@munnari.OZ.AU>
 
-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>
+doc/{bash.1,bashref.texi}
+       - enable: document new behavior of `enable NAME' when NAME is not a
+         current shell builtin
 
-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>
+                                   8/3
+                                   ---
+lib/glob/sm_loop.c
+       - GMATCH: check for interrupts or terminating signals each time through
+         the loop and return FNM_NOMATCH immediately if received. Let the
+         higher layers deal with interrupting the match and jumping out.
+         Inspired by a report from andrej@podzimek.org
 
-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>
+                                   8/6
+                                   ---
+subst.c
+       - {parameter_brace_remove_pattern,parameter_brace_transform,
+          parameter_brace_substring,parameter_brace_casemod,
+          parameter_brace_patsub}: make sure the IND argument is of type
+          arrayind_t to handle the full range of subscripts. Reported by
+          felix@f-hauri.ch
 
-                                  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
+builtins/printf.def
+       - printf_builtin: take new format specifier: %Q. This acts like %q
+         but applies any supplied precision to the original unquoted
+         argument, then quotes that result and outputs the entire quoted
+         string, preserving the original field width. Originally suggested
+         back in 4/2020 by Sam Liddicott <sam@liddicott.com>
 
-                                  1/17
-                                  ----
+subst.c
+       - char_is_quoted: check whether or not we are on the second or later
+         line of a command with an unclosed quoted string from a previous
+         line. If we are, see if it's closed before the character we're
+         checking, so we don't interpret a closing quote as starting a new
+         quoted string. Reported several times, most recently by
+         Phi Debian <phi.debian@gmail.com> in 6/2021.
+
+                                   8/9
+                                   ---
 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
+       - locale_expand: if the variable SINGLEQUOTE_TRANSLATIONS is non-zero,
+         single-quote the translated result of $"..." (if it's different from
+         the untranslated string)
 
-doc/bashref.texi
-       - posix mode: remove restriction that posix mode is not available
+builtins/shopt.def
+       - noexpand_translation: new option to expose the value of
+         SINGLEQUOTE_TRANSLATIONS
 
-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
+                                  8/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - noexpand_translation: add description of new option
 
-lib/readline/text.c
-       - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on
-         invalid multibyte sequences
+                                  8/16
+                                  ----
+builtins/printf.def
+       - printf_builtin: initialize retval after parsing arguments, since we
+         use it for the `v' option. Bug report from Keith Thompson
+         <Keith.S.Thompson@gmail.com>
 
-                                  1/18
+lib/sh/unicode.c
+       - u32tocesc: fix typo that returned \uXXXXXXXX instead of \UXXXXXXXX.
+         From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992257 by
+         <nabijaczleweli@nabijaczleweli.xyz>
+
+                                  8/17
                                   ----
-test.c
-       - for the `-v' operator, use a clever trick from Martijn Dekker and
-         just test whether N is between 0 and $#.
+siglist.c
+       - include command.h before general.h for PARAMS and prototypes. Report
+         from Osipov, Michael (LDA IT PLM) <michael.osipov@siemens.com>
 
-                                  1/21
+                                  8/18
                                   ----
-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/colors.c
+       - S_ISBLK: make sure it's defined before we use it, like in complete.c
 
-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
+lib/readline/complete.c,{bashline,variables}.c
+       - minor changes to prep for making rl_completer_word_break_characters
+         `const'
 
-                                  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
+subst.[ch],pcomplete.c
+       - split_at_delims: the DELIMS argument is now `const'; change callers
 
-lib/readline/text.c
-       - rl_delete_text: if deleting text leaves the mark past rl_end, adjust
-         it to rl_end
+lib/readline/rlmbutil.h
+       - _rl_wcwidth: add function prototype for inline function declaration
 
-lib/readline/vi_mode.c
-       - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting
-         rl_point to rl_mark
+lib/readline/bind.c
+       - _rl_get_keyname: print keys greater than 160 (which are valid UTF-8)
+         as octal escape sequences
 
-                                  1/23
+lib/readline/text.c
+       - do_lowercase_version: return 99999 to prevent the linker from
+         combining it with _rl_null_function and optimizing away the separate
+         copy. That messes with function pointer comparisons. Part of this
+         batch of fixes from sparrowhawk996@gmail.com
+
+                                  8/19
                                   ----
-lib/readline/kill.c
-       - rl_kill_region,region_kill_internal: call _rl_fix_point
+complete.c,readline.c,readline.h
+       - rl_completer_word_break_characters: now const char * like
+         rl_basic_word_break_characters; element of readline state struct
+         used to save it also const. THIS IS AN API CHANGE
 
-lib/readline/text.c,lib/readline/rlprivate.h
-       - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end
+bashline.c
+       - orig_rl_completer_word_break_characters: now const char * like
+         rl_completer_word_break_characters
 
-                                  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
+                                  8/20
                                   ----
 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
+       - bash_directory_completion_hook: if direxpand and dirspell are both
+         set while trying to complete an absolute pathname as a command, don't
+         take a spell-corrected directory name that is shorter than the
+         original hint. https://bugzilla.redhat.com/show_bug.cgi?id=1782809
+
+builtins/common.[ch]
+       - sh_noassign: convenience function to print an error message when a
+         user attempts an assignment to a "noassign" variable. Not used yet
+
+assoc.[ch]
+       - assoc_to_kvpair_list: new function, returns a WORD_LIST containing
+         key-value pairs as separate words
+
+array.[ch]
+       - array_to_kvpair_list: new function, returns a WORD_LIST containing
+         index-value pairs as separate words
+
+subst.c
+       - string_transform: handle '@k' transform like '@K'
+       - valid_parameter_transform: 'k' is a valid transform operator
+       - array_transform: handle '@k' transformation by calling one of
+         array_to_kvpair_list or assoc_to_kvpair_list and treating the
+         result as if expanding the array depending on whether the index is
+         `@' or `*' with the usual meanings
 
 doc/{bash.1,bashref.texi}
-       - READLINE_MARK: document new variable set by the shell
+       - document new '@k' parameter transformation operator
 
-                                  1/31
+                                  8/27
                                   ----
-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>
+lib/readline/kill.c
+       - rl_unix_filename_rubout: handle pathnames that consist only of one
+         or more slashes. The old code went too far and deleted the previous
+         word as well. From dabe@dabe.com
 
-                                   2/3
-                                   ---
-lib/sh/ufuncs.c
-       - fsleep: if pselect/select is interrupted by a signal, return -1 and
-         let the caller deal with it
+                                  8/31
+                                  ----
+parse.y
+       - STRING_SAVER: now save and restore shell_input_line_len; not sure
+         why it wasn't done before; fix push_string and pop_string accordingly
+       - prompt_again: now takes a parameter FORCE; not used yet (every
+         caller passes 0), needs more thought
 
-lib/sh/timeval.c
-       - multimeval: new function, multiply a timeval by a constant integer
-       - divtimeval: new function, divide a timeval by a constant integer
+builtins/evalstring.h
+       - open_redir_file: broke code that expands the redirection and opens
+         the resultant filename into a new function, called from cat_file
 
-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
+redir.h
+       - open_redir_file: extern declaration here for now
 
-                                   2/4
-                                   ---
-examples/loadables/mkfifo.c
-       - mkfifo: new loadable builtin
+builtins/evalstring.c
+       - parse_string: takes a new argument: COMMAND **cmdp; if non-null, saves
+         the parsed command to *cmdp and lets the caller manage it itself.
+         global_command is still not modified. Changed callers in parse.y
 
-                                   2/6
+                                   9/1
                                    ---
-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
+parse.y
+       - parse_string_to_command: stripped-down version of xparse_dolparen
+         that takes a string, runs it through the parser, and returns the
+         resultant COMMAND *; uses parse_string with the new argument
 
-                                   2/7
-                                   ---
-sig.[ch]
-       - restore_sigmask: function to restore top-level signal mask using
-         sigprocmask
+externs.h
+       - parse_string_to_command: extern declaration
 
-{sig,eval,jobs,nojobs}.c
-       - replace calls to sigprocmask with restore_sigmask(); remove extern
-         declarations of top_level_mask
+builtins/evalstring.c
+       - can_optimize_cat_file: new function, takes a COMMAND * argument and
+         returns true if the command can be optimized like $(<file); changed
+         parse_and_execute to call it
 
-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
+subst.c
+       - optimize_cat_file: new function, optimizes $(<file) without creating
+         a new process. Uses redir_open to open the redirection file, after
+         expansion, and calls read_comsub to read from it directly
+       - read_comsub: now reads into a 4096 byte buffer (COMSUB_PIPEBUF)
+       - command_substitute: if the string begins with a `<' and isn't followed
+         by any of "<>&", see if we can optimize the command and call
+         optimize_cat_file to do it if we can. 
 
-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>
+                                   9/2
+                                   ---
+configure.ac,config.h.in,lib/sh/setlinebuf.c
+       - SETVBUF_REVERSED: remove all references
 
-                                  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)
+configure.ac,aclocal.m4
+       - AC_OUTPUT: move created files and commands to AC_CONFIG_FILES and
+         AC_CONFIG_COMMANDS; call AC_OUTPUT without any arguments
+       - require autoconf version 2.63
+       - AC_HELP_STRING -> AS_HELP_STRING
+       - replace references to $ac_cv_prog_gcc with $GCC
+       - AC_C_LONG_DOUBLE -> AC_TYPE_LONG_DOUBLE
+       - enable-alt-array-implementation: new configure option, placeholder
+         for later
 
-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
+unwind_prot.c
+       - stddef.h: include if HAVE_STDDEF_H is defined, not STDC_HEADERS
 
-                                  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
+bashansi.h
+       - memory.h: don't include any more; assume <string.h> has all the
+         necessary defines
 
-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>
+aclocal.m4
+       - AC_HEADER_STDC: remove AC_REQUIRE calls to this; change tests to use
+         appropriate checks instead of STDC_HEADERS
 
-builtins/getopts.def
-       - dogetopts: use number_of_args() to compute the number of positional
-         parameters
+                                   9/3
+                                   ---
+configure.ac,config.h.in
+       - AC_TYPE_SIGNAL,BASH_TYPE_SIGHANDLER: remove calls, remove mention of
+         RETSIGTYPE and VOID_SIGHANDLER
+       - AC_USE_SYSTEM_EXTENSIONS: use this instead of AC_ISC_POSIX (which is
+         well and truly obsolete) and AC_MINIX (which just calls it anyway).
+         All the right defines are already present
+       - AC_HEADER_TIME: removed
+       - AC_HEADER_STDC: removed
+       - AC_DECL_SYS_SIGLIST: replaced with BASH_DECL_SYS_SIGLIST
+       - BASH_FUNC_CTYPE_NONASCII: removed
+
+sig.h,lib/readline/signals.c
+       - RETSIGTYPE -> void, SIGHANDLER_RETURN -> return
+
+include/posixtime.h
+       - don't bother with TIME_WITH_SYS_TIME, just include <sys/times.h> if
+         we have it and include <time.h> unconditionally
+
+include/chartypes.h,lib/readline/chardefs.h
+       - IN_CTYPE_DOMAIN: no longer uses STDC_HEADERS define, checks against
+         CHAR_MAX for non-C89 systems, still a no-op on C89 systems
+
+lib/readline/chardefs.h
+       - memory.h: don't include, no need for STDC_HEADERS; assume the mem*
+         functions are defined in <string.h> as in C89
+       - now that we assume IN_CTYPE_DOMAIN bounds its argument to unsigned
+         chars, we don't need NON_NEGATIVE checks at all
+
+lib/readline/chardefs.h,util.c
+       - ALPHABETIC -> _rl_alphabetic_p
 
-{findcmd,variables,subst,trap,sig}.h,builtins/common.h
-       - __P --> PARAMS
+                                   9/8
+                                   ---
 
-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
+lib/sh/strftime.c
+       - include <posixtime.h> after reworking above; include <sys/types.h>
+         unconditionally in case it defines time_t. From a report by
+         Ori Sky Farrell <bash@ori.mx>
 
-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
+                                   9/9
+                                   ---
+lib/readline/search.c
+       - rl_history_search_internal: set rl_undo_list to NULL after calling
+         rl_maybe_save_line, since it will be restored one way or another
+         after the search completes, and we don't want it to be freed twice
+       - rl_history_search_internal: leave the current history offset at the
+         position of the last matching history entry. This means that things
+         like ^P will start back from that history entry, ^N will move
+         forward from there, and operate-and-get-next will work like it does
+         with incremental searches. Reported by Vandrus Zoltán
+         <vandrus.zoltan@gmail.com>
 
-                                  2/12
+                                  9/10
                                   ----
-subst.c
-       - number_of_args: just return posparam_count
+aclocal.m4
+       - BASH_C_LONG_LONG: removed
+       - BASH_TYPE_LONG_DOUBLE: removed
+       - BASH_TYPE_LONG_LONG,BASH_TYPE_UNSIGNED_LONG_LONG: removed
+       - BASH_FUNC_CTYPE_NONASCII: removed
+       - BASH_SYS_SIGNAL_VINTAGE,BASH_SYS_REINSTALL_SIGHANDLERS: don't
+         require AC_TYPE_SIGNAL, use void instead of RETSIGTYPE
+       - BASH_TYPE_SIGHANDLER: removed
+
+configure.ac,aclocal.m4,config.h.in
+       - BASH_TYPE_LONG_LONG: removed, call AC_TYPE_LONG_LONG_INT directly,
+         change #define to HAVE_LONG_LONG_INT
+       - BASH_TYPE_UNSIGNED_LONG_LONG: removed, call AC_TYPE_UNSIGNED_LONG_LONG_INT
+         directly, change #define to HAVE_UNSIGNED_LONG_LONG_INT
+
+externs.h,include/typemax.h,lib/sh/{fmtullong,snprintf,strtoimax,strtoll,
+strtoull,strtoumax}.c
+       - HAVE_LONG_LONG -> HAVE_LONG_LONG_INT
+       - HAVE_UNSIGNED_LONG_LONG -> HAVE_UNSIGNED_LONG_LONG_INT
 
-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
+configure.ac
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE
+       - BASH_CHECK_TYPE (intmax_t) -> AC_TYPE_INTMAX_T
+       - BASH_CHECK_TYPE (uintmax_t) -> AC_TYPE_UINTMAX_T
+       - BASH_CHECK_TYPE (sig_atomic_t): removed
 
-subst.[ch],builtins/common.[ch]
-       - number_of_args: moved to builtins/common.c
+aclocal.m4
+       - BASH_FUNC_STRSIGNAL: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_LSTAT: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_SBRK: changed to use AC_LINK_IFELSE and AC_RUN_IFELSE,
+         fixed typo
+       - BASH_CHECK_SPEED_T: changed to use AC_COMPILE_IFELSE
+       - BASH_TYPE_SIG_ATOMIC_T: use BASH_CHECK_TYPE instead of AC_CHECK_TYPE
+       - BASH_STRUCT_DIRENT: new macro, like _AC_STRUCT_DIRENT but public and
+         sets a different bash-specific shell variable
+       - BASH_STRUCT_DIRENT_D_{INO,FILENO,NAMLEN}: call BASH_STRUCT_DIRENT
+         with a different first argument instead of using inline code and
+         AC_TRY_COMPILE
 
-                                  2/14
+                                  9/11
                                   ----
-subst.c
-       - clear_fifo_list: when using named pipes, clear out the FIFO list
-         without unlinking anything and set NFIFO to 0
+[prayers for the victims of 9/11/2001]
 
-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
+aclocal.m4
+       - BASH_CHECK_DECL: just call AC_CHECK_DECLS and use the default
+         includes, which includes the files we used to specify
+       - BASH_FUNC_INET_ATON: changed to use AC_LINK_IFELSE
+       - BASH_STRUCT_WEXITSTATUS_OFFSET: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_OPENDIR_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_ULIMIT_MAXFDS: changed to use AC_RUN_IFELSE
+       - BASH_UNDER_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_DUP2_CLOEXEC_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETENV: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETCWD: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EXTMATCH: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_POSIX_SETJMP: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_STRCOLL: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_PRINTF_A_FORMAT: changed to use AC_RUN_IFELSE
+       - BASH_SYS_PGRP_SYNC: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGNAL_VINTAGE: changed to use AC_RUN_IFELSE
+       - BASH_SYS_NAMED_PIPES: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_RTSIGS: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_MULTIBYTE: changed to use AC_RUN_IFELSE
+       - RL_LIB_READLINE_VERSION: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_WCONTINUED: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_SNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_VSNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: changed to use AC_RUN_IFELSE
+       - BASH_DECL_PRINTF: changed to use AC_RUN_IFELSE
+       - BASH_TYPE_RLIMIT: rewrote to avoid quad_t, now uses AC_COMPILE_IFELSE
+         to determine whether rlim_t is available, otherwise determines the
+         value of RLIMTYPE based on sizeof(rlim.rlim_cur): int, long, or
+         long long
+       - BASH_SIZEOF_RLIMIT,BASH_SIZEOF_QUAD_T: helper macros for
+         BASH_TYPE_RLIMIT in the case that rlim_t is not present
 
-parse.y
-       - special_case_tokens: allow `time -- command'
+configure.ac
+       - BASH_CHECK_DECL -> AC_CHECK_DECLS
+       - quad_t: use AC_CHECK_TYPE (new style) instead of BASH_CHECK_TYPE
 
-                                  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
+                                  
+                                  9/14
                                   ----
 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
+       - time_command: if we longjmp back to the top_level we saved, make sure
+         we're in the same subshell environment before printing the timing
+         stats. We could have longjmped back from a child process of the
+         command or pipeline we want to time. From a report by
+         Sergej Alikov <sergej@alikov.com>
+       - time_command: restore command->flags even if we longjmp back
 
-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>
-         
+general.c
+       - check_binary_file: if the first line of the ENOEXEC file starts with
+         a `#!', check the rest of the buffer for NULs to determine whether
+         this is a binary file. Since we only check the first line, a #! line
+         followed by binary data could be confused for a shell script
 
-                                  2/23
+                                  9/16
                                   ----
-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
+bashjmp.h
+       - EXITBLTIN: new longjmp `code' value: used by the exit builtin
 
-builtins/common.h
-       - show_local_var_attributes, show_localname_attributes: new extern
-         declarations
+{execute_cmd,shell,subst,trap}.c,builtins/evalstring.c
+       - treat EXITBLTIN exactly the same as EXITPROG (for now)
 
-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>
+builtins/exit.def
+       - exit_builtin: jump_to_top_level with value EXITBLTIN
 
-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>
+builtins/evalstring.c
+       - parse_and_execute: EXITBLTIN has its own case, with the same contents
+         as EXITPROG
 
-                                  2/24
+                                  9/17
                                   ----
-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"
+builtins/evalstring.c
+       - parse_and_execute: change EXITBLTIN case to avoid running the
+         unwind-protect stack to the `pe_dispose' tag (which has the effect
+         of running all the unwind-protects installed by the commands in
+         the string) if we're executing in a function and EXIT is trapped.
+         This has the effect of running the EXIT trap in the function context,
+         which is what we do when we're not in parse_and_execute (eval,
+         bash -c, command substitution, etc.)
 
-                                  2/25
+                                  9/18
                                   ----
-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)
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: make sure
+         the value has CTLESC characters doubled even when being single-
+         quoted, since that's what the parser does with standalone assignment
+         statements. From https://savannah.gnu.org/support/?110538
 
-                                  3/10
+                                  9/19
                                   ----
-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>
+aclocal.m4
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE (AC_TRY_LINK calls left to
+         modify to avoid obsolete warnings)
+       - BASH_STRUCT_WINSIZE: broke out checks for separate headers into new
+         macros, call them and work with the results; needed to avoid two
+         calls to AC_TRY_COMPILE
+       - BASH_CHECK_KERNEL_RLIMIT: avoid multiple calls to AC_TRY_COMPILE by
+         breaking basic test for RLIMIT_ defines into a separate test and
+         calling the HPUX-specific _KERNEL test only if that fails
+
+m4/gettext.m4,configure.ac
+       - AM_GNU_GETTEXT -> BASH_GNU_GETTEXT: remove deprecation warning, since
+         [no-libtool] is how we use this; rename to avoid someone's local
+         copy from overriding ours
 
-                                  3/17
+                                  9/20
                                   ----
-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
+aclocal.m4
+       - BASH_CHECK_MULTIBYTE: take out code that checks for nl_langinfo(CODESET)
+         since that's already provided by AM_LANGINFO_CODESET, which is
+         called by BASH_GNU_GETTEXT. We AC_REQUIRE it here, though, to avoid
+         problems from future changes
+       - BASH_SYS_SIGNAL_VINTAGE: broke the code that checks for the different
+         signal vintages into different AC_DEFUNed macros, changed
+         BASH_SYS_SIGNAL_VINTAGE to stitch them together with shell code
+         testing the cached variables
+       - AC_TRY_LINK -> AC_LINK_IFELSE: there are no more autoconf warnings
 
-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
+                                  9/21
+                                  ----
+array.[ch]
+       - array_from_argv: new convenience function
 
-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
+array.h
+       - num_elements: now an arrayind_t, since that's the type of indices, it
+         makes sense to allow that many elements
 
-builtins/declare.def
-       - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK
-       - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK
+                                  9/22
+                                  ----
+lib/readline/terminal.c
+       - rl_term_kP: fix typo. Fix from Koichi Murase <myoga.murase@gmail.com>
 
-variables.c
-       - make_local_{array,assoc}_variable: understand new flags, pass
-         MKLOC_INHERIT to make_local_variable if it appears in the flags
-         argument
+                                  9/25
+                                  ----
+lib/readline/display.c
+       - rl_clear_visible_line: call _rl_clear_to_eol with _rl_screenwidth as
+         the argument so we clear out the entire line even if the terminal
+         doesn't have a clear-to-eol sequence; make sure to add a call to
+         rl_cr after that so we know we're always in column 0
+       - _rl_redisplay_after_sigwinch: just call rl_clear_visible_line instead 
+         of erasing the last line of the display
+       - _rl_redisplay_after_sigwinch: if the prompt is longer than the screen
+         width, make sure to call _rl_reset_prompt to recalculate the
+         local_prompt_newlines array. Should fix issue from
+         https://savannah.gnu.org/support/index.php?110543
 
-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
+redir.c
+       - do_redirection_internal: if given [N]<&WORD- or [N]>&WORD- and WORD
+         expands to null, make it identical to <&- or >&- and close file
+         descriptor N (default 0). From a discussion back in 5/2021
 
-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
+                                  9/27
+                                  ----
+arrayfunc.c
+       - expand_compound_array_assignment: since we run the string through
+         the parser to turn it into a list (so we can make sure all shell
+         metacharacters are properly quoted), we need to remove the CTLESC
+         the parser uses to quote CTLESC and CTLNUL in *unquoted* words.
+         The rest of the code assumes this has been done, and assumes that
+         any CTLESC characters passed to expansion are part of the original
+         word and should themselves be quoted, doubling the number of CTLESCs
 
-                                  3/18
+                                  9/28
                                   ----
-examples/loadables/basename.c
-       - basename_builtin: handle -- option without crashing. Report by Peng Yu
-         <pengyu.ut@gmail.com>
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: if we are
+         single-quoting associative array subscripts and associative and
+         indexed array values, we need to quote CTLESC characters, because
+         that's how they come out of the parser and how the assignment
+         statement code expects to see them.
+         Fixes https://savannah.gnu.org/support/index.php?110538
 
-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
+                                  9/29
+                                  ----
+subst.c
+       - parameter_brace_transform: invalid transformation operators are now
+         fatal errors in non-interactive shells, as with the other word
+         expansions. Reported by Martin Schulte <gnu@schrader-schulte.de> in
+         https://lists.gnu.org/archive/html/bug-bash/2020-10/msg00026.html
+
+execute_cmd.c
+       - execute_disk_command: if we're optimizing out the fork (nofork) and
+         not directly in a pipeline (pipe_in == pipe_out == NO_PIPE), only
+         modify shell_level if subshell_environment says we're not already in
+         a pipeline. Reported by Paul Smith <psmith@gnu.org> 10/11/2020
+         against GNU make
 
-                                  3/19
+evalstring.c
+       - should_suppress_fork: remove #if 1 for code that tries to suppress
+         the fork in a process substitution subshell
+
+                                  9/30
                                   ----
-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>
+builtins/mapfile.def
+       - do_chop: make sure we're comparing unsigned chars when checking
+         whether the delim is the last character on the line. Reported by
+         Greg Wooledge <greg@wooledge.org>
 
-                                  3/20
+                                  10/1
                                   ----
-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,
+lib/readline/rltty.c
+       - rl_deprep_terminal: if we're not echoing to the terminal
+         (_rl_echoing_p == 0), and we just output the bracketed paste end
+         sequence, output a newline to compensate for the \r at the end of
+         BRACK_PASTE_FINI, since redisplay didn't do it for us. Reported by
+         Siteshwar Vashisht <svashisht@redhat.com>
 
-               cat <<EOF
-               ${P+\"$P\"}
-               EOF
+shell.h
+       - MATCH_EXPREP: new matching flag, understood only by pattern
+         substitution; means to expand unquoted `&' in the replacement
+         STRING to the match of PATTERN
 
-               and
+subst.c
+       - shouldexp_replacement: uncommented
+       - pat_subst: we expand & in the replacement string if MATCH_EXPREP
+         appears in MFLAGS
+       - parameter_brace_patsub: push call to shouldexp_replacement out here,
+         after the replacement string is expanded; set MATCH_EXPREP if there
+         is an unquoted `&' (by backslash) in the expanded replacement
+         string
 
-               echo "${P+\"$P\"}"
+doc/{bash.1,bashref.texi}
+       - pattern substitution: overhauled the description, moved each of the
+         possible forms to be tags in the tagged paragraph. The description
+         now specifies the expansions that the replacement string undergoes
+       - pattern substitution: documented new behavior of unquoted & in the
+         replacement string
 
-         should output the same thing. From a report from Dan Jacobson
-         <jidanni@jidanni.org> back in 1/2019.
+                                  10/4
+                                  ----
+shell.c
+       - include <malloc/shmalloc.h> if we're debugging malloc (MALLOC_DEBUG)
+         so we can get an extern declaration of trace_malloc_stats
 
-                                  3/23
+                                  10/5
                                   ----
 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
+       - expand_subscript_string: allocate new memory for td.word, copying
+         STRING, in case it gets freed on error by expand_word_internal.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - parameter transformation: document new `U', `u', and `L' operators
+lib/malloc/malloc.c
+       - malloc_usable_size: return the allocated size instead of the chunk
+         size, since writing over the bounds checking will cause fatal errors.
+         Reported by Julien Moutinho <julm+bash@sourcephile.fr>, fix from
+         Dominique Martinet <asmadeus@codewreck.org>
 
-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
+arrayfunc.c
+       - unbind_array_elememnt: pass (flags&VA_NOEXPAND) to skipsubscript(),
+         instead of unconditionally passing 1 if we're operating on an
+         associative array. This is consistent with how valid_array_reference
+         determines the length of the subscript.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - PROMPT_COMMANDS: new array variable
+                                  10/6
+                                  ----
+
+subst.c
+       - skip_to_delim: add a new value for FLAGS. If FLAGS&2, we assume that
+         START is one character after the opening OPEN. If not, we assume that
+         START is at OPEN, and needs to be incremented past it. Part of fix
+         from Koichi Murase <myoga.murase@gmail.com>
 
-                                  3/24
+arrayfunc.c
+       - unbind_array_element: make sure to pass FLAGS to skipsubscript with
+         bit 2 set, since we are passed a SUB index that's one past the
+         opening bracket. Rest of fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - array_variable_name: make sure we pass (FLAGS&1) to skipsubscript, so
+         we don't inadvertently pass a value with bit 2 set, which would
+         cause an off-by-one error in subscript parsing
+
+                                  10/8
                                   ----
-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
+trap.c
+       - restore_traps: inverse of reset_signal_handlers. This understands
+         how reset_signal_handlers changes the signal disposition while
+         leaving the trap string in place, and knows how to restore flags
+         and state based on that preserved trap string and whether or not
+         the signal is "special" to the shell.
 
-doc/{bash.1,bashref.texi}
-       - ulimit: document new -R option
+builtins/exec.def
+       - exec_builtin: instead of using restore_original_signals to completely
+         cancel the traps, call reset_signal_handlers so the trap strings are
+         preserved. Then if the exec fails (and we're not exiting) we can
+         look at the trap strings and see how to restore the trap state.
+         This calls restore_traps after reinitializing the shell signal
+         handlers, using the trap strings saved by reset_signal_handlers.
+         Fixes issue with not exiting after a failed exec clearing the EXIT
+         trap reported by Mark March <march@systempad.org>, using the
+         approach suggested by Robert Elz <kre@munnari.OZ.AU>
+
+subst.c
+       - expand_declaration_argument: when parsing options that modify
+         attributes that affect how the value is handled (i, c, u, etc.),
+         make sure to create an option string and call make_internal_declare
+         with options that start with a `+' so the attribute is off when
+         the assignment is performed and changes how the value is expanded.
+         From a report by Léa Gris <lea.gris@noiraude.net>
 
-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/complete.c
+       - rl_display_match_list: even if _rl_completion_prefix_display_length
+         is set to a non-zero value, pass the common prefix length to
+         fnprint if we've turned on colored completion prefixes; passes
+         through to fnprint via print_filename
+       - fnprint: add the ellipsis if prefix_bytes exceeds the
+         _rl_completion_prefix_display_length, add explicit check for
+         prefix_bytes being longer since print_filename passes it through
+         if colored-completion-prefix is set. This means that while
+         completion-prefix-display-length still has precedence over
+         colored-completion-prefix, it doesn't override it if both are set
+         and the common prefix length is shorter than
+         completion-prefix-display-length. From a report by
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-lib/readline/{text.c,readline.h}
-       - rl_clear_display: new bindable command that clears the screen and
-         scrollback buffer
+                                  10/10
+                                  -----
+parse.y
+       - parse_dparen: if the last token is FOR, increment word_top and assign
+         word_lineno like for other for loops. Fixes bug with LINENO after
+         arithmetic for commands reported by
+         Tom Coleman <thomas.james.coleman@gmail.com>
 
-lib/readline/funmap.c
-       - clear-display: new bindable command name
+                                  10/11
+                                  -----
+execute_cmd.c
+       - shell_execve: if execve fails with ENOENT, but executable_file()
+         succeeds, display a slightly more descriptive error message. Prompted
+         by a report from Andrea Monaco <andrea.monaco@autistici.org>
 
-lib/readline/emacs_keymap.c
-       - emacs mode M-C-l now bound to clear-display
+stringlib.c
+       - strcreplace: allow backslash to escape a backslash, since we allow it
+         to escape a `&'
 
-doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
-       - clear-display: document new function and default emacs mode binding
+                                  10/14
+                                  -----
+pcomplib.c
+       - COMPLETE_HASH_BUCKETS: double to 512
 
-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
+stringlib.c
+       - strcreplace: the last argument is now a flags argument. 1 has its
+         previous meaning (glob); 2 means to allow backslash to escape a
+         backslash (as added on 10/11)
 
-doc/{bash.1,bashref.texi}
-       - documented new associative array assignment syntax
+subst.c
+       - pat_subst: call strcreplace with 2 as the flags value
 
-assoc.[ch]
-       - assoc_to_kvpair: new function that returns a string with quoted
-         key/value pairs from given associative array
+                                  10/15
+                                  -----
+doc/bashref.texi
+       - updates to Installation section
 
-array.[ch]
-       - array_to_kvpair: new function that returns a string with quoted
-         key/value pairs from given indexed array (for completeness)
+doc/{mkposix,mkinst,mkrbash},doc/Makefile.in
+       - changes to allow scripts to be run outside the source directory
 
+                                  10/18
+                                  -----
 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
+       - patsub_replacement: controls whether pattern substitution expands `&'
+         in the replacement string. Initialized to 1 by default
 
+                                  10/19
+                                  -----
 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>
+       - document bash's WCE SIGINT behavior when job control is not enabled
+         and the shell receives a SIGINT while waiting for the foreground
+         command to complete. Added at Red Hat's request. A complete
+         discussion is at https://www.cons.org/cracauer/sigint.html
 
-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
+                                  10/25
+                                  -----
+builtins/shopt.def
+       - patsub_replacement: new shell option, exposes patsub_replacement
+         variable controlling whether pattern substitution expands `&' in
+         the replacement string. Still enabled by default.
 
-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
+doc/{bash.1,bashref.texi}
+       - patsub_replacement: document new shopt option
 
-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
+                                  10/26
+                                  -----
+lib/readline/display.c
+       - expand_prompt: group runs of invisible characters at the right edge
+         of the screen with the previous physical characters when setting
+         local_prompt_newlines, since that's how update_line() expects to
+         get it. Fix from sparrowhawk996@gmail.com.
 
-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/macro.c
+       - rl_end_kbd_macro: make sure current_macro_index is > 0 after
+         subtracting the key sequence length, clamp it to 0 before writing
+         the ending NULL. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-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/isearch.c
+       - _rl_isearch_dispatch: in the bracketed paste case, don't assume the
+         pasted text is null-terminated, so use memcpy instead of strcpy for
+         the length of the pasted text, then make sure the search string is
+         null-terminated. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/util.c
-       - _rl_abort_internal: make sure we deactivate the region
+lib/readline/text.c
+       - rl_transpose_words: make sure to preserve the value of rl_end from
+         the beginning to the end of the function. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-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/vi_mode.c
+       - rl_vi_delete_to,rl_vi_change_to,rl_vi_yank_to: if we are redoing a
+         command (_rl_vi_redoing == 1), save the old _rl_vimvcxt, allocate a
+         new one, and restore the old one before returning. Prevents some
+         pointer aliasing problems. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/display.c
-       - _rl_cr: use where appropriate to replace MSDOS-dependent code and
-         calls to tputs
+                                  10/29
+                                  -----
+arrayfunc.c
+       - tokenize_array_reference: take valid_array_reference and add a third
+         argument (char **SUBP), which, if non-NULL, gets the null-terminated
+         subscript parsed from the NAME argument. If it's NULL, the caller
+         gets the old valid_array_reference behavior. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - valid_array_reference: just call tokenize_array_reference with a
+         NULL third argument
+       - unbind_array_element: assume the caller (unset_builtin) passes a
+         null-terminated SUB that's already been validated by a call to
+         tokenize_array_reference so we don't need to call skipsubscript() or
+         check VA_ONEWORD. Fix from Koichi Murase <myoga.murase@gmail.com>
 
-lib/readline/terminal.c
-       - get and store the terminal sequences to enter and exit standout
-         (usually some background color) mode
+arrayfunc.h
+       - tokenize_array_reference: extern declaration
 
-                                  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
+builtins/set.def
+       - unset_builtin: use tokenize_array_reference to figure out T and pass
+         that to unbind_array_element. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - unset_builtin: pass non-null argument to array_variable_part to get
+         the length of the subscript (T), then cut off any final `]' before
+         passing it to unbind_array_element, since that's what it now
+         expects
 
-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 *
+subst.c
+       - expand_string_for_rhs,expand_string_for_pat: assign td.word from
+         newly-allocated memory in case it gets freed on error during the
+         call to call_expand_word_internal(); free it manually when that
+         call returns
 
-                                  3/30
+                                  11/1
                                   ----
-lib/readline/{terminal.c,rlprivate.h}
-       - _rl_standout_{on,off}: new functions, to enter and exit terminal
-         standout mode
+findcmd.c
+       - search_for_command: if FLAGS includes CMDSRCH_STDPATH, don't look in
+         the hash table for the command name. Prompted by a report from
+         Roger Morris <roger.morris@gmail.com>
 
-lib/readline/rlprivate.h
-       - _rl_refresh_line: new extern declaration
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: add a check by fetching the signal mask
+         after the siglongjmp and making sure that SIGINT is not blocked,
+         indicating we restored the original signal mask
 
-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
+                                  11/2
+                                  ----
+subst.c
+       - expand_string_assignment: make sure to add W_TILDEEXP to the flags so
+         expand_word_internal performs the right tilde expansion on tildes
+         following an unquoted colon. Report from Anders Kaseorg
+         <andersk@mit.edu>
 
-lib/readline/text.c
-       - rl_refresh_line: now just calls _rl_refresh_line and marks the display
-         as fixed
 
-                                  3/31
+                                  11/3
                                   ----
-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
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: if cross-compiling, default to `present' if
+         we've determined we have posix signal functions
 
-                                   4/2
-                                   ---
+                                  11/4
+                                  ----
 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>
+       - SET_LINE_NUMBER: set line_number, but don't set line_number_for_err_trap
+         if we're already running the ERR trap
+       - GET_LINE_NUMBER: evaluates to line_number_for_err_trap if we're
+         running the ERR trap and executing_line_number() otherwise
+       - execute_function: use GET_LINE_NUMBER to push the value for the line
+         number into the BASH_LINENO array
+       - execute_command_internal,execute_arith_command,execute_cond_command:
+         use SET_LINE_NUMBER to avoid overwriting line_number_for_err trap
+         while executing the ERR trap. Tentative fix for `caller' problem
+         reported by Quinn Grier <quinn@quinngrier.com>
+
+configure.ac,patchlevel.h
+       - set bash version to 5.2-devel, meaning shell_compatibility_level = 52,
+         which required updating tests (array.tests, array21.sub,
+         quotearray3.sub, new-exp10.sub, history2.sub). The first three are
+         because bash-5.2 flushes an indexed array but does not unset the
+         variable when given `unset a[@]' or `unset[*]' (that is, it acts
+         like `a=()' instead of `unset a'); the other two are because the
+         version number changed
 
-                                   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
+                                  11/8
+                                  ----
+doc/Makefile.in
+       - bash.info: use `makeinfo -o' instead of calling infopost.sh to edit
+         the filename, since the tags table includes absolute byte offsets to
+         nodes. From https://savannah.gnu.org/support/?110557
 
-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)
+                                  11/15
+                                  -----
+examples/loadables/realpath.c
+       - add -a NAME argument to put canonicalized pathnames into an indexed
+         array instead of displaying them on stdout. Suggested by
+         felix@f-hauri.ch
 
-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
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: new function, looks in $LS_COLORS for a
+         custom extension (*.readline-colored-completion-prefix) and uses that,
+         if found, as the default color for the common prefix displayed when
+         `colored-completion-prefix' is set. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
+       - _rl_print_prefix_color: try the return value from _rl_custom_readline_prefix
+         before defaulting to the C_PREFIX (C_SOCK) color. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-                                   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/doc/{readline.3,rluser.texi},doc/bash.1
+       - readline-colored-completion-prefix: document new custom suffix for
+         readline's colored-completion-prefix color
 
-lib/readline/readline.c
-       - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on
-         by default)
+                                  11/16
+                                  -----
+doc/{bash.1,bashref.texi},builtins/set.def
+       - set: modify usage synopsis slightly, based on
+         https://bugzilla.redhat.com/show_bug.cgi?id=2022324
 
-trap.c
-       - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0
-         since run_pending_trap usually does these things
+builtins/set.def
+       - unset_builtin: add shell compatibility level check <= bash-5.1 to
+         force `unset a[@]' to unset array variable `a', like in previous
+         versions, instead of unsetting associative array element `@' or
+         removing all elements of an indexed array without unsetting the
+         variable itself
 
-sig.c
-       - throw_to_top_level: only call the SIGINT trap if there is a SIGINT
-         trap pending (shouldn't matter, just a check)
+builtins/common.c
+       - set_expand_once: now a no-op if the shell compatibility level is
+         <= bash-5.1, preserving the previous versions' behavior for [[ -v
+         (dependent on assoc_expand_once instead of forcing it)
 
-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>
+subst.c
+       - parameter_brace_expand_rhs: make sure that the final value assigned
+         is always returned from ${a:=b}, even when `a' has a variable
+         attribute that modifies the value on assignment. Reported back on
+         1/20/2021 by oguzismailuysal@gmail.com; bash-5.2 tag removed
 
-                                   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
+                                  11/22
+                                  -----
+doc/{bashref.texi,bash.1}
+       - unset: change the description of `unset name[@]' (unset name[*])
+         to reflect the new behavior (unset associative array subscripts or
+         remove all elements from an indexed array) and the difference from
+         previous versions
+       - set: document -r for restricted shell mode
+       - restricted shell: change occurrences of `set +o restricted' to
+         `shopt -u restricted_shell'. From a report from
+         Jin Xiang <jxiang.sd@gmail.com>
+       - read: note that read -t0 may return 0 if a subsequent read will
+         return EOF. From a suggestion by Dale R. Worley
+         <worley@alum.mit.edu>
 
 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)
+       - execute_arith_command,eval_arith_for_expr: don't pass EXP_EXPANDED
+         to evalexp if shell_compatibility_level > 5.1, assuming that the
+         expression has been quoted by Q_ARITH handling
 
-                                  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
+test.c
+       - test_arithcomp: if we're being called by the conditional command
+         code and treating the arguments to the arithmetic operators as
+         expressions, don't pass EXP_EXPANDED to evalexp if the shell
+         compatibility level is > 5.1, assuming that the expression has been
+         quoted by Q_ARITH handling
 
-                                  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>
+                                  11/29
+                                  -----
+examples/loadables/getconf.[ch]
+       - getconf: new implementation of loadable builtin, based on glibc
+         getconf
 
-                                  4/13
-                                  ----
+examples/loadables/sleep.c
+       - parse_gnutimefmt: parse GNU interval format (2m30s), returning
+         seconds and microseconds like uconvert
+       - sleep: use parse_gnutimefmt if uconvert can't parse the format right
+         away and "dhms" appears in the format string. Don't return
+         EX_DISKFALLBACK under any circumstances
 
-lib/readline/text.c
-       - rl_newline: if the region is active, call rl_redisplay to clear
-         standout mode before returning
+                                  11/30
+                                  -----
 
-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
+builtins/wait.def
+       - wait_builtin: refer to unset_waitlist only if JOB_CONTROL is enabled.
+         Report from Joel Ebel <jbebel@google.com>
 
-                                  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
+parse.y,builtins/set.def
+       - changes for minimal config restrictions
 
-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
+configure.ac,config.h.in
+       - --enable-translatable-strings: new configuration option to allow
+         $"..." support to be compiled in or out; not included in the minimal
+         shell configuration
 
-                                  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)
+shell.c
+       - main: don't include any of the dump-strings options if
+         TRANSLATABLE_STRINGS is not defined
 
-                                  4/17
-                                  ----
-jobs.h
-       - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second
-         argument to make_child
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: needed for translatable strings
 
-jobs.c
-       - make_child: now takes a set of flags as the second argument
+parse.y
+       - support for translating $"..." strings now conditional on
+         TRANSLATABLE_STRINGS
 
-execute_cmd.c
-       - make_child: change callers to pass FORK_ASYNC instead of a non-zero
-         value as the second argument
+locale.c
+       - locale_expand: now conditional on TRANSLATABLE_STRINGS
 
 subst.c
-       - make_child: change callers to pass FORK_ASYNC instead of a non-zero
-         value as the second argument
+       - expand_string_dollar_quote: support for $"..." now conditional on
+         TRANSLATABLE_STRINGS
 
-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>
+doc/bashref.texi
+       - --enable-translatable-strings: document new configuration option
 
-                                  4/18
+                                  12/2
                                   ----
 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
+       - verify_substring_values: now that the default compatibility level is
+         52, and the Q_ARITH code is enabled, make the EXP_EXPANDED flag for
+         evalexp() dependent on the compatibility level
+       - param_expand: arithmetic substitution: make EXP_EXPANDED flag
+         for evalexp() dependent on the compatibility level
+       - expand_word_internal: don't call expand_array_subscript if the
+         shell compatibility level is 51 or below (Q_ARITH)
 
-{jobs,nojobs}.c,jobs.h
-       - wait_for: now takes a second argument, a flags word
+test.c
+       - test_unop: if the shell compatibility level is > 51, using [@] with
+         an existing associative array will report on a key of `@'
 
-{execute_cmd,subst}.c
-       - wait_for: change all callers to add second argument to wait_for
+arrayfunc.c
+       - array_expand_index: if the compatibility level is > 51, Q_ARITH is
+         used and we don't pass EXP_EXPANDED to evalexp()
 
-jobs.c
-       - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call
-         give_terminal_to
+COMPAT,doc/bashref.texi
+       - shell compatibility mode: document effects of setting the
+         compatibility mode to 51
 
-                                  4/19
+                                  12/3
                                   ----
-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>
+lib/malloc/malloc.c
+       - mremap: only use if MREMAP_MAYMOVE is defined, since we use the Linux
+         version of the function signature
 
-hashcmd.h
-       - FILENAME_HASH_BUCKETS: increase to 256
+                                  12/6
+                                  ----
+bashhist.c
+       - bash_add_history: if we're parsing a here-document (PST_HEREDOC), only
+         suppress adding the newline between lines if we're not at the first
+         line of the here-document (here_doc_first_line != 0). From a report
+         by S0AndS0 <strangerthanbland@gmail.com>
 
-assoc.h
-       - ASSOC_HASH_BUCKETS: new define, set to 1024
+                                  12/8
+                                  ----
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: use STREQN to check for the extension
+         string in $LS_COLORS, since it's not necessarily null-terminated.
+         From https://savannah.gnu.org/patch/?10158
 
+                                  12/10
+                                  -----
 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
+       - set_int_value,set_string_value: broke common code for setting int
+         and string dynamic variable values out into separate functions;
+         changed all callers to use them where appropriate. set_int_value
+         takes a flags argument saying whether or not to force the integer
+         attribute on
+       - assign_random: store the value assigned as the variable value so
+         things like RANDOM=42; RANDOM+=7 generate consistent sequences
+         like in ksh93
+       - assign_seconds: store the value assigned as the variable value so
+         things like SECONDS=42 ; SECONDS+=7 generate what's expected
+
+doc/Makefile.in
+       - changes to allow man pages that include others (.so FN) to be built
+         outside the source tree
 
+                                  12/13
+                                  -----
 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
+       - assign_array_element_internal: take an additional argument: char **NVALP.
+         If non-null, it gets the value eventually assigned to the array
+         element
+       - assign_array_element: take an additional NVALP argument; pass it to
+         assign_array_element_internal
 
-                                  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
+arrayfunc.h
+       - assign_array_element: new extern function declaration
 
-lib/readline/input.c
-       - _rl_nchars_available: new function, returns the number of characters
-         available to be read if FIONREAD is available
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers
 
-                                  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
+subst.c
+       - parameter_brace_expand_rhs: for the ${param:=value}, use the value
+         returned by assign_array_element in NVALP as the return value, since
+         it's the value ultimately assigned to the variable after possible
+         modification (e.g., arithmetic evaluation). Reported by
+         oguzismailuysal@gmail.com after flawed fix applied 11/16
 
-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)
+                                  12/14
+                                  -----
+arrayfunc.h
+       - array_eltstate_t: an object that encapsulates an array element's
+         state (type, index, key, value) whether it's an indexed or
+         associative array
 
-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
+arrayfunc.c
+       - {init,flush}_eltstate: new functions to initialize and flush any
+         allocated memory from array_eltstate_t objects. No allocation/
+         deallocation functions yet; the only use is with a static instance
+       - assign_array_element_internal: take an array_eltstate_t * instead of
+         a char ** as the final argument, so we can return keys/indices and
+         values depending on the type of array; populates it with the
+         appropriate values
+       - assign_array_element: take array_eltstate_t * as final argument
+         instead of a char **; pass it to assign_array_element_internal
+
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers to modify final argument
 
-                                  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>
+                                  12/15
+                                  -----
+arrayfunc.c
+       - array_value_internal: now takes an array_eltstate_t * as the final
+         argument; there is no more `rtype' argument in favor of the
+         `subtype' member; returns the appropriate values in its members
+       - array_value: changed to pass array_eltstate_t to array_value_internal,
+         saves and fetches its `ind' member into *indp; saves `subtype'
+         member into *rtype
+       - get_arrary_value: changed to take array_eltstate_t as third argument,
+         passes it to array_value_internal
+
+{redir,expr}.c
+       - get_array_value: changed callers; initializing the array_eltstate_t
+         argument as necessary
 
-parse.y
-       - parse_comsub: posix-mode shells don't allow a closing right paren to
-         delimit a pending here-document -- it requires the newline
+test.c
+       - test_builtin: changed to use get_array_value, adding AV_ALLOWALL to
+         the flags, since it didn't use any QUOTED argument. Pass
+         array_eltstate_t * as final argument and get subtype from it (the
+         only thing we're interested in, to deallocate memory)
 
-doc/bashref.texi
-       - POSIX mode: updated posix mode description with the new here-document
-         delimiter requirement
+                                  12/16
+                                  -----
+arrayfunc.c
+       - array_value: now takes a final argument of array_eltstate_t *, which
+         it passes to array_value_internal; no more rtype and indp args.
+         Callers are responsible for marshalling values into estatep
 
-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
+arrayfunc.h
+       - array_value: changed function signature
 
-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>
+subst.c
+       - get_var_and_type,parameter_brace_expand_word: changed calls to
+         array_value to use array_eltstate_t argument and initialize it
+         appropriately. Copy values back from it to the parameters we need
+         to modify
 
-                                  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>
+variables.c
+       - assign_lineno: call set_int_value to store the value, like with
+         RANDOM and SECONDS (from 12/10)
 
-                                  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>
+                                  12/17
+                                  -----
+{eval,execute_cmd}.c
+       - when bypassing a parsed command because read_but_dont_execute is
+         set, don't modify last_command_exit_value. From a report by
+         Robert Elz <kre@munnari.OZ.AU>
 
-variables.h
-       - localvar_inherit: add extern declaration here
+parse.y
+       - parse_comsub: make sure the first call to shell_getc to check whether
+         or not it's an arithmetic expansion skips a quoted newline. From a
+         report by Robert Elz <kre@munnari.OZ.AU>
 
+                                  12/21
+                                  -----
 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>
+       - parameter_brace_remove_pattern,parameter_brace_patsub,parameter_brace_casemod,
+         parameter_brace_transform,parameter_brace_substring: now take an
+         array_eltstate_t * argument in place of the arrayind_t argument, pass
+         it to get_var_and_type; this generalizes the indexed array behavior
+         of expanding array subscripts once to associative arrays via an
+         eventual call to array_value_internal with a non-null KEY member
+       - get_var_and_type: now takes an array_eltstate_t * argument in place
+         of the arrayind_t argument; use it in calls to array_value so we
+         can only expand array subscripts once whether they are indexed or
+         associative arrays
+       - parameter_brace_expand_word: take an array_eltstate_t * argument in
+         place of the arrayind_t * argument; pass it to array_value; use a
+         static version (which we init and flush) if the argument passed is
+         NULL so we can get the right state passed back and forth
+       - parameter_brace_expand: pass a pointer to a static array_eltstate_t
+         to parameter_brace_expand_word, and use that in the various calls to
+         parameter_brace_XXX functions that perform specific expansions in
+         place of the old arrayind_t argument; make sure to flush it before
+         returning, even on errors
 
-                                  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
+                                  12/22
+                                  -----
+{trap,variables}.c
+       - internal_warning: calls changed to use translatable strings
+         consistently
 
-                                  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
+error.[ch]
+       - internal_debug: new function, prints a message like internal_warning,
+         no-op if DEBUG is not defined
+       - INTERNAL_DEBUG: macro that expands to internal_debug when DEBUG is
+         defined, and nothing otherwise
 
-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
+{jobs,trap}.c
+       - changed some internal_warning and internal_inform calls to use
+         internal_debug, since they were active only when DEBUG is defined
 
-arrayfunc.h
-       - expand_and_quote_assoc_word,quote_compound_array_list: new extern
-         declarations
+parse.y
+       - parse_comsub: add internal_debug call when a command substitution
+         ends with unterminated here-documents
 
-                                  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/common.c
+       - number_of_args: unconditionally return posparam_count
 
-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>
+{jobs,execute_cmd,subst}.c,parse.y,builtins/{command.def,evalstring.c}
+       - INTERNAL_DEBUG: use instead of calls to itrace protected by #ifdef
+         DEBUG
 
-shell.c
-       - maybe_make_restricted: add HISTFILE to the list of readonly variables
+                                  12/26
+                                  -----
+lib/glob/glob.c
+       - glob_always_skip_dot_and_dotdot: initialize to 1 (enabled)
 
-doc/{bashref.texi,bash.1}
-       - document new restricted shell restrictions
+builtins/shopt.def
+       - globskipdots: new shell option, exposes glob_always_skip_dot_and_dotdot
 
-                                   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
+doc/{bash.1,bashref.texi}
+       - globskipdots: document new shell option
+
+execute_cmd.c
+       - fix_arrayref_words: call valid_array_reference with 0 for third arg
+         because the words have not undergone any word expansions yet and
+         the quotes are still present. This makes things like
+               A=[\[]=set
+               unset A[\[]
+         work
 
 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
+       - word_list_split: if a word undergoes word splitting but is not
+         changed, preserve any W_ARRAYREF flag into the new word. This makes
+         things like
+               rkey=']'
+               unset A[$rkey]
+         work because the unset builtin sees the W_ARRAYREF flag on its
+         argument
 
-                                   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>
+                                  12/29
+                                  -----
+builtins/common.h
+       - SET_VFLAGS: take a set of word flags, and set flags for use with
+         valid_array_reference (vflags) and assign_array_element/bind_int_variable
+         (bindflags) based on those flags and the setting of assoc_expand_once
+         (moved from read.def and generalized)
 
-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
+arrayfunc.c
+       - array_variable_name: now exclusively takes AV_xxx flags; understands
+         how to translate AV_NOEXPAND to the right flag for skipsubscript;
+         understands AV_ONEWORD and AV_NOEXPAND
+       - array_variable_part: just passes the FLAGS arg to array_variable_name
+       - assign_array_element: translates ASS_ flags to AV_ flags for
+         array_variable_name
+       - array_value_internal: now just passes flags straight through to
+         array_variable_part (which sends them to array_variable_name)
 
-lib/readline/rlprivate.h
-       - _rl_internal_startup_hook: new extern declaration
+builtins/common.[ch]
+       - builtin_bind_var_to_int: now takes a new FLAGS third argument; passes
+         it to bind_var_to_int
 
-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>
+builtins/printf.def
+       - printf_builtin: use SET_VFLAGS to set flags for builtin_bind_variable
+         (bindflags); makes things like
+               declare -A A; key=']' ; printf -v A[$key] "foo"
+         work without a subscript error as long as assoc_expand_once is defined
 
-lib/readline/funmap.c
-       - "operate-and-get-next": now a bindable readline command
+builtins/read.def
+       - read_builtin: use new common version of SET_VFLAGS instead of
+         private version; changed to use new calling sequence; makes things like
+               declare -A A; key=']' ; read A[$key] <<<"foo"
+         work without a subscript error as long as assoc_expand_once is defined
 
-lib/readline/emacs_keymap.c
-       - rl_operate_and_get_next: bound to ^O in emacs mode by default
+builtins/wait.def
+       - wait_builtin: use SET_VFLAGS for variable name with -p option
+       - wait_builtin: call builtin_bind_var_to_int with new bindflags third
+         argument
 
-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
+expr.c
+       - expr_streval: just pass TFLAG (AV_xxx flags) straight through to
+         array_variable_part
 
-                                   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
+variables.c
+       - bind_int_variable: translate the assignment flags (ASS_xxx) to
+         VA_xxx flags for valid_array_reference calls (ASS_ONEWORD); translate
+         assignment flags to AV_xxx flags for array_variable_part
 
-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
+                                  12/30
+                                  -----
+subst.c
+       - parameter_brace_expand: when expanding an indirect variable, extend
+         the special case for array[@] and array[*] (set -u/no positional
+         parameters, obeying the baroque quoting rules) to the value of the
+         indirection. Report and fix from konsolebox <konsolebox@gmail.com>
 
-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>
+                                  12/31
+                                  -----
+parse.y
+       - compound_list: when parsing a compound_list production, collect any
+         pending here-documents after reading a newline, not after reading
+         any command terminator. Fixes interactive-only prompting bug
+         reported back in 8/2021 by Hyunho Cho <mug896@gmail.com>
 
-                                   5/8
+                                1/1/2022
+                                --------
+bashline.c
+       - set_filename_quote_chars: break code that modifies
+         rl_filename_quote_characters based on whether DIRNAME needs to be
+         expanded from bash_directory_completion_hook into its own function
+       - bash_check_expchar: break code that checks whether DIRNAME will be
+         word expanded from bash_directory_completion_hook into its own
+         function 
+       - bashline_reset,attempt_shell_completion: make sure complete_fullquote
+         is set to 1 (as it is by default) in case a completion modifies it
+       - bash_quote_filename: if we are completing (but not expanding --
+         direxpand is unset) and backslash-quoting a filename with expansion
+         characters as determined by bash_check_expchar, make sure
+         filename_bstab is set not to include the expansion char (and any
+         following char and closer) and set complete_fullquote to 0 so
+         sh_backslash_quote uses filename_bstab. Fixes the longstanding issue
+         of quoting a `$', for instance, if the rest of the filename contains
+         any characters that need quoting in filenames. This assumes that the
+         filename is unquoted (*QCP == 0) so the word will be expanded and is
+         not part of the filename (if needed, we can use file_exists to check
+         whether the expansion characters are actually part of the filename)
+
+                                   1/7
                                    ---
-support/config.{guess,sub}
-       - update to latest versions
+examples/loadables/accept.c
+       - new -b bindaddr option to bind to a specific IP address
+       - move setsockopt calls before bind() to avoid TIME_WAIT issues. Fixes
+         from Dzogovic Vehbo <dzove855@gmail.com>
 
+                                  1/10
+                                  ----
 configure.ac
-       - add support for `genode' from Emery Hemingway <ehmry@posteo.net>
+       - bumped version to 5.2-alpha.
 
-                                  5/14
+                                  1/16
                                   ----
-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
+tests/{unicode1,glob2,intl2}.sub, tests/run-intl
+       - minor changes to add warnings for missing locales that cause test
+         failures
+
+                                  1/17
                                   ----
-configure.ac,config.h.in
-       - getrandom: add test, define HAVE_GETRANDOM
-       - getentropy: add test, define HAVE_GETENTROPY
+parse.y
+       - history_delimiting_chars: if we have a blank line by the time we
+         hit the end of the tests, return a semicolon for the first blank
+         line to avoid running lines of a multi-line command together.
+         Fixes bug reported by Joakim Lindblad <joakim@cb.uu.se>
+
+subst.c
+       - expand_string_for_patsub: expand the replacement string for pattern
+         substitution assuming that it will eventually be passed to
+         strcreplace to replace `&' with the matched portion of the string.
+         This calls expand_string_for_pat(), which leaves the string quoted
+         and does not perform word splitting, then calls
+         quote_string_for_repl to post-process the expanded string.
+       - quote_string_for_repl: perform quote removal on passed string while
+         replacing CTLESC escaping a `&' or a backslash with a backslash. The
+         result must be passed to strcreplace
+       - parameter_brace_patsub: call expand_string_for_patsub if
+         patsub_replacement is set to quote 
 
-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
+                                  1/18
+                                  ----
+subst.c
+       - read_comsub: make istring_index a size_t to avoid overflow with very
+         large values of istring_size.
+         From https://savannah.gnu.org/support/index.php?110596
+       - expand_word_internal: make istring_index a size_t
 
-                                  5/20
+                                  1/20
                                   ----
-configure.ac
-       - updated version to 5.1-alpha
+buitins/cd.def
+       - add a description of `cd -' to the help text. Suggested by
+         Rob Landley <rob@landley.net>
 
-lib/readline/readline.h
-       - updated defines to readline version 8.1
+                                  1/21
+                                  ----
+lib/glob/glob.c
+       - glob_vector: if we allocate NEXTLINK using malloc, and free it due to
+         some allocation failure, reset FIRSTMALLOC to avoid duplicate frees
+         later on
 
-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
+subst.[ch]
+       - sub_append_string: the INDX parameter is now a size_t to avoid
+         overflow
 
-                                  5/21
-                                  ----
-COMPAT
-       - overhauled and updated the descriptions of the various shopt compatNN
-         options
+parse.y
+       - decode_prompt_string: RESULT_INDEX is now a size_t to pass to
+         sub_append_string
 
-doc/bashref.texi
-       - Shell Compatibility Mode: new section, describes compatibility levels,
-         BASH_COMPAT, and the various compatNN shopt options
+jobs.[ch],nojobs.c
+       - wait_for_background_pids: now returns the number of jobs/processes
+         reaped
 
-                                  5/23
-                                  ----
-doc/bash.1
-       - added Shell Compatibility mode section
+builtins/wait.def
+       - wait_builtin: if -p pid supplied without -n, make sure we do something
+         useful if no job/pid arguments are supplied and there are no jobs.
+         Reported by Oguz <oguzismailuysal@gmail.com>
 
-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
+builtins/read.def
+       - read_builtin: if we have a timeout, use SIGALRM instead of select
+         when in posix mode, since we use read instead of zread. Fixes bug
+         reported by Andreas Schwab <schwab@linux-m68k.org>
 
-                                  5/27
+subst.c
+       - expand_string_dollar_quote: handle single-quoted and double-quoted
+         strings that might include $' and $" without attempting translation;
+         do more error checking for unterminated $' and $" that leaves those
+         characters unmodified. This is for use by readline's various line
+         expansion functions (shell_expand_line)
+
+                                  1/23
                                   ----
-variables.c,/lib/sh/random.c
-       - moved functions that manage 16-bit and 32-bit random values to
-         lib/sh/random.c
+parse.y,make_cmd.c
+       - revert change that unconditionally processes $'...' and $"..." in
+         here-document bodies; there are only a couple of cases where they
+         should be processed in a double-quote environment
 
-alias.c
-       - add_alias: don't bother checking null alias values for ending in
-         space or tab
+                                  1/24
+                                  ----
 
-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
+subst.c
+       - extract_dollar_brace_string: if we see another `${' on the rhs of
+         the operator, reset the dolbrace_state to DOLBRACE_PARAM while we
+         read this new ${...} string
+       - extract_heredoc_dolbrace_string: new function, variant of
+         extract_dollar_brace_string, to process the WORD in ${PARAM OP WORD}
+         while expanding lines of here-document data. It's complicated by the
+         requirement to add to the result string as we go along, since we
+         need to change the contents of the input string with ansi expansion
+         or locale translation.
+       - string_extract_single_quoted: take a new third argument: ALLOWESC.
+         This allows backslash to escape an embedded single quote, needed by
+         extract_heredoc_dolbrace_string to process $'...'; changed callers
 
-                                  5/28
+                                  1/25
                                   ----
-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>
+parse.y
+       - parse_matched_pair: ansi-expand $'...' in WORD for ${PARAM OP WORD}
+         and single-quote the result if dolbrace_state == DOLBRACE_QUOTE
+         (posix pattern removal operators) even if extended_quote == 0
 
-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
+subst.c
+       - extract_heredoc_dolbrace_string: add logic to align with parse.y:
+         parse_matched_pair and its $'...' expansion, including handling
+         extended_quote
 
-                                  5/29
+                                  1/27
                                   ----
-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
-                                   ---
+builtins/evalstring.c
+       - should_optimize_fork: broke conditions for optimizing away the fork
+         for a simple command out of optimize_fork into new function, call
+         from should_suppress_fork and optimize_subshell_command. Call from
+         optimize_fork if (subshell_environment & SUBSHELL_PAREN), relying
+         on fact that CMD_TRY_OPTIMIZING is only set in a couple of specific
+         conditions
+       - optimize_fork: call should_suppress_fork only if startup_state == 2;
+         it does the extra checks for that specific case
+       - optimize_fork: call should_optimize_fork if we're in a (list)
+         subshell (subshell_environment & SUBSHELL_PAREN)
+       - optimize_subshell_command: set CMD_TRY_OPTIMIZING on the right side
+         of a `&&', `||', or `;' list as long as it's a simple command so
+         we can check with optimize_fork() when it's time to execute it
+
 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>
+       - execute_in_subshell: call optimize_subshell_command for (list)
+         subshells to either set CMD_NO_FORK for simple commands or set
+         CMD_TRY_OPTIMIZING for likely candidates for later optimization
 
-                                   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.
+builtins/common.h,builtins/evalstring.c
+       - optimize_fork: renamed to optimize_connection_fork; changed callers
+
+                                  1/31
+                                  ----
+include/shmbutil.h
+       - COPY_CHAR_I,SCOPY_CHAR_I: add check for locale_utf8locale and
+         (c & 0x80) as in other macros
 
-redir.[ch],builtins/evalstring.c
-       - redirection_error: changed extern declaration and callers
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: rewrote to use array indexing
+         and COPY_CHAR_I to make it easier to drop in future calls to
+         charvis() to make `unsafe' characters visible if FLAGS == 1
 
-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
+                                   2/1
                                    ---
 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>
+       - parse_comsub: if we are currently expanding aliases, temporarily
+         turn off alias expansion if we are not in posix mode so we defer
+         alias expansion until command_substitute(). Fixes double-expansion
+         bug reported by Martijn Dekker <martijn@inlv.org> and aligns with
+         https://www.austingroupbugs.net/view.php?id=1342
+       - xparse_dolparen: turn off alias expansion entirely while running the
+         parser: either we do it in parse_comsub (posix mode) or in
+         command_substitute (default mode)
+       - parse_string_to_command: ditto
+
+subst.c
+       - command_substitute: if we are expanding aliases, temporarily turn
+         off alias expansion if we are in posix mode, since we already
+         performed it in parse_comsub() and are using the command string
+         reconstituted from the parse result
 
-general.h,parse.y
-       - __P -> PARAMS
+doc/bashref.texi
+       - bash posix mode: add description of alias expansion and command
+         substitution parsing and execution
 
-shell.c
-       - shellstart: struct timeval used to initialize shell starting time;
-         shell_start_time now initialized from shellstart.tv_sec
+                                   2/4
+                                   ---
+lib/readline/rltty.c
+       - rl_deprep_terminal: set _rl_last_c_pos to 0 after outputting
+         BRACK_PASTE_FINI, since the last character in that is \r. Partially
+         address issue raised by Markus Schwarzenberg <markus.schwarzenberg@freenet.de>
+         in https://lists.gnu.org/archive/html/bug-bash/2022-02/msg00056.html
 
-variables.c
-       - assign_seconds: reset shellstart to set shell starting time
+                                   2/5
+                                   ---
+doc/{bash.1,bashref.texi}
+       - minor typo fixes from Helge Kreutzmann <debian@helgefjell.de>
 
-pcomplete.c
-       - include posixtime.h instead of <sys/time.h>
+                                   2/7
+                                   ---
+{arrayfunc,variables}.c
+       - ARRAY_EXPORT: changes to encode array and assoc variables using a
+         scheme similar to shell functions so we can export arrays and
+         differentiate them from scalar variables and differentiate array
+         and assoc variables. Still not enabled by default.
 
-lib/sh/{ufuncs,uconvert}.c
-       - include posixtime.h instead of the inline conditional includes
+variables.c
+       - mk_env_string: third argument is now the variable's attributes or 0,
+         with all the attributes we can export arrays
 
-aclocal.m4
-       - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the
-         deprecated AC_HEADER_EGREP
+lib/readline/bind.c
+       - active-region-start-color,active-region-end-color: new bindable
+         string variables, one to set the active region color (instead of
+         standout mode) and one to turn it off (instead of the "se" terminal
+         capability). They set _rl_active_region_start_color and
+         _rl_active_region_end_color variables via functions
 
-posixtime.h
-       - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement
-         definition
+lib/readline/display.c
+       - putc_face: if setting standout mode, check for both the start color
+         and end color variables and output the start color string. If turning
+         off standout mode (normal face), output the end color string. Both
+         variables must be set
 
-lib/sh/gettimeofday.c
-       - gettimeofday: replacement function, so we don't have to use
-         HAVE_GETTIMEOFDAY in the rest of the code
+lib/readline/{readline.c,rlprivate.h}
+       - declarations for _rl_active_region_start_color and
+         _rl_active_region_end_color
 
-                                   6/5
+                                   2/8
                                    ---
-{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
+bashline.c
+       - initialize_readline: add bindable name `vi-edit-and-execute-command'
 
-doc/{bash.1,bashref.texi}
-       - SECONDS: clarify that the number of seconds is always determined by
-         querying the system clock
+shell.c
+       - subshell_exit: make sure to set last_command_exit_value before
+         calling the exit trap. Fixes bug reported by Greg Edwards
+         <gedwards@ddn.com>
 
-                                   6/8
+                                   2/9
                                    ---
-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/{terminal.c,rlprivate.h}
+       - _rl_region_color_on,_rl_region_color_off: functions to output the
+         _rl_active_region_start_color and _rl_active_region_end_color
+       - _rl_reset_region_color: function to encapsulate setting the region
+         color to an arbitrary string, including doing memory management
 
-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
+lib/readline/display.c
+       - putc_face: call _rl_region_color_on and _rl_region_color_off instead
+         of _rl_standout_on and _rl_standout_off
 
-                                  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
+lib/readline/terminal.c
+       - _rl_init_terminal_io: initialize _rl_active_region_start_color and
+         _rl_active_region_end_color from _rl_term_so and _rl_term_se,
+         respectively; reset every time the terminal is changed
+       - _rl_init_terminal_io: turn off the active region for a dumb terminal
 
-[bash-5.1-alpha frozen]
+lib/readline/bind.c
+       - sv_region_{start,end}_color: call _rl_reset_region_color with the
+         appropriate value for WHICH
 
-                                  6/15
+                                  2/10
                                   ----
-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>
+lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
+       - active-region-start-color,active-region-end-color: documented new
+         bindable readline variables
+       - enable-active-region: document using active-region-start-color to
+         highlight the text in the region
 
-                                  6/16
+                                  2/11
                                   ----
-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>
+parse.y
+       - read_token,read_token_word: make sure characters read by shell_getc
+         are protected by appropriate calls to MBTEST when testing for shell
+         metacharacters and operators
 
-                                  6/17
+                                  2/14
                                   ----
-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>
+builtins/shopt.def
+       - set_compatibility_level: if the current compatibility level is outside
+         the range of the compatNN options, just leave it alone when
+         unsetting one of the options (which by definition was already
+         unset). Fixes issue reported by Mihai Moldovan <ionic@ionic.de>
 
-                                  6/18
+                                  2/16
                                   ----
-po/Makefile.in.in
-       - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have
-         to create the variable manually
+lib/readline/search.c
+       - rl_history_search_{pos,len,flags}: rename to have a leading `_'
+       - _rl_history_search_pos: no longer static so other parts of readline
+         can see it
 
-lib/readline/doc/rltech.texi
-       - add descriptions of the active mark functions that are available to
-         applications. I guess they will remain public
+lib/readline/rlprivate.h
+       - _rl_history_search_pos: extern declaration
 
-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
+lib/readline/readline.c
+       - readline_internal_teardown: don't run the undo list against the
+         current history entry if the non-incremental search functions have
+         set _rl_history_search_pos to it, since it doesn't reflect the
+         current contents of the line buffer. Fixes issue reported by
+         Andreas Schwab <schwab@linux-m68k.org>
 
-                                  6/22
+lib/readline/misc.c
+       - _rl_start_using_history: initialize _rl_history_search_pos to
+         something invalid so it doesn't match where_history()
+
+                                  2/17
                                   ----
-lib/sh/zread.c
-       - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by
-         Jason A. Donenfeld <Jason@zx2c4.com>
+lib/readline/callback.c
+       - rl_callback_read_char: make sure _rl_eof_found is set to the value
+         of eof before calling the deprep terminal function, so it can do
+         different things based on whether the input code read EOF (or the
+         user entered the EOF character). From a gdb discussion started by
+         Andrew Burgess <aburgess@redhat.com> (still more to do, since this
+         is not part of the public API)
 
-lib/sh/zcatfd.c
-       - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096)
+                                  2/18
+                                  ----
+lib/readline/readline.h
+       - RL_STATE_EOF: new readline state value; set when readline reads an
+         EOF character on an empty line or a read returns an error
+       - rl_eof_found: new public variable
 
-lib/sh/zmapfd.c
-       - zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096)
+lib/readline/rprivate.h
+       - _rl_eof_found: renamed to rl_eof_found, so not declared here
 
-                                  6/29
-                                  ----
-aclocal.m4
-       - BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants,
-         from Jessica Clarke <jrtc27@jrtc27.com>
+lib/readline/{callback,readline}.c
+       - RL_STATE_EOF: set appropriately when readline gets an EOF. Suggested
+         by Andrew Burgess <aburgess@redhat.com>
+       - RL_STATE_EOF: make sure it's not set when readline starts
+       - rl_eof_found: set appropriately when readline gets an EOF
 
-xmalloc.c
-       - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think
-         it works
+lib/readline/{callback,readline,rltty}.c
+       - rl_eof_found: new name for _rl_eof_found
 
-examples/loadables/finfo.c
-       - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke
-         <jrtc27@jrtc27.com> 
+lib/readline/doc/rltech.texi
+       - RL_STATE_EOF: document
 
-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>
+                                  2/19
+                                  ----
+parse.y
+       - parse_comsub: turn off parser state flags we don't want to inherit
+         into this call to the parser (PST_REGEXP, PST_EXTPAT, PST_CONDCMD,
+         PST_CONDEXPR for now). Fixes bug reported by konsolebox
+         <konsolebox@gmail.com>
 
-                                   7/1
-                                   ---
-eval.c
-       - alrm_catcher: use write(2) instead of fprintf to print the
-         auto-logout message to the terminal
+                                  2/23
+                                  ----
+findcmd.c,builtins/hash.def
+       - replace calls to is_directory with file_isdir, which only performs a
+         stat and doesn't do the eaccess call to check for an executable file
 
-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>
+findcmd.c
+       - find_in_path_element: takes a new RFLAGSP argument, an int * where
+         the status flags for the returned pathname are returned; saves
+         additional calls to stat/eaccess
+       - search_for_command: get the returned flags from
+         find_user_command_in_path so we don't need any additional calls to
+         file_status after we find the command in $PATH
 
-                                   7/2
-                                   ---
+                                  2/24
+                                  ----
 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>
+       - FUNCTIONS: some small changes to the description of local variables
+         and dynamic scoping, with emphasis on how that affects `unset'
+         behavior. Inspired by a discussion with
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-                                   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>
+                                  2/25
+                                  ----
+examples/loadables/realpath.c
+       - renamed -s option to -q to align with other versions
+       - perform array assignment for `-a varname' even if -q option supplied  
+       - renamed -S option to -s for Linux compatibility
 
-                                   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
+                                  2/28
+                                  ----
+lib/readline/misc.c
+       - _rl_free_saved_history_line: call rl_free_undo_list, saving and
+         setting rl_undo_list to the saved history line's data, so the right
+         call to _hs_replace_history_data happens and we don't end up with
+         a pointer aliasing problem. Fixes core dump reported by 
+         Andreas Schwab <schwab@linux-m68k.org>, but does not make his
+         scenario equivalent to incremental search
+
+                                   3/1
                                    ---
-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
+lib/readline/search.c
+       - make_history_line_current: save the current line before replacing it
+         with the found history entry using rl_maybe_save_line
+       - noninc_dosearch: we don't want the saved history line, so free it
+         after calling make_history_line_current
+       - _rl_history_search_internal: call rl_maybe_replace_line after making
+         changes to the line buffer with make_history_line_current so we can
+         save the undo list we constructed before we set the history position
 
-builtins/evalstring.c
-       - optimize_shell_function: try to optimize away the fork in the last
-         command in a shell function body, under certain conditions
+                                   3/2
+                                   ---
+lib/readline/display.c
+       - expand_prompt: add missing piece to patch from 10/26/2021: if we are
+         recalculating the number of invisible characters on the first line
+         of the prompt, we need to update INVFL, even if we already set it
+         when we hit the number of physical characters. This ends up being
+         assigned to prompt_invis_chars_first_line, and is used in several
+         subsequent calculations. Reported by
+         Andreas Schwab <schwab@linux-m68k.org>
 
-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
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - enable-bracketed-paste: add some language making it clearer that
+         bracketed paste prevents the pasted text from being interpreted as
+         editing commands. Suggested by Karl O. Pinc <kop@karlpinc.com>
 
-                                   7/8
+                                   3/4
                                    ---
-{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c
-       - interrupt_immediately: remove, no longer used
+make_cmd.c
+       - make_here_document: perform quote removal on the here-doc delimiter
+         only if it's marked as quoted, which prevents quotes from inside a
+         command substitution from being removed (they're supposed to begin a
+         new quoting context) when the word itself isn't flagged as quoted
+         (which means the body of the here-document gets expanded). You can't
+         perform quote removal *and* expand the here-document lines. From an
+         austin-group discussion back in early February
+
+lib/sh/strvis.c
+       - charvis -> sh_charvis; change caller
+       - sh_charvis: now take an additional SLEN argument to avoid having to
+         compute the string length every time; change callers
+       - sh_charvis: add a utf-8 locale-specific check before calling
+         COPY_CHAR_I (in practice, doesn't make any real difference)
+
+                                  3/10
+                                  ----
+arrayfunc.c
+       - convert_var_to_array: if we're being asked to create an associative
+         array (flags & 2), and we have an existing variable that is not an
+         assoc array (and not an existing indexed array), call
+         convert_var_to_assoc to make it one
 
+                                  3/11
+                                  ----
 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>
+       - wait_for: don't call get_tty_state() if readline is dispatching
+         (RL_STATE_DISPATCHING) with the terminal settings changed
+         (RL_STATE_TERMPREPPED), the same way we don't if we are running a
+         command for programmable completion. Fixes bug with SIGINT reverting
+         to the saved readline terminal settings reported by
+         Markus Napierkowski <markus.napierkowski@cyberus-technology.de>
 
-                                   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
+parse.y
+       - decode_prompt_string: make sure the expansion of \w, \W, and \s
+         are all run through sh_strvis before calling
+         sh_backslash_quote_for_double_quotes or just through sh_strvis if
+         we're not running the prompt string through word expansions.
+         Fixes issue reported by Josh Harcome <joshharc@gmail.com> back
+         in mid-January
 
-                                  7/14
+                                  3/16
                                   ----
-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>
+bashline.c
+       - bash_quote_filename: if we have a word to complete that contains
+         characters that introduce a word expansion, make sure the passed
+         string does *not* exist as a filename before removing those
+         characters from the set that must be backslash-quoted. See change
+         from 1/1/2022
 
-                                  7/17
+                                  3/18
                                   ----
-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
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list or
+         _rl_saved_line_for_history; don't unconditionally save the history
+         line. This reverts some of the changes to support setting the
+         history position in history-search-backward
+       - rl_history_search_internal: only free the saved history line if we
+         were the ones who created it
 
-                                  7/18
+                                  3/21
                                   ----
-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>
+lib/readline/nls.c
+       - xmalloc.h: include for systems without setlocale(), so xfree has a
+         prototype. Report and fix from András Kucsma <r0maikx02b@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>
+lib/readline/search.c
+       - _rl_history_search_internal: use previous-history/next-history to
+         move to the found history line instead of directly calling
+         history_set_pos. This makes the behavior more similar to incremental
+         search
+       - rl_history_search_internal: make sure to set rl_undo_list to the
+         current history undo list around the calls to rl_get_previous_history
+         or rl_get_next_history, in order to fool the call to
+         maybe_replace_line they make
 
-                                  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>
+lib/readline/readline.c
+       - _rl_executing_func: the currently-executing readline command function
 
-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>
+lib/readline/rlprivate.h
+       - _rl_executing_func: extern declaration
 
-                                  7/28
+lib/readline/search.c
+       - _rl_history_search_internal: removed (commented out) code that sets
+         the current history entry to the found history entry, too much
+         assumes that the current undo list should be applied to the current
+         history entry (where_history())
+
+                                  3/23
                                   ----
-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>
+subst.c
+       - parameter_brace_expand_word: if we have double-quoted ${*} or ${@},
+         make sure we are setting W_HASQUOTEDNULL in the flags we return to
+         the caller if we are returning QUOTED_NULL(word)
+       - parameter_brace_expand_word: if we have a double-quoted associative
+         array reference using `*' or `@', make sure we are setting
+         W_HASQUOTEDNULL in the flags we return to the caller if we are
+         returning QUOTED_NULL(word)
+       - parameter_brace_expand: if we're using the `[:]+' word expansion
+         operator, we need to note a quoted null string and pass the
+         W_QUOTEDNULL flag back to the caller
+       - expand_word_internal: make sure to return a QUOTED_NULL
+         (word[0] == CTLNUL) back to the caller if HAD_QUOTED_NULL is set,
+         regardless of whether or not we see a quoted dollar at. Fix for bug
+         reported by Andreas Luik <andreas.luik@innovative-navigation.de>
 
-                                  7/30
+arrayfunc.c
+       - array_value_internal: fix typo and set estatep->type to ARRAY_INDEXED
+         for indexed arrays
+
+                                  3/31
                                   ----
-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/readline/{history.c,histlib.h}
+       - _hs_at_end_of_history: convenience function to tell whether or not
+         the current history position is at the end of the history list
 
-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
+                                   4/1
                                    ---
-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()
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list if it is equal to
+         _rl_saved_line_for_history->data, since we will need to restore it
+        later if we got it from a history entry. Fixes issue dating back to
+        7/2021 and changes to _rl_free_saved_line_for_history, current issue
+        reported by Andreas Schwab <schwab@linux-m68k.org>
 
-                                   8/3
+                                   4/5
                                    ---
-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>
+lib/readline/{complete,histfile,histsearch,isearch,terminal}.c
+       - xfree: use instead of free
 
-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>
+                                   4/7
+                                   ---
+configure.ac
+       - bumped version to bash-5.2-beta
 
-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>
+[bash-5.2-beta frozen]
 
-                                   8/4
+                                   4/8
                                    ---
-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>
+lib/readline/input.c
+       - _rl_orig_sigset: need extern declaration if HAVE_SELECT is defined.
+         From https://savannah.gnu.org/support/?110634
 
-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>
+examples/loadables/seq.c
+       - PRIdMAX: redefine if PRI_MACROS_BROKEN is defined.
+         From https://savannah.gnu.org/support/index.php?110635
 
-shell.c
-       - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list()
+                                  4/11
+                                  ----
+configure.ac
+       - BASH_FUNC_STRTOIMAX: replace strtoimax if the system doesn't provide
+         a declaration in a standard header file. Uses new m4/strtoimax.m4.
+         From https://savannah.gnu.org/support/index.php?110633
 
-sig.c
-       - termsig_handler: call unlink_all_fifos() instead of
-         unlink_fifo_list()
+builtins/printf.def
+       - getdouble: new function, parses string into `double' using strtod
+       - printf_builtin: check for the `L' length modifier and use long
+         doubles for the floating point conversion specifiers. If it's not
+         supplied, use `double' when in posix mode (as posix specifies) and
+         long double (if it's available, double if not) in default mode.
+         From a report from Paul Eggert <eggert@cs.ucla.edu>
 
-                                   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>
+                                  4/12
+                                  ----
+lib/sh/oslib.c
+       - bzero: update function signature to modern BSD version
 
-                                  8/10
+                                  4/14
                                   ----
-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>
+lib/sh/oslib.c
+       - bcopy, gethostname, mkfifo: update function signatures to modern
+         versions
 
-                                  8/11
+                                  4/15
                                   ----
-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>
+jobs.c,nojobs.c
+       - wait_for_single_pid: if the pid or job argument is invalid -- isn't
+         a child of this shell -- return 257, which is out of the range of
+         valid 8-bit status values
+
+execute_cmd.c
+       - execute_pipeline: if wait_for_single_pid returns > 256, set it to
+         127 (invalid process)
 
-                                  8/12
+jobs.c
+       - wait_for_background_pids: if wait_for_single_pid returns > 256, set
+         the status we return in PS to 127 (what it was before)
+
+builtins/wait.def
+       - wait_builtin: if wait_for_single_pid returns > 256, treat it as an
+         error and set pstat.pid to NO_PID
+       - wait_builtin: if -p supplied, and we get to the end of the argument
+         list with PSTAT.PID != NO_PID (which we assume means that the return
+         value is set from PSTAT.STATUS), set the variable name to PSTAT.PID.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+       - wait_builtin: for compatibility with the netbsd sh, leave the variable
+         name specified with `-p' unset if there are no PID arguments.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+
+                                  4/17
                                   ----
-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
+parse.y
+       - xparse_dolparen: if (flags & SX_NOLONGJMP), don't call
+         jump_to_top_level() on errors
+
+bashline.c
+       - bash_quote_filename: don't call quote_word_break_chars() unless we
+         have word break chars initialized. Fixes bug reported by
+         Sam James <sam@gentoo.org>
 
-                                  8/14
+                                  4/18
                                   ----
-flags.c
-       - no_invisible_vars: removed undocumented `-I' flag
+pcomplete.c
+       - gen_globpat_matches: call glob_filename with the GX_GLOBSTAR flag if
+         the `globstar' shell option is enabled. From a report by
+         Steve <bash@lonetwin.net>
 
-{flags,variables}.c,flags.h,builtins/{declare,setattr.def}
-       - no_invisible_vars: remove all references
+lib/malloc/malloc.c
+       - internal_free: remove the GLIBC21 code (!)
+       - internal_free: make the code that tests against memtop and calls
+         lesscore depend on USE_LESSCORE being defined, which it is by
+         default
 
-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'
+lib/malloc/imalloc.h
+       - USE_LESSCORE: define
 
-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>
+parse.y,shell.h
+       - token_buffer_size and its corresponding saved value in the shell's
+         parser state are now size_t instead of int
 
-                                  8/17
+stringlib.c
+       - strsub,strcreplace: use size_t instead of int for local length and
+         indexing variables
+
+lib/sh/zmapfd.c
+       - zmapfd: use size_t instead of int for local length and indexing
+         variables
+
+lib/sh/zgetline.c
+       - zgetline: use size_t instead of int for local length and indexing
+         variables
+
+                                  4/20
                                   ----
-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>
+pcomplete.c
+       - init_itemlist_from_varlist: free VLIST after assigning it from
+         *SVFUNC and after we get the variable names and values out of it.
+         Report from Robert E. Griffith <bobg@junga.com>
 
-                                  8/24
+                                  4/25
                                   ----
-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>
+redir.c
+       - here_document_to_fd: if the shell compatibility level is bash-5.0 or
+         earlier, use tempfiles for all here-documents and here-strings. From
+         a bug-bash discussion started by Sam Liddicott <sam@liddicott.com>
 
-                                  8/25
+                                  4/26
                                   ----
-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>
+parse.y
+       - parse_comsub: non-interactive shells exit on a syntax error while
+         parsing the command substitution
+       - parse_comsub: unset additional PARSER_STATE flags before calling
+         yyparse(). Inspired by https://bugs.gentoo.org/837203; unsetting
+         PST_COMPASSIGN is the fix for that bug
+       - parse_string_to_word_list: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: unset additional PARSER_STATE flags before
+         calling read_token(); set esacs_needed_count and expecting_in_token
+         to 0 like in parse_comsub() since read_token can use them
 
-                                  8/26
+                                  4/27
                                   ----
-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>
+lib/sh/strvis.c
+       - sh_charvis: changes to handle being compiled without multibyte support
 
-                                  8/31
+                                  4/29
                                   ----
-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>
+lib/readline/callback.c
+       - rl_callback_read_char: don't set rl_eof_found unless eof is > 0,
+         since it can be -3 if we need to read more input in a multi-key
+         sequence. Report from Andrew Burgess <aburgess@redhat.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>
+examples/loadables/Makefile.sample.in
+       - new file, containing the rules to build the example shared object
+       - includes Makefile.inc from wherever it's installed. Suggested by
+         Robert E. Griffith <bobg@junga.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
+examples/loadables/Makefile.inc.in
+       - remove rules that create the example shared object
 
-pcomplete.c
-       - gen_shell_function_matches: change call to array_to_argv
+                                  4/30
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: check for terminating signals before returning,
+         after any longjmp, to improve responsiveness and fix the -c code
+         path before running any exit trap. Report from
+         Emanuele Torre <torreemanuele6@gmail.com>
 
-array.h
-       - execute_array_command: now takes the entire ARRAY * as the first
-         parameter
+                                  5/17
+                                  ----
+builtins/suspend.def
+       - suspend_builtin: the -f option now forces a suspend even if job
+         control is not enabled. Inspired by a discussion with
+         Robert Elz <kre@munnari.OZ.AU>
 
-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>
+doc/{bash.1,bashref.texi}
+       - suspend: updated description to include expanded -f behavior
 
-                                   9/7
+                                  5/25
+                                  ----
+builtins/mkbuiltins.c
+       - -includefile: new argument, specifies extern filename to insert
+         into the #include statement in the structfile (builtins.c) and
+         the filename in the comment in the extern file (builtext.h).
+         From Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+builtins/Makefile.in
+       - builtins.c: change call to mkbuiltins to add -includefile option
+       - builtins.c: change recipe to run all the commands in the same shell
+         invocation
+       - builtins.c: change recipe to specify new filenames in the call to
+         mkbuiltins and move them onto builtins.c/builtext.h if the new ones
+         are different; make the new filenames use the current make recipe
+         shell pid in the filename ($$RECPID).
+         Inspired by Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+                                   6/2
                                    ---
-[bash-5.1-beta frozen]
+builtins/common.c
+       - builtin_find_indexed_array: new function, factored common code out
+         of mapfile and read builtins to find an in-scope indexed array or
+         create one 
 
-                                   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
+builtins/common.h
+       - builtin_find_indexed_array: extern declaration
+
+builtins/{mapfile,read}.def
+       - change callers to use builtin_find_indexed_array
 
 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>
+       - unbind_global_variable, unbind_global_variable_noref: new functions
+         that remove variables from the global_variables table
 
-                                  9/14
-                                  ----
-aclocal.m4
-       - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported
-         by Andreas K. Hüttel <dilfridge@gentoo.org>
+lib/sh/shmatch.c
+       - sh_regmatch: use unbind_global_variable_noref to make sure we act on
+         the copy of BASH_REMATCH in the global scope all the time, ignoring
+         any local variables that might exist. Tentative fix for memory leak
+         report from Emanuele Torre <torreemanuele6@gmail.com>
 
-syntax.h
-       - slashify_in_here_document: restore previous value that doesn't
-         include double quote, since it's only special in certain cases
+doc/{bash.1,bashref.texi}
+       - BASH_REMATCH: add caveat about making it a local variable
 
-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>
+                                   6/6
+                                   ---
+print_cmd.c
+       - print_redirection: if the redirectee for r_duplicating_output_word
+         (r_duplicating_input_word) is 1 (0), don't print it; only print a
+         non-default file descriptor number
+       - print_redirection_list: remove the code that tries to temporarily
+         translate a >&word redirection to >&word now that we won't print a
+         non-default file descriptor number. Fixes issue with `declare -f' and
+         function export reported by Namikaze Minato <lloydsensei@gmail.com>
 
-                                  9/15
+                                  6/13
                                   ----
-support/signames.c
-       - added a number of more esoteric signal names from AIX and Solaris
+configure.ac
+       - bumped version to bash-5.2-rc1
 
-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>
+[bash-5.2-rc1 released]
 
-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
+                                  6/15
+                                  ----
+parse.y
+       - parse_string_to_word_list: save the parser state before any state-
+         changing functions like bash_history_disable(). Reported by
+         Clark Wang <dearvoid@gmail.com>
 
-                                  9/21
+                                  6/16
                                   ----
-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>
+doc/bash.1
+       - play tricks with the value of the zZ number register to refer to
+         `bash(1)' instead of `above' or `below' when creating the builtins
+         man page
 
-                                  9/23
+                                  6/17
                                   ----
 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>
+       - wait: note that wait will return > 128 if interrupted by a signal.
+         Reported by AA <aathan_github@memeplex.com>
 
-examples/loadables/asort.c
-       - asort: loadable builtin to sort an array. Contributed by
-         Geir Hauge <geir.hauge@gmail.com>
+execute_cmd.c
+       - {execute_cond_node,execute_arith_command,eval_arith_for_expr}: make
+         sure to reset this_command_name after running any DEBUG trap so the
+         DEBUG trap doesn't overwrite it.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - execute_select_command: set this_command_name to NULL after running
+         any DEBUG trap like execute_for_command does
 
-                                  10/1
+                                  6/23
                                   ----
+test.c
+       - three_arguments: when given [ ! ! arg ], make sure to advance POS
+         after calling two_arguments to avoid a `too many arguments' error.
+         Report from Steffen Nurpmeso <steffen@sdaoden.eu>
 
-[bash-5.1-rc1 frozen]
-
-                                  10/7
+                                  6/27
                                   ----
 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>
+       - expand_word_internal: when expanding backquoted command substitution,
+         call string_extract with the SX_REQMATCH flag (closing backquote
+         required) only if the word flags don't contain W_COMPLETE,
+         indicating that we're doing this for completion, probably to
+         determine whether or not to append something to the word. Fixes bug
+         reported by Emanuele Torre <torreemanuele6@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
+                                   7/5
+                                   ---
+execute_cmd.c
+       - execute_connection: treat a connector of '\n' the same as ';'
 
-                                  10/8
+print_cmd.c
+       - print_comsub: new function, sets flag noting we are printing a
+         command substitution and calls make_command_string
+       - make_command_string_internal: add '\n' to the ';' case; print command
+         list with newline connector appropriately
+
+parse.y
+       - parse_comsub: call print_comsub instead of make_command_string
+       - list1 production (part of compound_list): if a list is separated by
+         newlines, and the parser is parsing a command substitution, make
+         the connection command with a '\n' connector. Makes the text
+         output of parse_comsub closer to the original source text. From a
+         report from Martijn Dekker <martijn@inlv.org>
+
+                                   7/6
+                                   ---
+doc/bash.1,lib/readline/doc/rluser.texi
+       - complete: add note about arguments passed to command specified by
+         `complete -C'; suggested by Mark Chandler <mcp@synq.so>
+
+builtins/setattr.def
+       - show_local_var_attributes: special-case `local -', since there is
+         no `declare -' equivalent.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - show_all_var_attributes: use `local -' when printing a variable named
+         `-' at the current non-zero variable context
+
+parse.y
+       - shell_getc: if we are at the end of an alias, returning a space,
+         make sure we mark the previous character as single-byte by modifying
+         shell_input_line_property so the space we return is properly
+         recognized. This would fail before if the last character of the
+         alias was a multi-byte character. Reported by
+         Vangelis Natsios <vnatsios@gmail.com>
+
+                                  7/12
                                   ----
-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>
+lib/readline/isearch.c
+       - rl_display_search: don't call rl_redisplay_function before returning;
+         rl_message already calls it. Reported by
+         Frédéric Moulins <frederic@moulins.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().
+configure.ac
+       - bumped version to bash-5.2-rc2
 
-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)
+                                  7/18
+                                  ----
+jobs.c
+       - set_job_control: don't bother calling tcgetpgrp if shell_tty < 0,
+         since it will just fail
 
-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>
+variables.c
+       - reset_local_contexts: new function, delete all context tables
+         associated with shell functions and set variable_context to 0.
+         Called when we want to stop executing in a shell function without
+         going through the pop_context chain with its side effects
 
-                                  10/26
-                                  -----
+variables.h
+       - reset_local_contexts: extern declaration
 
-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
+builtins/evalstring.c
+       - parse_and_execute: call reset_local_contexts instead of setting
+         variable_context to 0
 
-lib/readline/bind.c
-       - hack_special_boolean_var: make sure that _rl_enable_active_region
-         is set appropriately when "enable-bracketed-paste" is modified
+eval.c
+       - reader_loop: call reset_local_contexts in cases where the shell has
+         longjmped for a fatal error and errexit is enabled (ERREXIT), but
+         not for other cases, and especially not for the exit builtin,
+         instead of just setting variable_context to 0. Fixes issue originally
+         reported by Robert Stoll <robert.stoll@tegonal.com>
 
-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
+subst.c
+       - pat_subst: implement sed-like behavior when presented with a null
+         pattern that's anchored at the start or end of the string, or when
+         presented with a null string: process the replacement string for `&'
+         and `\&' and substitute in the result as before. Patch from
+         Koichi Murase <myoga.murase@gmail.com>
 
-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
+                                  7/20
+                                  ----
 
-lib/readline/kill.c
-       - rl_bracketed_paste_begin: make sure we activate the mark only if
-         _rl_enable_active_region is enabled
+[bash-5.2-rc2 frozen]
 
-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
+                                  7/27
+                                  ----
+parse.y
+       - reset_parser: set need_here_doc, esacs_needed_count, expecting_in_token
+         all to 0, since jumping back to a top-level parse needs that
+       - parse_comsub: make sure to reset expand_aliases and shell_eof_token
+         if we're not going to exit immediately out of this function
 
-                                  10/29
-                                  -----
+                                  7/28
+                                  ----
+parse.y
+       - parse_comsub: if the compatibility level is <= 51, set extglob while
+         parsing the command substitution, so bad pattern errors can still be
+         caught but valid patterns are let through and can be evaluated at
+         runtime, when extglob may have been set. If it isn't set, it will
+         still be a parser error when the command substitution is executed.
+         Fixes report from Sam James <sam@gentoo.org> about gentoo scripts.
+       - reset_parser: set extended_glob from global_extglob if the parser
+         state includes PST_CMDSUBST
+       - xparse_dolparen: set global_extglob but don't modify extended_glob,
+         so parse errors can be caught before forking a child for command
+         substitution, as part of word expansion, but after extglob may have
+         been set by command execution (e.g., in a shell function)
 
-doc/bash.1,lib/readline/rluser.texi
-       - enable-bracketed-paste: change to note the the current default is `On'
+                                   8/5
+                                   ---
+[bump version to bash-5.2-rc3]
 
-                                  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>
+                                   8/6
+                                   ---
+trap.c
+       - run_pending_traps: move code from evalstring() so we call
+         parse_and_execute() directly and handle any `return' invocations so
+         we can restore the value of running_trap. Otherwise, if we longjmp
+         past this function, we will think we're running a trap after we
+         finish. Prompted by post from Koichi Murase <myoga.murase@gmail.com>
 
-                                  11/1
+                                   8/9
+                                   ---
+
+lib/readline/nls.c
+       - _rl_current_locale: private variable, stores the value of the
+         LC_CTYPE locale category, as determined by _rl_init_locale; set
+         to allocated memory in _rl_init_locale()
+       - _rl_set_localevars: new function, code from _rl_init_eightbit that
+         checks the current locale (passed as an argument) and sets the
+         various locale-aware variables based on it. It accepts a second
+         argument: FORCE. If non-zero, it means to restore the default "C"
+         locale values if the locale is "C" or "POSIX", now that this
+         function can be called multiple times
+       - _rl_init_eightbit: now just calls _rl_init_locale and
+         _rl_set_localevars
+       - _rl_reset_locale: new function, checks whether our the locale has
+         changed since we last called _rl_init_locale to set our internal
+         idea of its value. If it has changed, call _rl_set_localevars with
+         the new locale and a FORCE argument of 1 to change the
+         locale-dependent variables.
+
+lib/readline/rlprivate.h
+       - _rl_reset_locale: extern declaration
+
+lib/readline/readline.c
+       - rl_initialize: call _rl_reset_locale instead of _rl_init_locale so
+         the internal readline variables get set when we move from a non-
+         multibyte locale ("C") to a multibyte one ("en_US.UTF-8"). Report
+         from Alan Coopersmith <alan.coopersmith@oracle.com>
+
+                                  8/16
                                   ----
-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>
+lib/sh/setlinebuf.c
+       - sh_setlinebuf: allocate buffers for line-buffering stdout and stderr
+         only once, the first time it is requested. Only allocate memory if
+         we're using setvbuf (we usually are). Double the buffer size to 2016
+         if we're using the bash malloc. Otherwise, let stdio handle it.
+
+                                  8/17
+                                  ----
+builtins/exec.def
+       - exec_builtin: make sure to initialize orig_job_control in case the
+         command is not found by search_for_command. Report and fix from
+         Xiami <i@f2light.com>
 
-[bash-5.1-rc2 frozen]
+[bash-5.2-rc3 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>
+                                  8/27
+                                  ----
+parse.y
+       - parse_comsub: restore extended_glob to a local copy (local_extglob)
+         only if we changed it; a safer way to do it. Fixes extglob change
+         issue reported by Kerin Millar <kfm@plushkava.net>
+       - cond_term: restore extended_glob to a local copy; safer than using
+         global_extglob, which we will reserve for error recovery
 
-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>
+                                  8/30
+                                  ----
+parse.y
+       - parse_comsub: don't clear the pushed string list; we might need it to
+         consume additional input to satisfy this command substitution. When
+         we restore the parser state, don't restore the pushed string list in
+         case we used it. From
+         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018727
+       - parse_comsub: don't modify extended_glob if parser_state includes
+         PST_EXTPAT, in which case we've already set extended_glob and
+         global_extglob appropriately. Only matters in compatibility mode.
 
-[bash-5.1-rc3 frozen]
+                                  8/31
+                                  ----
+subst.c
+       - parameter_brace_transform: make sure we return an error if *xform
+         is '\0'. Report from Ivan Kapranov <koltiradw@yandex.ru>
 
-                                  11/18
-                                  -----
-doc/{bash.1,bashref.texi}
-       - small tweaks to the ulimit description to make it more consistent with
-         the Posix standard's terminology
+                                   9/7
+                                   ---
+[bump version to bash-5.2-rc4]
+
+                                   9/8
+                                   ---
+[bash-5.2-rc4 frozen]
 
-                                  12/4
+                                  9/20
                                   ----
+lib/readline/history.c
+       - replace_history_entry: check for a NULL timestamp before trying to
+         copy it. Report from nov.ondrej@gmail.com
 
-[bash-5.1-release frozen]
+                                  9/23
+                                  ----
+[bash-5.2 frozen]