]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - CHANGES
bash-5.0 distribution sources and documentation
[thirdparty/bash.git] / CHANGES
diff --git a/CHANGES b/CHANGES
index 43cb1341a90a67429e8da9883dc7c137e4739321..262fd6568add843b7dffbd461e3166e4e7278090 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,820 @@
+This document details the changes between this version, bash-5.0-release, and
+the previous version, bash-5.0-rc1.
+
+1. Changes to Bash
+
+a. Tilde expansion isn't performed on indexed array subscripts, even for
+   backwards compatibility.
+
+b. The shell doesn't exit in posix mode if the eval builtin gets a parse
+   error when run by the command builtin.
+
+c. Fixed a bug that caused a shell comment in an alias to not find the end
+   of the alias properly.
+
+d. Reverted a change from April, 2018 that caused strings containing
+   backslashes to be flagged as glob patterns.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.0-rc1, and
+the previous version, bash-5.0-beta2.
+
+1. Changes to Bash
+
+a. Fix to initial word completion detection code.
+
+b. Fixed a bug that caused issues with assignment statements containing ^A in
+   the value assigned when IFS contains ^A.
+
+c. Added a fallback to fnmatch() when strcoll can't correctly deal with
+   bracket expression character equivalence classes.
+
+d. Fixed a bug that caused $BASH_COMMAND to contain the trap handler command
+   when running a trap handler containing [[ or (( commands.
+
+e. Fixed a bug that caused nameref assignments in the temporary environment
+   to potentially create variables with invalid names.
+
+f. Fixed a bug that caused `local -' to turn off alias expansion in scripts.
+
+g. Fixed a parser issue with a command string containing EOF after an invalid
+   command as an argument to a special builtin not causing a posix-mode shell
+   to exit.
+
+h. Made a slight change to the FNV-1 string hash algorithm used for associative
+   arrays (corrected the initial seed).
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+a. The `select' command now supports command forms without a word list
+   following `in'.
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.0-beta2, and
+the previous version, bash-5.0-beta.
+
+1. Changes to Bash
+
+a. Fixed a bug that could cause a seg fault while parsing a subshell command
+   inside a command substitution.
+
+b. Fixed several small memory leaks uncovered by coverity.
+
+c. Fixed a problem with command substitution inside an interactive shell that
+   could cause the parent to receive a SIGHUP.
+
+d. Fixed a problem with using `*' and `@' as subscripts when assigning values
+   to an associative array with assoc_expand_once enabled.
+
+e. Fixed a bug that could cause a huge memory allocation when completing a
+   word beginning with an invalid tilde expansion.
+
+f. Cleaned up some incompatiblities with bash-4.4 when expanding indexed array
+   subscripts used in arithmetic expansions when assoc_expand_once is enabled.
+
+g. The ${parameter@a} expansion will display attributes even if `parameter' is
+   unset.
+
+h. Fixed a bug that caused the output of `set' to cut off some variables before
+   printing the value.
+
+i. Treat a failure to assign a variable when using the ${x:=value} expansion
+   as an expansion error, so non-interactive posix-mode shells exit
+
+j. Fixed a problem when expanding $* in a context where word splitting is not
+   performed when IFS is NULL.
+
+k. Temp files used to store here documents are forced readable, no matter what
+   the user's umask says.
+
+l. Fixed a problem where an interrupted brace expansion could cause the shell
+   to attempt to free an invalid memory location.
+
+m. Make sure to check for any terminating signals after running a trap
+   handler; don't wait until the next time we process traps.
+
+n. Fixed a bug that caused "return" to act like a special builtin with respect
+   to variable assignments even when preceded by "command".
+
+o. POSIX-mode shells now return failure if the cd builtin fails due to the
+   absolute directory name being longer than PATH_MAX, instead of trying
+   again with a relative pathname.
+
+p. Fixed a problem with FUNCNAME occasionally being visible when not executing
+   a shell function.
+
+q. Fixed a problem with the expansions performed on the WORD in the case
+   command.
+
+r. Fixed a slight POSIX compatibility when removing "IFS whitespace" during
+   word splitting and the read builtin.
+
+s. Fixed a problem with expanding an array with subscript `*' when all the
+   elements expand to the empty string, and making sure the expansion honors
+   the `:' specifier.
+
+2. Changes to Readline
+
+a. Fixed a bug with adding multibyte characters to an incremental search string.
+
+b. Fixed a bug with redoing text insertions in vi mode.
+
+c. Fixed a bug with pasting text into an incremental search string if bracketed
+   paste mode is enabled. ESC cannot be one of the incremental search
+   terminator characters for this to work.
+
+d. Fixed a bug with anchored search patterns when performing searches in vi
+   mode.
+
+3. New Features in Bash
+
+a. Associative and indexed arrays now allow subscripts consisting solely of
+   whitespace.
+
+b. `checkwinsize' is now enabled by default.
+
+c. The `localvar_unset' shopt option is now visible and documented.
+
+d. The `progcomp_alias' shopt option is now visible and documented.
+
+e. The signal name processing code now understands `SIGRTMIN+n' all the way
+   up to SIGRTMAX.
+
+f. There is a new `seq' loadable builtin.
+
+g. Trap execution now honors the (internal) max invocations of `eval', since
+   traps are supposed to be executed as if using `eval'.
+
+h. The $_ variable doesn't change when the shell executes a command that forks.
+
+i. The `kill' builtin now supports -sSIGNAME and -nSIGNUM, even though
+   conforming applications aren't supposed to use them.
+
+j. POSIX mode now enables the `shift_verbose' option.
+
+4. New Features in Readline
+
+a. Readline now allows application-defined keymap names; there is a new public
+   function, rl_set_keymap_name(), to do that.
+
+b. The "Insert" keypad key, if available, now puts readline into overwrite
+   mode.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.0-beta, and
+the previous version, bash-5.0-alpha.
+
+1.  Changes to Bash
+
+a. Fixed a bug that allowed subshells to "inherit" enclosing loops -- this
+   is where POSIX says the subshell is not "enclosed" by the loop.
+
+b. Added more UTF-8-specific versions of multibyte functions, and optimized
+   existing functions if the current locale uses UTF-8 encoding.
+
+c. In POSIX mode, assignments preceding regular builtins should not persist
+   when the builtin completes.
+
+d. Added additional checks to special array assignment (e.g., BASH_ALIASES)
+   so it can't be used to bypass validity checks performed in other places.
+
+e. The `!!' history expansion now refers to the previous history entry as
+   expected, even if used on the second or subsequent line of a multi-line
+   history entry.
+
+f. Fixed a bug that could cause the shell to dereference a NULL pointer if
+   the environment (`environ') is set to NULL.
+
+g. Bash uses slightly better integer overflow handling for brace sequence
+   expansion on systems where ints are 32 bits and intmax_t is 64 bits.
+
+h. Fixed a bug setting attributes for a variable named as an argument to
+   `declare' that also appears as a nameref in the temporary environment.
+
+i. Fixed several bugs that could cause assignments to namerefs to create
+   variables with invalid names.
+
+j. Fixed a bug that could result in the SIGINT handler being set incorrectly
+   in asynchronous subshells.
+
+k. Fixed a bug that could cause `bash -t' to not execute the specified command.
+
+l. Fixed several bugs that caused the shell to operate on the wrong variable
+   when using namerefs with the same name as a global variable in shell
+   functions.
+
+m. Internal changes to how the shell handles variables with invalid names in
+   the initial environment and to prevent variables with invalid names from
+   being added to the environment instead of passing them on to children.
+
+n. Changes to make sure that an expansion that results in a quoted null string
+   is reflected in the expansion, even if the word expands to nothing.
+
+o. Changes to make sure that $* and ${array[*]} (and $@/${array[@]}) expand
+   the same way after the recent changes for POSIX interpretation 888.
+
+p. Saving and restoring the positional parameters at function entry and exit
+   is considerably more efficient; noticeably so when there are large numbers
+   of positional parameters.
+
+q. Fixed a bug that caused `lastpipe' and `pipefail' to return an incorrect
+   status for the pipeline if there was more than one external command in a
+   loop body appearing in the last pipeline element.
+
+r. Fixed a bug that caused value conversion errors with the printf builtin's
+   %u and %f conversion specifications and invalid constants.
+
+2.  Changes to Readline
+
+a. Added more UTF-8-specific versions of multibyte functions, and optimized
+   existing functions if the current locale uses UTF-8 encoding.
+
+b. Fixed a problem with bracketed-paste inserting more than one character and
+   interacting with other readline functions.
+
+c. Fixed a bug that caused the history library to attempt to append a history
+   line to a non-existent history entry.
+
+d. If using bracketed paste mode, output a newline after the \r that is the
+   last character of the mode disable string to avoid overwriting output.
+
+e. Fixes to the vi-mode `b', `B', `w', `W', `e', and `E' commands to better
+   handle multibyte characters.
+
+f. Fixed a redisplay problem that caused an extra newline to be generated on
+   accept-line when the line length is exactly the screenwidth.
+
+3.  New Features in Bash
+
+a. Bash no longer allows variable assignments preceding a special builtin that
+   changes variable attributes to propagate back to the calling environment
+   unless the compatibility level is 44 or lower.
+
+b. You can set the default value for $HISTSIZE at build time in config-top.h.
+
+c. The `complete' builtin now accepts a -I option that applies the completion
+   to the initial word on the line.
+
+d. The internal bash malloc now uses mmap (if available) to satisfy requests
+   greater than 128K bytes, so free can use mfree to return the pages to the
+   kernel.
+
+e. The shell doesn't automatically set BASH_ARGC and BASH_ARGV at startup
+   unless it's in debugging mode, as the documentation has always said, but
+   will dynamically create them if a script references them at the top level
+   without having enabled debugging mode.
+
+f. The localvar_inherit option will not attempt to inherit a value from a
+   variable of an incompatible type (indexed vs. associative arrays, for
+   example).
+
+g. The `globasciiranges' option is now enabled by default; it can be set to
+   off by default at configuration time.
+
+4.  New Features in Readline
+
+a. The history expansion library now understands command and process
+   substitution and extended globbing and allows them to appear anywhere in a
+   word.
+
+b. The history library has a new variable that allows applications to set the
+   initial quoting state, so quoting state can be inherited from a previous
+   line.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.0-alpha, and
+the previous version, bash-4.4-release.
+
+1.  Changes to Bash
+
+a. Fixed a bug that could cause traps in background jobs to give the terminal
+   to the wrong process group.
+
+b. Fixed a bug that caused `kill -l 0' to print an out-of-range error.
+
+c. Fixed a problem that could result in here-documents being displayed in
+   the wrong order.
+
+d. Fixed a number of out-of-bounds and free memory read errors found via
+   fuzzing.
+
+e. Fixed a subshell inheritance problem that could cause a subshell to wait for
+   the wrong process.
+
+f. Fixed a bug that caused SHLVL to be incremented one too many times when
+   creating subshells.
+
+g. A job dying due to SIGINT can now interrupt sourcing a file in a shell with
+   job control enabled.
+
+h. Fixed a spurious warning about unterminated ${ or $( constructs during
+   word completion.
+
+i. The shell no longer runs traps if a signal arrives while reading command
+   substitution output.
+
+j. Fixed an arithmetic expansion error that could allow ++var++ as valid
+   syntax.
+
+k. Fixed an error that allowed out-of-bounds references to the directory stack.
+
+l. The shell does a better job of saving multi-line history entries with
+   embedded comments.
+
+m. Fixed a bug that could cause quoted bracket expressions in regular expression
+   arguments to `[[' to not match correctly.
+
+n. Fixed a bug that could cause an IFS character in a word to result in an
+   extra '\001' character in the expansion.
+
+o. A trailing backslash in a glob pattern can match a trailing backslash in the
+   string.
+
+p. Fixed a memory leak in the process creation code path when job control is
+   enabled.
+
+q. Fixed a bug that caused `printf' to output broken surrogate pairs for
+   Japanese locales.
+
+r. Fixed a bug that caused a SIGINT generated from `kill' in a dot script to
+   kill an interactive shell.
+
+s. Fixed a bug that could cause the `read' builtin to not fully read a
+   multibyte character.
+
+t. Fixed a bug that could cause identifiers to be evaluated in conditional
+   arithmetic expressions even when evaluation is suppressed.
+
+u. Fixed a bug that could result in command substitution, when executed in a
+   context where word splitting is not performed, to leave a stray '\001'
+   character in the string.
+
+v. Fixed a bug that could cause history expansion to be disabled in a non-
+   interactive shell even if `-o histexpand' is supplied at startup.
+
+w. Fixed a bug that caused `read -N' to strip leading whitespace IFS characters.
+
+x. Fixed a bug that caused spurious tilde expansion in arithmetic expressions.
+
+y. If indirect expansion attempts to indirectly reference through an unset
+   variable, report an error.
+
+z. Added a guard to prevent the shell from looping while receiving an endless
+   stream of SIGTTIN at shell startup.
+
+aa. Fixed a bug with parsing here documents inside a command substitution when
+    looking for the closing delimiter.
+
+bb. Fixed a bug that caused printf to not quote all <blank> characters in the
+    current locale when using the `%q' format specifier.
+
+cc. Fixed a bug with bash's internal buffered I/O system that caused the input
+    pointer to not be reset when read(2) returned an EOF.
+
+dd. Bash now installs its SIGWINCH signal handler with SA_RESTART, so it will
+    not interrupt open/read/write system calls.
+
+ee. The ERR trap now reports line numbers more reliably.
+
+ff. The shell no longer tries to manipulate the terminal process group if a
+    command or process substitution is killed by SIGTERM when job control is
+    enabled.
+
+gg. Fixed a bug that caused extglob patterns to match filenames beginning with
+    a period.
+
+hh. File descriptors open for writing to here documents are no longer available
+    to subshells.
+
+ii. Make sure word completion doesn't perform command or process substitution.
+
+jj. Fixed a bug with parsing $$'...' inside a command substitution.
+
+kk. Fixed a bug that caused bash to remove backslash-newline pairs from the
+    body of a here-document with a quoted delimiter inside a command
+    substitution.
+
+ll. Fixed a bug that could cause the shell to hang when adding a pid to the
+    table of background process exit statuses.
+
+mm. Fixed a bug that could cause 0x01 characters to be doubled in the output
+    of process substitution.
+
+nn. Restricted shells now clear the hash table before making the PATH variable
+    read-only.
+
+oo. There are a number of changes to the expansion of $* and $@ in contexts
+    where word splitting does not occur (quoted and unquoted), with IFS set
+    to NULL or a non-standard value, mostly to deal with the consequences of
+    the behavior defined in Posix interpretation 888.
+
+pp. There are a number of changes to nameref variable handling to avoid
+    creating variables with invalid names.
+
+qq. A non-interactive posix mode shell no longer exits when an assignment
+    statement fails if the assignment is utimately being performed by the
+    `command' builtin.
+
+rr. When using character class names for globbing, don't allow case
+    insensitivity, even if nocaseglob is enabled.
+
+ss. Fixed a bug that allowed some redirections to stay in place if a later
+    redirection failed.
+
+tt. Fixed a bug in how command and process substitutions are recognized within
+    other parameter expansions.
+
+uu. Fixed a bug that caused bash to loop under certain circumstances when
+    performing arithmetic expansion on a variable whose value is an invalid
+    expression.
+
+vv. Fixed a bug that could cause bash to expand aliases inappropriately while
+    parsing compound commands like `case'.
+
+ww. Fixed a bug that could cause `read -N' to fail to read complete multibyte
+    characters, even when the sequences are incomplete or invalid, with or
+    without readline.
+
+xx. Fixed a bug that could cause `case' to fail to match patterns containing
+    0x01 characters.
+
+yy. Fixed a bug that caused exported functions to contain stray 0x01 characters.
+
+zz. Fixed some inconsistencies with how the history number is handled in the
+    various prompt strings.
+
+aaa. Fixed a bug that could cause a core dump if READLINE_LINE was unset
+     inside a shell function bound to a key sequence with `bind -x'.
+
+bbb. Fixed a bug that could cause bash to not read a token terminator correctly
+     if a command substitution was used inside an arithmetic `for' command.
+
+ccc. Fixed problems that could occur with a fatal arithmetic expansion error
+     in a context (like prompt expansion) where you can't jump back to the
+     top level.
+
+ddd. Expression errors in arithmetic `for' commands are treated more like
+     shell syntax errors.
+
+eee. Fixed a parser synchronization error resulting from a syntax error
+     followed immediately by an EOF.
+
+fff. When executing a shell function, the first line in the function ($LINENO)
+     is line 1 instead of line 0, as Posix requires.
+
+ggg. In Posix mode, bash will canonicalize the value of PWD it inherits from
+     the environment and use that to set its idea of the current directory.
+
+hhh. If LINENO is exported, bash needs to regenerate its value each time it
+     constructs the environment.
+
+iii. Fixed a bug with restoring the SIGINT handler when using `wait -n'.
+
+jjj. Make sure the `coproc' command returns an appropriate status if the NAME
+     argument is invalid.
+
+kkk. Fixed a problem with arithmetic expressions containing array references
+     that contain arithmetic expressions with syntax errors.
+
+lll. The `select' command and help builtin will use $COLUMNS before the window
+     size returned from the kernel as the terminal width.
+
+mmm. `read -n 0' and `read -N 0' now try a zero-length read in an attempt to
+     detect file descriptor errors.
+
+nnn. The `read' builtin now does a better job of acting on signals that don't
+     interrupt read(2).
+
+ooo. Fixed some cases where `printf -v' did not return failure status on a
+     variable assignment error.
+
+ppp. Fixed temporary environment propagation back to the current environment
+     so that it doesn't happen for special builtins run by the `command'
+     builtin.
+
+qqq. Fixed a bug when searching for the end of a here-document delimiter in a
+     command substitution.
+
+rrr. Fixed a bug that could cause `cd ${DIRSTACK[0]}' to fail.
+
+sss. Fixed a bug that could cause reserved words to not be recognized in a
+     for statement without the `in' inside a command substitution.
+
+ttt. Fixed a bug that could cause a double-free in a timed command with an
+     expansion error.
+
+uuu. Fixed a bug that could cause a core dump if a script switches from a UTF-8
+     locale to a different locale after displaying a lone surrogate character.
+
+vvv. Fixed cases where bash prematurely removed FIFOs attached to process
+     substitutions.
+
+www. Fixed a problem with calculating the size of the table that stores exit
+     statuses from background processes when the child process resource limit
+     is very large.
+
+xxx. Fixed a memory leak with functions using `return' when using FIFOs for
+     standard input.
+
+yyy. `wait' without arguments attempts to wait for all active process
+     substitution processes.
+
+zzz. Fixed a bug where an indirect parameter was subjected to word splitting
+     when trying to find the indirected variable name.
+
+aaaa. Fixed a bug that could allow restricted shell users to add commands to
+      the hash table.
+
+bbbb. When using the `!(patlist)' extended globbing operator, a filename
+      beginning with a `.' that doesn't match any of the patterns is not
+      returned as a match if leading dots must be matched explicitly.
+
+cccc. Fixed a bug that could cause line number and source file information for
+      a function definition to be incorrect if there are multiple definitions.
+
+dddd. Fixed a bug that could cause builtins like `readonly' to behave
+      differently when applied to arrays and scalar variables within functions.
+
+eeee. Fixed a bug that could cause alias expansion to add an extra space to
+      a quoted string that begins outside the alias expansion.
+
+ffff. Fixed a bug that could result in unwanted alias expansion after timing
+      the null command.
+
+gggg. Fixed a bug that could cause a core dump if a timestamp in a history
+      file overflowed a time_t.
+
+hhhh. Restricted shells can no longer redirect from /dev/tcp or /dev/udp, since
+      the kernel calls make those file descriptors read-write.
+
+iiii. Fixed a problem with splitting double-quoted words for programmable
+      completion when the double quote immediately follows another word
+      delimiter.
+
+jjjj. Fixed a bug resulting in a use-after-free if two file descriptors share
+      the same input buffer.
+
+kkkk. The error message resulting from ${x:?} and ${x?} now differs depending
+      on whether the variable is null or unset.
+
+llll. In Posix mode, the shell exits if a variable assignment fails and precedes
+      an empty simple command (after expansion).
+
+mmmm. Fixed a timing problem with SIGALRM that could cause the read builtin to
+      drop characters.
+
+nnnn. Added code to deal with kill(2) failing to send the shell a fatal signal
+      due to Linux pid namespace peculiarities.
+
+oooo. Fixed a bug that made \C-@ (NUL) unusable in key sequences used for
+      `bind -x' commands.
+
+pppp. Fixed a bug that could cause SIGINT recursion when running an external
+      command in a trap the shell takes after a command exits due to SIGINT.
+
+qqqq. Make sure the shell turns off job control before running the command-
+      not-found handle, so the command doesn't try to manipulate process
+      groups.
+
+rrrr. Fixed a problem with timing process substitutions that caused the shell
+      to print timing information for the calling command.
+
+ssss. Fixed a bug that caused backquotes in a here-document delimiter to mark
+      the delimiter as quoted (inhibiting expansion of the here-document
+      contents).
+
+tttt. Fixed several problems with 0x01 and 0x177 in case pattern lists and
+      conditional command pattern matches.
+
+uuuu. Fixed a bug that could cause the pattern matching engine to not recognize
+      locale-specific character classes.
+
+vvvv. The auto-configuration now tests for /dev/stdin and /dev/fd independently.
+
+wwww. The `globstar' code now skips over symbolic links to directories,
+      preventing them from being scanned twice.
+
+xxxx. When running `bind -x' commands, bash now sets READLINE_POINT based on
+      the number of characters in the readline line buffer, not the number of
+      bytes.
+
+yyyy. Fixed a problem that could cause recursive trap evaluation of the RETURN
+      trap when using `eval return'.
+
+zzzz. Fixed a bug with expanding 0x01 in an unquoted here-document.
+
+aaaaa. The process substitution code now closes and unlinks FIFOs when the
+       process on the other side exits, in order to prevent SIGPIPE or
+       waiting until a FIFO opened for read has a writer.
+
+bbbbb. Fixed a bug with recursive calls to the parser overwriting the token in
+       an {id}>foo construct.
+
+ccccc. After a Posix discussion, the pattern matching engine just skips over
+       invalid character classes in bracket expressions, instead of matching
+       them like individual characters in the expression.
+
+ddddd. Fixed a posix-mode problem with variable scoping when creating variables
+       from assignment statements preceding special builtins.
+
+eeeee. Fixed a bug that could cause patterns containing backslashes to not be
+       run through the pattern matching engine.
+
+fffff. Fixed a bug that could cause redirections to compound commands to not
+       be `undone' if the file descriptor in the redirection was closed when
+       the redirection was initially processed.
+
+ggggg. Fixed a bug that could cause buffer corruption when using `bind -x' in
+       a command execute as a result of a key binding installed by `bind -x'.
+
+2.  Changes to Readline
+
+a. Added a guard to prevent nested macros from causing an infinite expansion
+   loop.
+
+b. Instead of allocating enough history list entries to hold the maximum list
+   size, cap the number allocated initially.
+
+c. Added a strategy to avoid allocating huge amounts of memory if a block of
+   history entries without timestamps occurs after a block with timestamps.
+
+d. Added support for keyboard timeouts when an ESC character is the last
+   character in a macro.
+
+e. There are several performance improvements when in a UTF-8 locale.
+
+f. Readline does a better job of preserving the original set of blocked
+   signals when using pselect() to wait for input.
+
+g. Fixed a bug that caused multibyte characters in macros to be mishandled.
+
+h. Fixed several bugs in the code that calculates line breaks when expanding
+   prompts that span several lines, contain multibyte characters, and contain
+   invisible character seqeuences.
+
+i. Fixed several bugs in cursor positioning when displaying lines with prompts
+   containing invisible characters and multibyte characters.
+
+j. When performing case-insensitive completion, Readline no longer sorts the
+   list of matches unless directed to do so.
+
+k. Fixed a problem with key sequences ending with a backslash.
+
+l. Fixed out-of-bounds and free memory read errors found via fuzzing.
+
+m. Fixed several cases where the mark was set to an invalid value.
+
+n. Fixed a problem with the case-changing operators in the case where the
+   lower and upper case versions of a character do not have the same number
+   of bytes.
+
+o. Handle incremental and non-incremental search character reads returning EOF.
+
+p. Handle the case where a failing readline command at the end of a multi-key
+   sequence could be misinterpreted.
+
+q. The history library now prints a meaningful error message if the history
+   file isn't a regular file.
+
+r. Fixed a problem with vi-mode redo (`.') on a command when trying to replace
+   a multibyte character.
+
+s. The key binding code now attempts to remove a keymap if a key unbinding
+   leaves it empty.
+
+t. Fixed a line-wrapping issue that caused problems for some terminal
+   emulators.
+
+u. If there is a key bound to the tty's VDISCARD special character, readline
+   disables VDISCARD while it is active.
+
+v. Fixed a problem with exiting bracketed paste mode on terminals that assume
+   the bracketed paste mode character sequence contains visible characters.
+
+w. Fixed a bug that could cause a key binding command to refer to an
+   uninitialized variable.
+
+3.  New Features in Bash
+
+a. The `wait' builtin can now wait for the last process substitution created.
+
+b. There is an EPOCHSECONDS variable, which expands to the time in seconds
+   since the Unix epoch.
+
+c. There is an EPOCHREALTIME variable, which expands to the time in seconds
+   since the Unix epoch with microsecond granularity.
+
+d. New loadable builtins: rm, stat, fdflags.
+
+e. BASH_ARGV0: a new variable that expands to $0 and sets $0 on assignment.
+
+f. When supplied a numeric argument, the shell-expand-line bindable readline
+   command does not perform quote removal and suppresses command and process
+   substitution.
+
+g. `history -d' understands negative arguments: negative arguments offset from
+   the end of the history list.
+
+h. The `name' argument to the `coproc' reserved word now undergoes word
+   expansion, so unique coprocs can be created in loops.
+
+i. A nameref name resolution loop in a function now resolves to a variable by
+   that name in the global scope.
+
+j. The `wait' builtin now has a `-f' option, which signfies to wait until the
+   specified job or process terminates, instead of waiting until it changes
+   state.
+
+k. There is a define in config-top.h that allows the shell to use a static
+   value for $PATH, overriding whatever is in the environment at startup, for
+   use by the restricted shell.
+
+l. Process substitution does not inherit the `v' option, like command
+   substitution.
+
+m. If a non-interactive shell with job control enabled detects that a foreground
+   job died due to SIGINT, it acts as if it received the SIGINT.
+
+n. The SIGCHLD trap is run once for each exiting child process even if job
+   control is not enabled when the shell is in Posix mode.
+
+o. A new shopt option: localvar_inherit; if set, a local variable inherits the
+   value of a variable with the same name at the nearest preceding scope.
+
+p. `bind -r' now checks whether a key sequence is bound before binding it to
+   NULL, to avoid creating keymaps for a multi-key sequence.
+
+q. A numeric argument to the line editing `operate-and-get-next' command
+   specifies which history entry to use.
+
+r. The positional parameters are now assigned before running the shell startup
+   files, so startup files can use $@.
+
+s. There is a compile-time option that forces the shell to disable the check
+   for an inherited OLDPWD being a directory.
+
+t. The `history' builtin can now delete ranges of history entries using
+   `-d start-end'.
+
+u. The `vi-edit-and-execute-command' bindable readline command now puts readline
+   back in vi insertion mode after executing commands from the edited file.
+
+v. The command completion code now matches aliases and shell function names
+   case-insensitively if the readline completion-ignore-case variable is set.
+
+w. There is a new `assoc_expand_once' shell option that attempts to expand
+   associative array subscripts only once.
+
+x. The shell only sets up BASH_ARGV and BASH_ARGC at startup if extended
+   debugging mode is active. The old behavior of unconditionally setting them
+   is available as part of the shell compatibility options.
+
+y. The `umask' builtin now allows modes and masks greater than octal 777.
+
+z. The `times' builtin now honors the current locale when printing a decimal
+   point.
+
+aa. There is a new (disabled by default, undocumented) shell option to enable
+    and disable sending history to syslog at runtime.
+
+4.  New Features in Readline
+
+a. Non-incremental vi-mode search (`N', `n') can search for a shell pattern, as
+   Posix specifies (uses fnmatch(3) if available).
+
+b. There are new `next-screen-line' and `previous-screen-line' bindable
+   commands, which move the cursor to the same column in the next, or previous,
+   physical line, respectively.
+
+c. There are default key bindings for control-arrow-key key combinations.
+
+d. A negative argument (-N) to `quoted-insert' means to insert the next N
+   characters using quoted-insert.
+
+e. New public function: rl_check_signals(), which allows applications to
+   respond to signals that readline catches while waiting for input using
+   a custom read function.
+
+f. There is new support for conditionally testing the readline version in an
+   inputrc file, with a full set of arithmetic comparison operators available.
+
+g. There is a simple variable comparison facility available for use within an
+   inputrc file. Allowable operators are equality and inequality; string
+   variables may be compared to a value; boolean variables must be compared to
+   either `on' or `off'; variable names are separated from the operator by
+   whitespace.
+
+------------------------------------------------------------------------------
 This document details the changes between this version, bash-4.4-release, and
 the previous version, bash-4.4-rc2.
 
@@ -21,7 +838,6 @@ e.  Fixed several potential buffer overflow issues in the word expansion code.
 3.  New Features in Bash
 
 4.  New Features in Readline
-
 ------------------------------------------------------------------------------
 This document details the changes between this version, bash-4.4-rc2, and
 the previous version, bash-4.4-beta2.