+++ /dev/null
-
- 9/15/2016
- ---------
-[bash-4.4 released]
-
- 9/17
- ----
-builtins/common.c
- - display_signal_list: if 0 is supplied as an argument to kill -l,
- display a signal-out-of-range error. Fixes bug reported by
- Martijn Dekker <martijn@inlv.org>
-
- 9/18
- ----
-print_cmd.c
- - print_heredoc_bodies: take a list of redirections, all here documents,
- and print the here-document bodies including the ending delimiter,
- followed by a newline
- - print_redirection_list: print the heredoc headers the first time
- through the list of redirections so we print them in the same left-
- to-right order they're supplied; print the bodies and delimiters with
- print_heredoc_bodies after we print all the redirections if we're
- not printing a list of commands (printing_connection == 0). Fix for
- problem reported by Isabella Parakiss <izaberina@gmail.com>
- - print_deferred_heredocs: don't print heredoc headers, since they're
- now printed in print_redirection_list
- - print_deferred_heredocs: use print_heredoc_bodies
-
- 9/20
- ----
-builtins/mapfile.def
- - readarray: update usage synopsis to include -d delim. Report and
- fix from jhankins@homewood.k12.al.us
-
-test.c
- - test_binop: if op[0] == '-', make sure op[1] != 0 before checking
- op[2] or op[3]. Fixes out-of-bounds read reported by Franco
- Costantini <franco.costantini.20@gmail.com>
-
-parse.y
- - cond_term: if yylval.word->word[0] == '-' make sure word[1] != 0
- before checking word[2] and calling test_unop. Fixes out-of-bounds
- read reported by Franco Costantini <franco.costantini.20@gmail.com>
- - make sure to check all instances of the return value of the
- simple_command production before trying to hook redirections onto it,
- since it can potentially return NULL.
- Reported by Franco Costantini <franco.costantini.20@gmail.com>
-
- 9/21
- ----
-parse.y
- - token_is_assignment: make sure to check that the return value from
- assignment() finds the `=' we just added at index I to avoid false
- positives from g=g=g=g=g=g=(). Reported by Franco Costantini
- <franco.costantini.20@gmail.com>
-
- 9/22
- ----
-parse.y
- - token_is_assignment: if we're not using the bash malloc (which has
- guard bytes after the requested allocation size), use a new
- buffer so we can make sure it's big enough to hold the current
- token and at least two additional characters. Reported by
- Franco Costantini <franco.costantini.20@gmail.com>
-
- 9/23
- ----
-execute_cmd.c
- - execute_in_subshell: call without_job_control for both job control
- and non-job-control builds to avoid waiting for last_made_pid
- inherited from parent shell. Related to fix from 8/4 to
- initialize_subshell. Fixes bug reported by Martijn Dekker
- <martijn@inlv.org>
-
-builtins/declare.def
- - local_builtin: allow `local --help' to work even when not executing
- a function. Suggestion from Norm Abramovitz <norm@starkandwayne.com>
-
- 9/25
- ----
-builtins/printf.def
- - bexpand: if passed a null or empty string, return a newly-allocated
- empty string (so the return value can always be freed) instead of
- NULL.
- - printstr: if passed a null string, treat it as if it were an empty
- string so any precision or fieldwidth arguments are handled
- correctly. Report from isabella parakiss <izaberina@gmail.com>
-
-subst.c
- - skip_matched_pair: make the flags argument of 1 affect whether or
- not backslash can quote characters in the string, so it affects
- all quoting mechanisms
-
-arrayfunc.c
- - unbind_array_element: now takes a third (flags) argument; flags&1
- means to not expand an associative array index. This is only called
- from a shell builtin context, which means the argument should have
- already undergone word expansion, so it should be ok. Will still
- be a problem for uses like "unset -v 'var[$ind]'", quoted to avoid
- globbing
- - valid_array_reference: pass second flags argument to skipsubscript;
- still set to 0 by all callers
-
-arrayfunc.h
- - unbind_array_element: updated prototype
-
-builtins/set.def
- - unset_builtin: add third argument of 1 to unbind_array_element calls
- [TEMPORARILY DISABLED]
- - unset_builtin: call valid_array_reference with second arg of 1 to
- handle unmatched pairs of quotes and [/]
-
-array.c
- - array_reference: optimize access locality as well as sequential
- access by adding ability to start from last-accessed element and move
- backwards or forwards depending on the desired index. Inspired by
- report from Tom McCurdy <tom.j.mccurdy@gmail.com> and followup from
- Christian Franke <Christian.Franke@t-online.de>
-
-variables.c
- - all_array_variables: include associative arrays, not just indexed
- arrays. Reported by Grisha Levit <grishalevit@gmail.com>
-
-execute_cmd.c
- - execute_disk_command: if we're optimizing out the fork (CMD_NO_FORK),
- decrement the shell level so we don't end up incrementing it twice.
- We should decrement the shell level for an implicit exec like an
- explicit one. Reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
-
-builtins/exec.def
- - exec_builtin: don't bother to decrement the shell level if we are
- already in a `(command)' subshell. Reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
-
-lib/readline/macro.c
- - macro_level: count of macro nesting level, maintained by
- _rl_push_executing_macro and _rl_pop_executing macro
- - _rl_with_macro_input: if current nesting level exceeds
- MAX_MACRO_LEVEL, abort the current command line with _rl_abort_internal
- and return to the top level. Reported by Christian Klomp
- <christianklomp@gmail.com>
-
-lib/readine/history.c
- - add_history: if allocating the history list for the first time,
- make sure the max history list size isn't so large that it will
- cause allocation errors. Cap it at MAX_HISTORY_INITIAL_SIZE
- (8192). Reported by Sean Zha <freeman_cha@hotmail.com>
-
-jobs.c
- - wait_for: if a foreground job with job control enabled is killed by a
- SIGINT and sourcelevel != 0, act as if we received the SIGINT so the
- file sourcing can be terminated. Reported by PePa
- <peterkelly@passchier.net>
-
- 9/26
- ----
-subst.c
- - read_comsub: only warn once for null bytes in command substitution
- output, instead of once for every null byte
-
-arrayfunc.c
- - array_variable_part: now takes a `flags' argument; changed all callers
- to initially pass 0
- - array_variable_name: now takes a `flags' argument; changed all callers
- to initially pass 0
- - array_variable_name: pass `flags' argument to skipsubscript instead
- of just passing 0
-
-arrayfunc.h
- - array_variable_{name,part}: added new argument to prototypes
-
- 9/29
- ----
-bashline.c
- - bash_directory_completion_hook: don't bother to try and expand a
- ${ or $( that isn't complete; expand_prompt_string will complain.
- Fixes reports from John Passaro <john.a.passaro@gmail.com> and
- Valentin Bajrami <valentin.bajrami@gmail.com>
-
-lib/readline/history.c
- - _hs_append_history_line: use a strategy that attempts to avoid
- realloc copying memory to a newly-allocated block if the history
- line we're appending to gets `too long' (currently 256 bytes).
- We reallocate in powers of 2 starting at 512, and rely on realloc
- not allocating a new block and copying into it if the size is the
- same as the last call to realloc. Addresses issue raised by
- Hubert Schmid <h.schmid@gmx.de>
-
-trap.h
- - check_signals: new extern declaration
- - trapped_signal_received: new extern declaration
-
-builtins/read.def
- - read_builtin: if one of the zread* functions returns < 0 (which
- usually only happens in Posix mode), make sure we call check_signals()
- before eventually calling run_pending_traps() because zread() isn't
- going to call it
- - include trap.h for correct extern functions and variable declarations
-
-lib/sh/zread.c
- - zread: if executing a builtin, call check_signals_and_traps() for
- backwards compatibility. If not, call check_signals() only, because
- we don't want to run traps during, for instance, reading command
- substitution output. Fixes race condition bug reported by Luiz Angelo
- Daros de Luca <luizluca@gmail.com>
-
- 9/30
- ----
-subst.c
- - command_substitute: reset parse_and_execute_level to 0 in the child
- process, since it's independent of the other parse_and_execute
- calls. Adds command substitution inside other parse_and_execute
- calls optimizations to suppress forks, as suggested by
- Martijn Dekker <martijn@inlv.org>
-
- 10/3
- ----
-configure.ac
- - SHOBJ_STATUS: make sure it defaults to unsupported and is substituted
- if the shobj-conf script isn't run. Fixes `make install' bug with
- a minimal config reported by Andrew Tomazos <andrewtomazos@gmail.com>
-
- 10/5
- ----
-support/shobj-conf
- - darwin: set compatibility_version for a shared build of the readline
- library (the standalone readline distribution shares this file) to
- $(SHLIB_MAJOR)$(SHLIB_MINOR). Recommendation from Max Horn
- <max@quendi.de>
-
- 10/6
- ----
-array.h
- - array_first_index: new convenience define
-
-array.c
- - ADD_AFTER: new define, complement of ADD_BEFORE
- - UNSET_LASTREF: now takes an array as an argument, prepping for move
- of lastref pointer into the array struct
- - array_insert: check whether we are adding at the beginning of the
- array and take a fast path if so
- - array_insert: use same strategy as array_reference to find the place
- to insert, starting from the last-referenced element and moving
- forward or back from there; use ADD_AFTER if moving backward
- - array_insert: if replacing an existing element, just replace the
- value with new->value instead of the entire element
- - array_reference: short-circuit quickly if looking for an element
- before the first assigned index
- - array_reference: if we don't find the element, leave lastref pointing
- to the closest element under the assumption we will be assigning or
- looking for something close
- - array_reference: take advantage of ordered indexes to short-circuit
- when looking for element that is not set
-
- 10/7
- ----
-array.c
- - array_remove: short-circuit if asked to remove index after max
- index or before first index
-
- 10/10
- -----
-lib/malloc/malloc.c
- - internal_realloc: if we are requesting reallocation to the same size
- as the block's current size, short-circuit and return `mem' right
- after doing bounds check
- - internal_realloc: if we are reducing the size of an allocation, and
- the new size fits in the next lower bin, just keep the same block
- and adjust the size, so we can avoid some copies
-
-parse.y
- - set_line_mbstate: keep track of the allocated size of
- shell_input_line_property, only request reallocation if the size
- increases, but don't let it get too big
-
- 10/11
- -----
-jobs.c
- - wait_for_background_pids: make sure we wait for pid in
- last_procsub_child since it's not found in any job -- still needs
- more work to wait for multiple process substitutions
-
-subst.c
- - process_substitute: if make_child fails, make sure we call
- restore_pipeline to undo the previous save_pipeline()
-
- 10/15
- -----
-subst.c
- - process_substitute,command_substitute: leave subshell_level (reflected
- as $BASH_SUBSHELL) intact for any exit trap instead of decrementing
- it. Suggested by Martijn Dekker <martijn@inlv.org>
-
-builtins/evalstring.c
- - optimize_subshell_command: new function, framework for optimizing
- out forks for command that have already forked and are executing
- in a subshell. Not used yet
-
-expr.c
- - readtok: if we have a post-increment or post-decrement, and the
- previous token is not a string, check whether the previous token is
- a number that results from a pre-increment or pre-decrement, and
- make that an error. Report from Conrad Hoffmann <ch@bitfehler.net>
-
- 10/16
- -----
-aclocal.m4
- - BASH_JOB_CONTROL_MISSING: convert from AC_TRY_RUN to AC_TRY_COMPILE
- with existing set of preprocessor defines, so it can work when
- cross-compiling. Suggested by Felix Janda <felix.janda@posteo.de>
-
- 10/19
- -----
-variables.c
- - get_bashpid: BASHPID is no longer readonly; assignments to it are
- just ignored.
-
-doc/{bash.1,bashref.texi}
- - BASHPID: note that assignments are ignored and unsetting BASHPID
- causes it to lose its special properties
-
- 10/28
- -----
-builtins/pushd.def
- - popd_builtin: make sure to check the normalized stack offset
- (i.e., negatives counting back from the end of the stack) is within
- bounds before trying to free that stack entry. Report from
- Fernando Muñoz <fernando@null-life.com>
-
-lib/readline/histfile.c
- - chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from
- J. Peter Mugaas <jpmugaas@suddenlink.net>
-
-lib/readline/colors.c
- - S_ISDIR: add define if missing
- - S_ISUID, S_ISGID, S_ISLNK, S_ISSOCK: don't use unless defined.
- Fixes for MinGW{64,32} from J. Peter Mugaas <jpmugaas@suddenlink.net>
-
-bashhist.c
- - current_command_line_comment: set to the most recent line in a
- possibly multi-line command that contains a shell comment; set in
- maybe_add_history and bash_add_history to either the current
- command number or -2
- - maybe_add_history: set current_command_line_comment for first line
- of command
- - bash_add_history: chars_to_add set to "\n" if the current command line
- is one greater than the previous line containing a comment
- (current_command_line_comment). Fixes complaint from back in
- January, 2016 from Dave Rutherford <dave@evilpettingzoo.com>
-
-array.h
- - lastref: move last-referenced pointer into each array struct, so all
- arrays can have reference locality
-
-array.c
- - array_create: set lastref element to 0
- - array_copy: if copying the lastref in array a, set the new lastref
- in the copy to the same element
- - IS_LASTREF, LASTREF_START, LASTREF, INVALIDATE_LASTREF, SET_LASTREF,
- UNSET_LASTREF: change to use new array `lastref' member
-
-pathexp.c
- - quote_string_for_globbing: if quoting for a regexp, make sure to
- skip and copy a leading `^' in a bracket expression, and skip and
- copy a subsequent `]' (after an optional `^'), so that leading
- bracket doesn't close the bracket expression. Report from
- Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 10/29
- -----
-subst.c
- - extract_delimited_string: add calls to CHECK_STRING_OVERRUN for
- $( inside $((, nested OPENERs, nested ALT_OPENERs, and backquotes
- - skip_to_delim: add calls to CHECK_STRING_OVERRUN for $(, ${,
- process substitution
- - extract_dollar_brace_string: add calls to CHECK_STRING_OVERRUN for
- $(
- - extract_dollar_brace_string: use skipsubscript to skip over the
- array subscript in ${var[sub]} (non-quoted case uses string_extract,
- which already uses skipsubscript). Tagged for bash-5.0
-
- 10/30
- -----
-variables.c
- - EPOCHSECONDS: new dynamic variable, time in seconds since Unix
- epoch; assignments are ignored. Can be used on systems where
- strftime() doesn't support '%s'
- - EPOCHREALTIME: new dynamic variable, time in seconds since Unix
- epoch with microsecond granularity
-
-doc/{bash.1,bashref.texi}
- - EPOCHSECONDS documentation
- - EPOCHREALTIME documentation
-
-execute_cmd.c
- - decpoint: moved to locale.c, renamed locale_decpoint; changed callers
-
-{bashintl,externs}.h
- - locale_decpoint: extern declaration or #define if support for
- localeconv() not there
-
- 10/31
- -----
-lib/malloc/malloc.c
- - posix_memalign: add new posix-mandated interface
-
-examples/loadables/rm.c
- - rm: minimal loadable builtin, removes files and directories, only
- handles -r and -f options. Original from Tim Ruehsen
- <tim.ruehsen@gmx.de>, heavily rewritten for inclusion as loadable
-
-examples/loadables/Makefile.in
- - rm: add rules to build rm as one of the `other' targets
-
-examples/loadables/stat.c
- - stat: new loadable builtin that takes a filename and loads the info
- returned by stat(2) into an associative array specified by the -A
- argument (default STAT)
-
- 11/1
- ----
-variables.c
- - BASH_ARGV0: new dynamic variable, returns $0 on reference and sets
- $0 on assignment. From a suggestion from Rocky Bernstein <rocky@gnu.org>
- a few years ago
-
-doc/{bash.1,bashref.texi}
- - BASH_ARGV0: document
-
- 11/2
- ----
-lib/glob/sm_loop.c
- - parse_collsym: make sure to not return an out-of-bounds read if a
- collating symbol is unterminated. Fixes OOB read reported by
- Jerzy Kramarz <op7ica@gmail.com>
- - brackmatch: after incrementing p, before checking whether it's a
- character range, check whether *p was NULL before the increment
- and short-circuit the bracket expression if it is
-
-jobs.c
- - discard_last_procsub_child: new function, safely discards
- last_procsub_child and sets it to NULL
-
-subst.c
- - process_substitute: call discard_last_procsub_child instead of
- calling discard_pipeline directly. Fixes bug reported by
- Christian Weisgerber <naddy@mips.inka.de>
-
- 11/3
- ----
-shell.h
- - EX_DISKFALLBACK: new special return status available to builtins;
- means to attempt to execute a disk command with the same name as
- the builtin
-
-examples/loadables/rm.c
- - if we see the -i option, return EX_DISKFALLBACK
-
-execute_cmd.c
- - execute_simple_command: if executing a builtin returns EX_DISKFALLBACK,
- try running execute_disk_command instead
-
-bashline.c
- - shell_expand_line: use expand_word to expand the readline line
- buffer, which allows us to pass flags with the word. If a numeric
- argument is supplied, do not perform quote removal (pass
- Q_HERE_DOCUMENT since here-doc quoting does the right thing) and
- do not perform command or process subsitution. From a suggestion
- by Dabrien 'Dabe' Murphy <dabe@dabe.com> based on an old bug-bash
- discussion
-
-subst.c
- - expand_word_internal: note that we have added a quoted IFS char to
- istring by setting sentinel has_quoted_ifs. Usually we only add
- one if we are not going to be performing word splitting, but we
- will not perform word splitting if there's no expansion, so we need
- to take care of that case
- - expand_word_internal: when performing final word split, if there are
- no expansions but has_quoted_ifs is non-zero, call remove_quoted_ifs()
- to remove any quoted ifs characters we added while processing
- - remove_quoted_ifs: new function, removes CTLESC chars preceding
- (single-byte) chars in IFS. Used when we are not performing word
- splitting. Fixes bug reported by Martijn Dekker <martijn@inlv.org>
-
- 11/4
- ----
-lib/readline/macro.c
- - _rl_peek_macro_key: return the next character from the current
- keyboard macro; the next character from the `next' keyboard macro,
- if there is one, if at the end of the current macro; or 0 to
- indicate that we are at the end of a keyboard macro sequence
-
-lib/readline/rlprivate.h
- - _rl_peek_macro_key: extern declaration
-
-lib/readline/readline.c
- - _rl_dispatch_subseq: add test for ESC at the end of a keyboard macro,
- which should cause the keyboard timeout for ESC to kick in. The
- previous test didn't run the timeout code if executing from a macro,
- even if we had read the last character of the macro. Fixes bug
- reported by Clark Wang <clarkw@vmware.com>
-
-lib/glob/sm_loop.c
- - GMATCH: allow trailing backslash in pattern to explicitly match a
- backslash that is the last character in the string. Bug report from
- Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 11/5
- ----
-builtins/common.c
- - display_signal_list: if displaying a signal name corresponding to an
- exit status > 128, don't display the SIG prefix at all. Old code
- made displaying the SIG prefix dependent on JOB_CONTROL define.
- Report and fix from Martijn Dekker <martijn@inlv.org>
-
-execute_cmd.c
- - execute_subshell_builtin_or_function: call without_job_control even
- if JOB_CONTROL is not defined. Similar to fix from 9/23.
- Report from Martijn Dekker <martijn@inlv.org>
-
-execute_cmd.c
- - execute_simple_command: free memory allocated and passed to
- make_child in the child process if JOB_CONTROL is defined
- - execute_command_internal: free memory allocated and passed to
- make_child in the child process created to run a () subshell or a
- compound command within a pipeline if JOB_CONTROL is defined
- - execute_coproc: free memory allocated and passed to make_child in
- the child process if JOB_CONTROL is defined
- - execute_disk_command: free memory allocated and passed to
- make_child in the child process if JOB_CONTROL is defined. This
- series of fixes is the result of reports from
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 11/6
- ----
-lib/sh/unicode.c
- - u32toutf16: fix to prevent outputting broken surrogate pairs for
- Japanese locales (ja_JP.UTF-8) on cygwin (which uses UTF-16 natively).
- Report and fix from Koichi MURASE <myoga.murase@gmail.com>
-
-builtins/trap.def
- - trap_builtin: if OP is `-' (revert), set the SIGINT signal handler
- to sigint_sighandler if the shell is interactive and sourcing a
- file (interactive_shell && sourcelevel) or running a trap
- (interactive_shell && running_trap) even if it's not currently
- interactive. Report from Martijn Dekker <martijn@inlv.org>
-
-builtins/read.def
- - check for and read multibyte characters in all cases, not just when
- we are reading a specific number of characters, as long as
- mb_cur_max > 1
-
-subst.c
- - expand_word_internal: some improvements to code that converts istring
- into a WORD_LIST * to avoid multiple allocations and copies of
- istring, which is already malloc'ed memory -- reduce number of malloc
- and free calls
-
-test.c
- - unary_test: make sure if we test -v array[@] or array[*] that we
- free the return value from array_value
-
- 11/8
- ----
-expr.c
- - expcond: make sure to set `noeval' before reading tokens depending on
- the result of the conditional test, since readtok() can evaluate
- identifiers (and recursively those containing expressions). Report
- and fix from Koichi MURASE <myoga.murase@gmail.com>
-
-builtins/evalstring.c
- - should_suppress_fork: make sure to check for traps on EXIT and
- ERR, since any_signals_trapped() only checks for `real' signals,
- not the fake shell ones. Fixes bug reported by Werner Fink
- <werner@suse.de>
- - optimize_subshell_command: ditto
-
- 11/9
- ----
-eval.c
- - reader_loop: change so that we don't reset the SIGINT handler every
- time through the command loop in an interactive shell if the signal
- is trapped (as the comment noted). Reported by Report from Martijn
- Dekker <martijn@inlv.org>
-
-subst.c
- - parameter_brace_{patsub,remove_pattern,transform,casemod}: save and
- restore this_command_name while temporarily setting it for use in
- error messages. Fixes use-after-free error reported by
- Jerzy Kramarz <op7ica@gmail.com>
- - string_extract_verbatim: make sure when we increment i by 2 due to
- a CTLESC or CTLESC-CTLNUL that we don't read past the end of the
- string. This can happen if the string ends with an odd number of
- CTLESC chars. Fixes oob-read error reported by
- Jerzy Kramarz <op7ica@gmail.com>
-
- 11/11
- -----
-configure.ac,aclocal.m4
- - BASH_FUNC_SBRK: make sure sbrk actually works, instead of being just
- a stub function like on several Linux distributions
-
-lib/malloc/malloc.c
- - malloc_usable_size: return the maximum number of bytes available for
- a particular memory allocation (size of block allocated for it)
-
- 11/12
- -----
-configure.ac
- - changes to make --enable-profiling work on Linux (-pg, no static link,
- no -static in LDFLAGS)
-
-Makefile.in
- - changes to make --enable-profiling work on Linux (take
- ${PROFILE_FLAGS} out of BASE_CCFLAGS, add to CCFLAGS instead; add
- BASE_LDFLAGS define that doesn't include -pg or -static; use
- BASE_LDFLAGS in LDFLAGS; move ${PROFILE_FLAGS} and ${STATIC_LD} to
- LDFLAGS)
-
-tests/run-gprof
- - changes to make profiling test suite with gprof work on Linux (set
- GMON_OUT_PREFIX to handle multiple profiled processes per test;
- change default filename to gmon.out from bash.gmon; look for
- gprof output files in ${TMPDIR} instead of /tmp; handle multiple
- profiling files starting with $GMON_OUT_PREFIX)
-
-locale.c
- - locale_isutf8: use locale_charset() if it's available and nl_langinfo
- isn't
- - locale_isutf8: add code to parse a locale specification and determine
- whether the encoding is UTF-8 (or utf8) in the absence of
- nl_langinfo and locale_charset
- - set_default_locale: make sure to set locale_utf8locale early on
- - locale_utf8locale: set via call to locale_isutf8 wherever LANG,
- LC_ALL, or LC_CTYPE is set
-
- 11/13
- -----
-lib/readline/display.c
- - rl_redisplay: handle report of potential integer overflow in
- horizontal display mode from Mateusz Lenik <mlen@mlen.pl>
-
-lib/sh/mbschr.c
- - mbschr: if in a UTF-8 locale (locale_utf8locale) and we are looking
- for an ASCII character, use (essentially) strchr as a shortcut
-
-lib/sh/shmbchar.c
- - utf8_{mbstrlen,mblen,mbsmbchar,mbsnlen}: UTF-8-specific replacement
- functions (should also be able to use utf8_mblen in subst.c:
- string_extract_verbatim)
- - mbsmbchar: if locale_utf8locale is true, call utf8_mbsmbchar
- - mbsmbchar: in UTF-8 locale, use utf8_mblen instead of mbrlen (not
- used if earlier shortcut taken)
-
-lib/sh/unicode.c
- - u32cconv: don't use nl_langinfo early to call u32toutf8()
- - u32cconv: use locale_utf8locale to set utf8locale
- - u32cconv: when initializing (u32init == 0), use locale_charset, then
- nl_langinfo, then stub_charset to determine the charset
- - u32cconv: even if we don't have iconv, if locale_utf8locale is non-
- zero, return u32toutf8
-
- 11/15
- -----
-lib/readline/nls.c
- - _rl_init_locale: new function, split off code that determines current
- locale from _rl_init_eightbit, use it to set _rl_utf8locale
-
-lib/readiline/rlprivate.h
- - _rl_init_locale: new extern declaration
-
-lib/readline/readline.c
- - rl_initialize: if not initializing everything the first time, call
- _rl_init_locale to check current locale and set _rl_utf8locale
-
-lib/readline/text.c
- - _rl_insert_char: optimize cases where we are inserting a single-byte
- character in a locale with multibyte characters
- - _rl_insert_char: check whether character is single byte if we know
- we are in a UTF-8 locale, optimize single-byte case to avoid calls
- to mbrtowc and memmove/memcpy
-
-lib/readline/mbutil.c
- - _rl_char_value: if we are in a UTF-8 locale (_rl_utf8locale) and the
- current character does not have the eighth bit set ((c & 0x80) == 0),
- return that char without bothering to call mbrtowc
- - _rl_adjust_point: don't bother calling mbrlen if we are in a UTF-8
- locale and the current character is not a multibyte character
- - _rl_find_next_mbchar_internal: if we are in a UTF-8 locale, use that
- to avoid calls to mbrtowc
-
-lib/readline/display.c
- - _rl_col_width: if in a UTF-8 locale, take advantage of that to avoid
- calls to mbrlen and mbrtowc
- - rl_redisplay: if in a UTF-8 locale, take advantage of that to avoid
- calls to mbrtowc
-
- 11/17
- -----
-lib/readline/histlib.h
- - PATTERN_SEARCH: new flag for history search interfaces, means to
- search for a pattern as Posix specifies
-
-lib/readline/histsearch.c
- - history_search_internal: now takes a `flags' argument instead of just
- an `anchored' argument to accommodate PATTERN_SEARCH
- - _hs_history_patsearch: new internal interface to use when flags
- specify PATTERN_SEARCH
-
-lib/readline/rlprivate.h
- - SF_PATTERN: new flag for non-incremental search contexts, means to
- treat search string as a pattern (maps to PATTERN_SEARCH)
-
-lib/readline/search.c
- - noninc_dosearch: takes an additional `flags' argument for SF_PATTERN
- - noninc_search_from_pos: takes an additional `flags' argument for
- SF_PATTERN
- - noninc_dosearch: pass flags argument through to noninc_search_from_pos
- - _rl_nsearch_init: if we are in vi command mode, and `pchar' (key used
- to invoke the search) is `?' or `/', add SF_PATTERN to the flags
- to conform to Posix spec for vi-mode editing
- - _rl_nsearch_dosearch: if cxt->sflags indicates that we should do a
- pattern search, pass SF_PATTERN to noninc_search_from_pos
- - rl_noninc_forward_search_again: if in vi command mode and key == `N',
- make sure flags arg passed to noninc_dosearch includes SF_PATTERN
- - rl_noninc_reverse_search_again: if in vi command mode and key == `n',
- make sure flags arg passed to noninc_dosearch includes SF_PATTERN
- - rl_history_search_internal: pass extra flags arg to noninc_search_from_pos
-
- 11/18
- -----
-lib/readline/search.c
- - noninc_search_from_pos: takes a new argument, a pointer to int where
- it stores the offset of the match in the history line (if non-NULL),
- modified callers
- - rl_history_search_internal: pass newcol pointer to
- noninc_search_from_pos to avoid having to recompute the match offset
- in the matching history entry
-
-config.h.in
- - define HAVE_FNMATCH if we have the fnmatch function (configure was
- already checking for it)
-
-lib/readline/histsearch.c
- - _hs_history_patsearch: transform the pattern into one ending in a
- `*' to avoid having to perform multiple match attempts from each
- index in the history line
- - history_search_internal: changes to handle pattern matching if
- PATTERN_SEARCH is in the flags and HAVE_FNMATCH is defined. This
- makes vi-mode history searching treat the user-specified search
- string as an fnmatch pattern, as Posix requires. Fixes issue
- reported by <jwdevel@gmail.com>
-
- 11/19
- -----
-builtins/shopt.def
- - shopt_enable_hostname_completion: only declare this if READLINE
- defined, since that's the only time it's used. Reported by
- isabella parakiss <izaberina@gmail.com>
-
- 11/20
- -----
-builtins/common.c
- - display_signal_list: make `kill -l 0' print `EXIT', modifying change
- from 9/17
-
- 11/21
- -----
-subst.c
- - expand_word_internal: when the shell encounters a backslash as the
- last character of the string, don't try to add a '\'0' to the end
- of the string if the string is quoted, just add a <CTLESC><\> and
- skip to the end of string processing. Fixes oob-read error
- reported by Jerzy Kramarz <op7ica@gmail.com>
-
-test.c
- - two_arguments: check argv[pos][1] before checking argv[pos][2] when
- looking for a unary argument. Fixes oob-read error on single `-'
- in unary operator position reported by Jerzy Kramarz
- <op7ica@gmail.com>
- - ANDOR: check s[1] before checking s[2] in case s[1] == end of string.
- Fixes oob-read error reported by Jerzy Kramarz <op7ica@gmail.com>
-
-subst.c
- - command_substitute: now takes additional flags argument, changed one
- caller (param_expand) to pass through PF_ASSIGNRHS flag; other callers
- pass 0
- - command_substitute: pass through flags argument to read_comsub
- - read_comsub: now takes additional new flags argument to indicate
- whether or not the word is in a context where word splitting will
- eventually be performed
- - read_comsub: if we are running in a context where word splitting
- will not take place (PF_ASSIGNRHS), we read a CTLESC, and CTLESC is
- in $IFS, add a CTLESC to make sure it gets through a round of
- dequoting
-
- 11/23
- -----
-parse.y
- - xparse_dolparen: since reset_parser frees the pushed string list,
- and this is supposed to be a separate parsing context, we need to
- save and restore pushed_string_list around the call to parse_string
- and reset_parser. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
-bashhist.h
- - HISTEXPAND_DEFAULT: default value of history_expansion, moved here
- from flags.c
-
-flags.[ch]
- - histexp_flag: new variable, this is what set -H/set -o histexpand
- sets; history_expansion set to value of this variable; defaults to 0
- - history_expansion: now set to HISTEXPAND_DEFAULT
-
-bashhist.c
- - bash_history_reinit: if interact == 0, set history_expansion to the
- value of histexp_flag, to allow -H option to enable history
- expansion
- - bash_history_reinit: if interact == 0, make sure
- history_expansion_inhibited is set opposite of histexp_flag, so
- enabling history expansion with -H invocation option turns off
- inhibited expansion. If interactive shell, we turn it off so
- history_expansion controls whether or not history expansion takes
- place. In practice, this function is always called with interact == 0,
- and -c command still doesn't perform history expansion
-
-shell.c
- - init_interactive: make sure histexp_flag and history_expansion are
- identical in an interactive shell; allows both -H/+H option and
- default compilation options (HISTEXPAND_DEFAULT) to work
-
- 11/24
- -----
-subst.c
- - get_word_from_string: take advantage of the fact that SEPARATORS is
- always a (possibly local) copy of IFS, so build a local charmap of
- separators and use it instead of the (cached and possibly stale)
- ifs_cmap map and isifs macro. Fixes bug with -N stripping leading
- whitespace reported by Clark Wang <clarkw@vmware.com>
-
- 11/25
- -----
-builtins/read.def
- - read_builtin: make `i' volatile, since auto variables are technically
- undefined after a longjmp, and a timeout on SIGALRM causes one.
- Fix suggested by Dmitry Goncharov <dgoncharov@users.sf.net>
-
- 11/27
- -----
-parse.y
- - shell_getc: if we are reading input from a string, and we get the
- ending '\0', and we are not expanding an alias, return EOF right
- away. It might be an eval'ed string that has a syntax error.
- Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 11/28
- -----
-subst.c
- - expand_word_internal: if we're expanding a quoted string containing
- a tilde as the first character of a word, only expand the tilde if
- we're expanding an array subscript (Q_ARRAYSUB), not if we're
- expanding any arithmetic expression (Q_ARITH). This fixes a
- backwards compatibility issue with expressions like ~0 reported by
- Bize Ma <binaryzebra@gmail.com>
-
-subst.c
- - parameter_brace_expand_indir: if the variable is not special and
- the indirect variable is unset (!variable where variable is unset),
- report an error. This is a slight incompatibility with previous
- versions, which did not differentiate between indirecting an unset
- variable and an indirect expansion resulting in an unset variable.
- Fixes omission reported by otenba@protonmail.com
-
- 11/30
- -----
-lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
- - do-uppercase-version: since this doesn't actually exist, replace it
- with do-lowercase-version, with the caveat that do-lowercase-version
- results in undefined behavior if bound to a character that's
- already lowercase. Suggested by Branden Robinson
- <g.branden.robinson@gmail.com>
-
-lib/readline/doc/rluser.texi
- - history-substring-search-forward: was misspelled as "substr-search";
- ditto for search-backward
-
-doc/bash.1
- - history-substring-search-{backward,forward}: add documentation, text
- straight from readline.3
-
-jobs.c
- - initialize_job_control: if the terminal's process group is valid,
- but the shell is not the foreground process, check for terminating
- signals (like SIGHUP, which the kernel would send if the process
- group were orphaned) during the loop where we try to stop the shell
- if it's not in the foreground. Not a perfect solution; the kernel
- might not send SIGHUP
-
- 12/1
- ----
-jobs.c
- - initialize_job_control: only go through the SIGTTIN loop 16 times at
- most before deciding we're in the background and probably a member of
- an orphaned process group; set original_pgrp to the terminal's pgrp
- (so the eventual give_terminal_to doesn't leave the terminal in the
- wrong pgrp); and bail on job control initialization
-
-tests/run-all
- - unset SHELLOPTS to avoid its options `polluting' the test
- environment. Suggestion from Vladimir Marek
- <Vladimir.Marek@oracle.com>
-
-tests/execscript
- - use $PWD/exec8.sub to protect against someone who has a cd command
- in his bashrc. Report from Vladimir Marek
- <Vladimir.Marek@oracle.com>
-
- 12/2
- ----
-shell.c
- - open_shell_script: call end_job_control before exiting the shell in
- case we were run as `bash -i script' and there is a problem with
- executing `script'. If we don't, the terminal ends up in the wrong
- process group. Fix from Clark Wang <clarkw@vmware.com>
-
- 12/3
- ----
-parse.y
- - read_comsub: if we look for a character following a `<' and it's
- not `<' (indicating that we don't have to read a here-document),
- make sure we push that character back and go through the loop again
- so we note the right word start location. Fixes bug reported by
- parasite parasite <42parasite@gmail.com>
-
-subst.c
- - parameter_brace_expand_indir: clean up checks for unset variables to
- minimize incompatibilities with previous versions
-
- 12/5
- ----
-lib/readline/history.c
- - add_history: don't update history_length until all of the updates to
- the_history are complete, so history_length is always consistent.
- Report and fix from Hong Cho <hong.cho@citrix.com>
-
-bashline.c
- - bash_backward_shellword: fix to work better at the end of the line,
- with multiple trailing whitespace characters. Inspired by report
- from Kirill Timofeev <kt97679@gmail.com>
-
-Makefile.in
- - bashbug: use `^' as the sed delimiter instead of `%'; some compilers
- use `%' in CFLAGS. Report from Vladimir Marek
- <Vladimir.Marek@oracle.com>
-
- 12/6
- ----
-test.c
- - test_unop: make sure op[1] != 0 before testing op[2]
- - term: make sure argv[pos][1] != 0 before testing argv[pos][2]. Fixes
- oob-read reported by Jerzy Kramarz <op7ica@gmail.com>
-
- 12/7
- ----
-lib/glob/glob.c
- - glob_filename: assign the return value of realloc (results, ...) to
- a temp pointer, so if realloc returns NULL, we make sure we free
- results. Report from Kirill Timofeev <kt97679@gmail.com>
-
- 12/12
- -----
-lib/sh/shquote.c
- - sh_backslash_quote: if FLAGS&2, backslash-quote other single-byte
- characters that are in the current locale's <blank> character class
-
-builtins/printf.def
- - printf_builtin: when processing the `%q' format, make sure to
- backslash quote all <blank> characters by making sure that FLAGS
- passed to sh_backslash_quote includes 2. Fixes issue for certain
- iso-8859-1 locales where character 160 (octal 240, hex 0xa0) is a
- non-breaking space. Report from Stephane Chazelas
- <stephane.chazelas@gmail.com>
-
-lib/sh/eaccess.c
- - sh_stat: if DEV_FD_STAT_BROKEN is defined, take /dev/fd/N and turn
- it into a stat on file descriptor N, as if /dev/fd were not
- available. This is the case on some old versions of SunOS. Report
- and patch from Dmitry Goncharov <dgoncharov@users.sf.net>
-
-config.h.in
- - DEV_FD_STAT_BROKEN: add define
-
-configure.ac
- - --enable-dev-fd-stat-broken: new command-line option, defines
- DEV_FD_STAT_BROKEN if supplied at configure time
-
-doc/bashref.texi
- - --enable-dev-fd-stat-broken: document new command-line option for
- configure
-
-arrayfunc.c
- - assoc_expand_once: new variable, declared here just because
-
-arrayfunc.h
- - assoc_expand_once: extern declaration
- - AV_NOEXPAND: new flag value for the array_value family of functions:
- means to not run associative array subscripts through word expansion
-
-builtins/set.def
- - unset_builtin: call unbind_array_element with assoc_expand_once as
- third arg, controls whether we expand associative array subscripts
- (if 1, we suppress the usual expansion). With accompanying shopt,
- provides backwards compatible option to solve problem with quotes
- and other characters in associative array subscripts pointed out
- most recently by Mingye Wang (Arthur2e5) <arthur200126@gmail.com>
-
-builtins/shopt.def
- - assoc_expand_once: new option, controls value of internal variable
- with the same name. Currently undocumented because I'm not completely
- sold on the name
-
-expr.c
- - evalexp: now takes a second argument, flags. Changed all callers in
- multiple other files (builtins/let.def,execute_cmd.c,arrayfunc.c,
- subst.c,test.c,variables.c)
-
-externs.h
- - EXP_EXPANDED, new flag for second argument to evalexp
-
-builtins/let.def
- - let_builtin: add EXP_EXPANDED to flags passed to evalexp
-
-execute_cmd.c
- - execute_arith_command: add EXP_EXPANDED to flags passed to evalexp,
- since the command string is run through expand_words_no_vars before
- being evaluated
-
-expr.c
- - set expression-global variable already_expanded if flags arg to
- evalexp contains EXP_EXPANDED
- - if assoc_expand_once option set and already_expanded flag set, pass
- 1 in flags to array_variable_part to skip over quotes and expansions
- in the subscript
- - if those two variables set, pass AV_NOEXPAND as flag to
- get_array_value to prevent word expansions on the subscript
-
-arrayfunc.c
- - if flags passed to unbind_array_element includes 1, pass flag on to
- skipsubscript so we don't expect matched quotes or process
- expansions in the subscript
- - if flags to array_value_internal include AV_NOEXPAND, pass 1 as flag
- to array_variable_part to pass along to skipsubscript
- - if flags to array_value_internal include AV_NOEXPAND, don't call
- expand_assignment_string_to_string; just use the unexpanded subscript
- to produce the key [THIS IS A WORK IN PROGRESS]
-
- 12/14
- -----
-subst.h
- - ASS_NOEXPAND: assignment flag that inhibits expansion of associative
- array subscripts
-
-variables.c
- - bind_int_variable: takes new flags arg; flags are taken from the
- ASS_ set of assignment flags, changed callers (bashline.c, expr.c,
- pcomplete.c)
- - bind_int_variable: if flags includes ASS_NOEXPAND, pass 1 as flag to
- valid_array_reference and array_variable_part to pass along to
- skipsubscript, so we don't try to skip over quoted strings in the
- subscript
- - bind_int_variable: pass flags along to assign_array_element
-
-variables.h
- - bind_int_variable: updated extern declaration with new flags arg
-
-expr.c
- - expr_bind_variable: if the assoc_expand_once option is enabled, and
- the flags to evalexp indicate that we have already run the expression
- through word expansion, pass ASS_NOEXPAND as flag to bind_int_variable
-
-arrayfunc.c
- - assign_array_element: if flags includes ASS_NOEXPAND, pass 1 as flag
- to array_variable_name to pass along to skipsubscript
- - assign_array_element: if flags includes ASS_NOEXPAND, don't run an
- associative array subscript through word expansion, just use as-is
-
-subst.c
- - param_expand: call evalexp with EXP_EXPANDED flag for arithmetic
- substitution because the string has already been expanded with
- expand_arith_string
-
- 12/15
- -----
-builtins/read.def
- - read_builtin: use value of assoc_expand_once for valid_array_reference
- as with other uses
- - bind_read_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
- to assign_array_element
-
-general.c
- - assignment: instead of checking whether flags == 0 to allow a `[',
- explicitly check for (flags&1) to disallow it. This leaves the door
- open for additional flag values
-
-builtins/printf.def
- - printf_builtin: use value of assoc_expand_once for
- valid_array_reference as with other uses
- - bind_printf_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
- to assign_array_element
-
- 12/16
- -----
-builtins/history.def
- - change history -d option to handle negative arguments; negative
- arguments offset from the end of the history list (last_position + 1
- so history -d -1 deletes the history -d command that just got
- added). Original patch from Piotr Grzybowski <narsil.pl@gmail.com>
-
-doc/bash.1,lib/readline/doc/hsuser.texi
- - documented new behavior of negative offsets for `history -d'
-
- 12/17
- -----
-lib/readline/history.c
- - remove_history: use memmove to move the history list around instead
- of a loop that copies pointers one at a time, similar to add_history
-
- 12/19
- -----
-configure.ac
- - linux: make sure PGRP_PIPE is defined unconditionally for all kernel
- versions greater than 2.3.*
-
-lib/readline/history.c
- - clear_history: when clearing the history, reset history_base to 1
- (its default)
- - remove_history_range: new function, removes a set of history entries
- and returns them all for deallocation
-
-lib/readline/history.h
- - remove_history_range: extern declaration
-
- 12/20
- -----
-execute_cmd.c
- - eval_arith_for_expr: pass EXP_EXPANDED to evalexp, since we run the
- expression through expand_words_no_vars
-
- 12/21
- -----
-input.c
- - b_fill_buffer: when read returns EOF or error, and we reset the
- buffer and pointers, reset the input pointer to 0. Fixes issue
- reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 12/22
- -----
-arrayfunc.[ch],subst.c
- - array_expand_index: added new FLAGS argument, reserved for future use,
- changed callers
-
-
- 12/24
- -----
-variables.c
- - can_optimize_assignment,optimized_assignment: see if we can detect
- whether or not we're trying to append a string to a string variable,
- and optimize that using realloc/strcpy. Based on a log-ago
- suggestion from Aharon Robbins <arnold@skeeve.com>
-
- 12/27
- -----
-builtins/help.def
- - help_builtin: don't pass return value from ngettext() directly to
- printf
-
- 12/28
- -----
-sig.c
- - set_signal_handler: set SA_RESTART for SIGWINCH, so window size
- changes don't interrupt open/read/write. Suggested by
- Andriy Prystupa <andriy.prystupa@globallogic.com> back in 10/2016
-
- 12/30
- -----
-execute_cmd.c
- - coproc_pidchk: if MULTIPLE_COPROCS, call cpl_search to find coproc
- associated with pid, don't remove it from the list with cpl_delete.
- Just mark as dead and wait for coproc_reap/cpl_reap to take care
- of disposing it
- - execute_coproc: NEW FEATURE: run the coproc name through word
- expansion before creating the coproc; this allows unique coprocs
- to be created in loops. Originally requested way back in 2012 by
- Erik Brandsberg <ebrandsberg@juniper.net>
-
-command.h
- - subshell_com: now has a line number member: line
-
-make_cmd.c
- - make_subshell_command: assign current line number (line number of the
- ending right paren) to `line' member
-
-copy_cmd.c
- - copy_subshell_command: copy the `line' member
-
-execute_command.c
- - execute_command_internal: when executing a user subshell (`(command)'),
- set the line number and line number for the ERR trap from the line
- number saved in the subshell command struct. Fix from
- Eduardo A. Bustamante López <dualbus@gmail.com>
- - execute_arith_command: set line number for ERR trap from line number
- saved in the arith command struct. Fix from
- Eduardo A. Bustamante López <dualbus@gmail.com>
- - execute_cond_command: set line number for ERR trap from line number
- saved in the cond command struct. Fix from
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
-variables.c
- - bind_variable_internal: move can_optimize_assignment call to the
- right place
-
- 12/31
- -----
-variables.c
- - find_variable_nameref: treat a circular variable reference as
- referring to a variable of that name in the global scope (for now),
- if one exists. PROVISIONAL change: inspired by suggestion back in
- 6/2016 by Grisha Levit <grishalevit@gmail.com>
-
- 1/2/2017
- --------
-{expr,general,hashcmd}.c
- - include flags.h for flag values
-
-make_cmd.c
- - include shell.h instead of the files it includes
-
-flags.h
- - new extern declarations for want_pending_command, read_from_stdin
-
-subst.h
- - add extern declaration for expanding_redir, assigning_in_environment
-
-trap.h
- - add extern declaration for running_trap
-
-execute_cmd.h
- - added extern declarations for variables declared in execute_cmd.c,
- changed files that declare lots of extern variables
-
-shell.h
- - added extern declarations for variables declared in shell.c,
- changed files that declare lots of extern variables
-
-parser.h
- - added extern declarations for variables declared in parse.y,
- changed files that declare lots of extern variables
-
-[lots of changes to reduce the number of extern declarations in C and DEF files]
-
-parse.y
- - xparse_dolparen: need ALIAS or DPAREN_ARITHMETIC to be defined to
- use STRING_SAVER
-
- 1/3
- ---
-sig.c
- - termsig_handler: don't call end_job_control if subshell_environment
- indicates that we're in a command or process substitution.
- Provisional fix for bug reported by Russell King <rmk@armlinux.org.uk>
-
-jobs.c
- - end_job_control: only attempt to give the terminal back to
- original_pgrp if job_control != 0; don't test interactive_shell
-
-execute_cmd.c
- - execute_disk_command: call QUIT after search_for_command, since
- the only time QUIT gets called is when the path is actually
- searched. It doesn't happen for an absolute pathname. Fix for
- bug reported by Russell King <rmk@armlinux.org.uk>
-
- 1/16
- ----
-lib/glob/glob.c
- - extglob_skipname,wextglob_skipname: if we don't find a reason to
- not skip the name in any subpattern (r returns 0 for any subpattern),
- return 1 because we should skip the name
- - extglob_skipname,wextglob_skipname: if we don't find a reason to
- not skip the name in any subpattern, but the first part of the extglob
- pattern is a wildcard (`*(pat)'), check the rest of the pattern, if
- any, to decide whether or not to skip the name. Fixes bug reported
- by Grisha Levit <grishalevit@gmail.com>
-
-lib/glob/glob_loop.c
- - CHAR -> GCHAR (unsigned char); change uses of CHAR to GCHAR
-
-lib/glob/glob.c
- - wchkname -> wskipname
- - wskipname: now takes a third `flags' argument, like the other variants
- of skipname
-
- 1/17
- ----
-redir.c
- - here_document_to_fd: set the file descriptor open for writing to the
- here document to be close-on-exec. Fixes bug reported by
- Siteshwar Vashisht <svashisht@redhat.com>
-
- 1/18
- ----
-{gmisc,gm_loop}.c
- - match_pattern_char,match_pattern_wchar: moved to gm_loop.c (new file),
- compile twice for single and wide characters as with the rest of
- the functions
- - umatchlen,wmatchlen: ditto
- - extglob_pattern_p: move to gm_loop.c, generalize for regular and
- wide-char versions
-
- 1/19
- ----
-lib/readline/complete.c
- - stat_char: fix small memory leak if stat/lstat returns -1
-
-bashline.c
- - bash_filename_stat_hook,bash_directory_completion_hook: make sure
- expand_prompt_string is caled wth W_NOPROCSUB flag
- - directory_exists: don't dequote the filename passed as an argument;
- this function should never get quoted pathnames
-
-subst.c
- - expand_word_internal: when calling expand_word_internal recursively
- after reading a double-quoted string, make sure the W_NOCOMSUB and
- W_NOPROCSUB flags make it to the recursive invocation. Fixes bug
- reported by Jens Heyens <jens.heyens@cispa.saarland>
-
- 1/23
- ----
-lib/readline/signals.c
- - _rl_orig_sigset: original signal mask, set and restored by
- rl_set_signals (rl_clear_signals doesn't block signals). If we
- are not installing signal handlers, just save signal mask each
- time rl_set_signals is called
-
-lib/readline/input.c
- - rl_getc: use _rl_orig_sigmask in the call to pselect(), so we block
- the set of signals originally blocked by the calling application.
- Fixes bug reported by Frédéric Brière <fbriere@fbriere.net>
-
-parse.y
- - yy_readline_get: try to unset NONBLOCK mode on readline's input
- file descriptor before calling readline(). Inspired by report from
- Siteshwar Vashisht <svashisht@redhat.com>
-
- 1/30
- ----
-parse.y
- - parse_comsub: don't unconditionally set the LEX_WASDOL flag when we
- see a `$'; we should toggle it to accommodate things like $$.
- Fixes bug reported by Christian Weisgerber <naddy@mips.inka.de>
- - parse_matched_pair: do the same thing with LEX_WASDOL
-
- 2/1
- ---
-jobs.h
- - JWAIT_PERROR,JWAIT_FORCE: new defines for the wait_for_ family of
- functions
-
-jobs.c
- - wait_for_job, wait_for_any_job: take new flags argument for use by
- the wait builtin
- - wait_for_job: if JWAIT_FORCE flag supplied, loop waiting for job to
- terminate instead of change state
- - wait_for_single_pid: if JWAIT_FORCE flag supplied, loop waiting for
- child process to terminate instead of change state
-
-builtins/wait.def
- - takes a new `-f' option, signifying to wait until the specified job
- or process terminates, instead of changes state
-
-doc/{bash.1,bashref.texi}
- - wait: document the new -f option and its behavior when job control
- is enabled
- - job control: add a paragraph describing how the wait builtin changes
- behavior when job control is enabled: it returns when a job changes
- state
-
- 2/2
- ---
-examples/loadables/fdflags.c
- - fdflags: new loadable builtin to set and unset file descriptor flags
- (such as non-blocking, though bash undoes that) for descriptors bash
- has open. Developed in consultation with Christos Zoulas
- <christos@zoulas.com>
-
- 2/3
- ---
-
-lib/readline/text.c
- - rl_previous_screen_line: attempt to move to the same column on the
- previous screen line of the current readline buffer by moving back
- a number of characters equal to the screen width
- - rl_next_screen_line: attempt to move to the same column on the
- next screen line of the current readline buffer by moving forward
- a number of characters equal to the screen width. Both originally
- suggested by Hans Ginzel <hans@matfyz.cz>
-
-lib/readline/readline.h
- - rl_{next,previous}_screen_line: extern declarations
-
-lib/readline/funmap.c
- - {next,previous}-screen-line: new bindable command names
-
-lib/readline/doc/{rluser.texi,readline.3}
- - {next,previous}-screen-line: document behavior, including limitations
-
- 2/5
- ---
-lib/readline/input.c
- - rl_read_key: when reading input from a macro, make sure to return
- the next character as an unsigned char, so we handle multibyte
- character sequences correctly. Report and fix from Grisha Levit
- <grishalevit@gmail.com>
-
- 2/6
- ---
-shell.c
- - --pretty-print: new invocation option, currently undocumented, dumps
- a pretty-printed version of a shell script given as an argument to
- stdout
- - main: call pretty_print_loop() if we're in pretty-printing mode in
- a non-interactive shell
-
-eval.c
- - pretty_print_loop: new function, similar to reader_loop, reads
- commands and prints them by displaying the result from
- make_command_string()
-
-externs.h
- - pretty_print_loop: new extern declaration
-
- 2/9
- ---
-doc/{bash.1,bashref.texi}
- - here strings: correct documentation to note they do not undergo
- brace expansion. Report from Conor McCarthy <mr.spuratic@gmail.com>
-
- 2/9
- ---
-lib/readline/display.c
- - expand_prompt: instead of recomputing the line break offsets for
- prompts that span multiple screen lines on every call to rl_redisplay,
- do it here. Manage a local array local_prompt_newlines; set an offset
- every time `physchars' hits a multiple of the screen width. Inspired
- by https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843819
- - rl_redisplay: don't calculate multi-line prompt line break indices
- here; use the values calculated by expand_prompt
- - rl_{save,restore}_prompt: save and restore local_prompt_newlines
-
- 2/11
- ----
-lib/readline/mbutil.c
- - _rl_find_prev_mbchar_internal: since we're traversing the string
- from the beginning, shortcut non-multibyte characters in a UTF-8
- locale
-
-parse.y
- - parse_comsub: if we are parsing a here document with a quoted
- delimiter (LEX_QUOTEDDOC), we should not remove <backslash><newline>
- pairs from the body of the here document. Need to add LEX_QUOTEDDOC
- to the values in tflags when calling shell_getc. Fixes bug reported
- by Michael Homer <michael.homer@ecs.vuw.ac.nz>, patch was originally
- contributed by Geir Hauge <geir.hauge@gmail.com>
-
- 2/15
- ----
-jobs.c
- - bgp_add: if hashed pid collides with bgpids.head index, print a
- warning and move to the next index. Attempt to avoid collision
- problem reported by Graham Northup <northug@clarkson.edu>
-
- 2/17
- ----
-subst.c
- - process_substitute: call remove_quoted_escapes on the command string
- like command substitution does, since the string will be run through
- the parser again. Fixes bug reported by David Simmons
- <bug-bash@tmp.davidsimmons.com>
-
-config-top.h
- - STATIC_PATH_VALUE: new config variable, undefined by default
-
-variables.c
- - shell_initialize: if STATIC_PATH_VALUE is defined, use it to set the
- PATH variable at shell startup, overriding the environment and any
- value for DEFAULT_PATH_VALUE. Based on a suggestion from
- Lonnie Abelbeck <lonnie@abelbeck.com>
-
- 2/18
- ----
-shell.c
- - maybe_make_restricted: clear the hash table before making the PATH
- variable read-only by calling stupidly_hack_special_variables.
- Suggestion from Lonnie Abelbeck <lonnie@abelbeck.com>
-
-subst.c
- - expand_string_for_pat: change expansion of WORD in ${param[%[%]][#[#]]word}
- to use this new function, initially identical to
- expand_string_for_rhs
- - getpattern: use expand_string_for_pat to expand the pattern
-
- 2/19
- ----
-subst.c
- - expand_string_for_rhs: now that this is only used to expand the RHS
- of the various non-pattern ${paramOPword} expansions, set
- expand_no_split_dollar_star depending on whether or not the entire
- brace expansion is going to be subjected to word splitting: if it's
- quoted or if IFS is set but null, we will not be splitting so we set
- this to 1 and let $* expand to separate fields separated by a space.
- This was heavily debated back in October 2014 and resulted in Posix
- interp 888. Reported by Martijn Dekker <martijn@inlv.org>
-
- 2/20
- ----
-subst.c
- - expand_string_for_rhs: now takes `op' (brace expansion operator) as
- an additional argument; changed call in parameter_brace_expand_rhs
- - expand_string_for_rhs: make sure to set expand_no_split_dollar_star
- if `op' is `=', since we are supposed to preserve the assignment
- statement expansion semantics on the RHS of ${param=word}
-
-jobs.c
- - bgp_delindex: make sure to set ps->pid to NO_PID so we more
- effectively remove it from the hash table. It shouldn't matter as
- long as nothing in pidstat_table points to it, but better to be safe
- - bgp_delete,bgp_search: generalize previous collision detection to
- loop detection: abort search if we are going to go back to the
- first index we tried
-
- 2/21
- ----
-lib/readline/vi_mode.c
- - rl_vi_bword: if we're trying to move backward to non-whitespace
- in a line that begins with whitespace, make sure we don't move
- point to 0 and test memory locations before the start of the
- buffer. Report and fix from Jason Hood <jadoxa@yahoo.com.au>
-
-lib/readline/display.c
- - expand_prompt: if _rl_screenwith == 0, call rl_reset_screen_size to
- initialize it. If it's still 0 after that, guess that the screen
- width is 80 and use that to guess how many screen lines the prompt
- consumes
-
-lib/readline/readline.c
- - readline_internal_setup: if in emacs editing mode, and we are
- showing the editing mode in the prompt, call _rl_reset_prompt() to
- make sure that the updated setting of _rl_show_mode_in_prompt
- (presumably set in an inputrc file) is reflected in the redisplay
- performed by rl_callback_newline via readline_internal_setup.
- Fix from Jason Hood <jadoxa@yahoo.com.au>
-
- 2/22
- ----
-builtins/complete.def
- - print_one_completion,print_compopts: make sure to display the
- `nosort' and `noquote' options if they've been set for a particular
- compspec. Fix from Grisha Levit <grishalevit@gmail.com>
-
-builtins/read.def
- - read_builtin: if -e is supplied, read needs to free rlbuf before
- returning, since it uses discard_unwind_frame at that point. Bug
- and fix from ZhangXiao <xiao.zhang@windriver.com>
-
-execute_cmd.c
- - execute_for_command: when using a nameref as the for loop control
- variable, make sure we check for readonly namerefs and make sure
- that we force bind_variable to enforce restrictions on nameref
- assignments. Fix from Grisha Levit <grishalevit@gmail.com>
-
- 2/23
- ----
-general.c
- - make_absolute: convert deprecated cygwin_conv_to_full_posix_path
- to cygwin_conv_path (CCP_WIN_A_TO_POSIX, ...)
-
-{shell,variables}.c,config-top.h
- - modify change from 2/17: rename STATIC_PATH_VALUE to RBASH_STATIC_PATH_VALUE;
- don't use it in shell_initialize; set PATH to it just before
- imposing restricted shell restrictions
-
- 2/24
- ----
-subst.c
- - expand_string_for_rhs: revert change from 2/19 concerning setting
- expand_no_split_dollar_star so we are consistent with the Posix
- examples. This anticipates Martijn Dekker initiating an austin
- group discussion about this case
-
- 2/25
- ----
-pcomplete.c
- - gen_shell_function_matches: if COMPREPLY is an associative array,
- don't coerce it to an indexed array, which will fail to produce any
- matches anyway. Report from Grisha Levit <grishalevit@gmail.com>
- - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore
- the nameref attribute. Report from Grisha Levit
- <grishalevit@gmail.com>
-
-subst.c
- - parameter_brace_expand: if expand_no_split_dollar_star is set, make
- sure chk_atstar treats ${var[*]} as quoted by passing Q_DOUBLE_QUOTES
- as the second argument. Fixes differing treatment of $* and ${v[*]}
- reported by Grisha Levit <grishalevit@gmail.com>, because otherwise
- *contains_dollar_at gets set to 1 and the word is inappropriately
- split
-
- 3/1
- ---
-subst.c
- - expand_word_list_internal: if a variable assignment fails (e.g., due
- to a readonly variable) in a non-interactive posix mode shell, don't
- abort the shell if the assignment is being performed by the command
- builtin, even if it's something like `command eval v=1'. Fixes
- RedHat bug https://bugzilla.redhat.com/show_bug.cgi?id=1389838
- (reported by Denys Vlasenko)
-
- 3/3
- ---
-builtins/shopt.def
- - set_compatibility_level: make sure that changing the compatibility
- level sets or modifies BASH_COMPAT. Fixes bug reported by
- Stephane Chazelas <stephane.chazelas@gmail.com>
-
-lib/glob/smatch.c
- - is_cclass: broke into two functions: is_valid_cclass and cclass_test,
- for future expansion. No functionality change
-
-lib/glob/sm_loop.c
- - BRACKMATCH: when testing a character against a character class name,
- use the unfolded (original) character, since we're not performing a
- comparison. This is what glibc does. Fixes bug reported by
- Lukáš BaÅ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
-
- 12/7
- ----
-builtins/set.def
- - find_minus_o_option: new helper function, returns index into
- o_options given option name
- - minus_o_option_value,set_minus_o_option: use find_minus_o_option
-
-general.c
- - new table of variables (currently all shopt options) that are
- modified by going into and out of posix mode; num_posix_options()
- returns the number of variables
- - get_posix_options: fill in a bitmap passed as an argument (or return
- a new one) of values of posix-mode-modified variables in the table
- - set_posix_options: set values of posix-mode-modified variables from
- the table using the passed bitmap for values
-
-builtins/set.def
- - get_current_options: make the bitmap large enough to hold the options
- in the set table and the table of posix-mode-modified variables; call
- get_posix_options to fill in those values after the values from the
- o_options table
- - set_current_options: call set_posix_options to reset the values of
- the posix-mode-modified variables at the end of the bitmap, after
- the o_options values. Fixes issue reported by PJ Eby
- <pje@telecommunity.com>
-
- 12/9
- ----
-parse.y
- - select_command: add two additional productions to support select
- commands without a word_list following the `in'. Fixes omission
- reported by Martijn Dekker <martijn@inlv.org>
-
- 12/11
- -----
-variables.c
- - assign_in_env: don't allow namerefs in temporary environment
- assignments to create variables with invalid names for export. Fixes
- bug reported by Grisha Levit <grishalevit@gmail.com>
-
- 12/14
- -----
-parse.y
- - don't change last_command_exit_value in the 'error yacc_EOF' production
- if the parser sets it to something non-zero; just make sure it
- indicates an error. Fixes problem with unexpected EOF in eval
- reported by Martijn Dekker <martijn@inlv.org>
-
- 12/17
- -----
-expr.c
- - exp2 -> expmuldiv
-
-lib/sh/smatch.c
- - fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being
- used
-
-hashlib.c
- - hash_string: add FNV offset as initial value for hash instead of
- starting at 0, changes hash for associative arrays and requires a
- bunch of changes to the "right" test suite files
-
-variables.c
- - rseed: make it explicitly 32 bits; that's all we're interested in
- anyway
-
- 12/18
- -----
-
-variables.c
- - brand: add some comments, make the constants explicitly 32 bits;
- use signed 32-bit values for the intermediate calculations. The
- algorithm is still minstd
-
-[bash-5.0-rc1 frozen]
-
- 12/21
- -----
-doc/bash.1
- - }1: remove macro definition; it's outlived its bugfix purpose.
- Report from Derek Schrock <dereks@lifeofadishwasher.com>
-
- 12/22
- -----
-subst.c
- - expand_arith_string: set W_NOTILDE in the flags so we don't perform
- tilde expansion at all, even for the previously-special-case array
- subscript expansion. Report from Bize Ma <binaryzebra@gmail.com>
- - expand_word_internal: take out Q_ARRAYSUB check for tilde expansion
-
- 12/26
- -----
-builtins/evalstring.c
- - parse_and_execute: if the eval builtin gets a parser error while
- parsing a string in posix mode, don't exit the shell if the eval
- was run by the command builtin. report from Martijn Dekker
- <martijn@inlv.org>
-
-examples/loadables/{basename,dirname}.c
- - dirname_builtin: skip over any `--' ending the options. Report from
- Peng Yu <pengyu.ut@gmail.com>
-
- 12/27
- -----
-examples/loadables/mkdir.c
- - make_path: add argument noting whether or not the user specified -m;
- only attempt the chmod on an existing directory if the user did so
- - make_path: when creating intermediate directories, perform the
- mkdir (path, 0) and chmod separately as the posix text recommends
-
- 12/28
- -----
-parser.h
- - PST_COMMENT: new state, set when the shell is reading characters
- until newline as part of comment processing
-
-parse.y
- - shell_getc: don't return a space at the end of a token if the parser
- is consuming a comment. Fixes bug reported by Harald van Dijk
- <harald@gigawatt.nl>
-
- 12/31
- -----
-lib/glob/glob_loop.c
- - INTERNAL_GLOB_PATTERN_P: revert change from 4/27 that makes this
- function return non-zero for a backslash in the string. Based on a
- report from Tom Ryder <tom@sanctum.geek.nz>
-
-[bash-5.0 frozen]
-
-[bash-5.0 released]
-
- 1/6/2019
- --------
-
-examples/loadables/basename.c
- - make sure to include bashgetopt.h. Reported by Angel
- <angel@16bits.net>
-
-lib/malloc/malloc.c
- - stdlib.h: include if botch isn't defined to provide a declaration
- for abort()
-
-hashlib.c,Makefile.in
- - fixes to make hash library testing work for others from
- Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/unicode.c
- - u32toutf16: correct the second argument to be wchar_t *, and treat
- it as such, even though it doesn't make a difference in practice.
- Report and fix from Eduardo Bustamante <dualbus@gmail.com>
-
- 1/8
- ---
-
-builtins/return.def
- - return_builtin: return EX_USAGE if we're not executing a shell
- function or sourcing a script, so a posix-mode shell exits. Fixes
- bug reported by Robert Hailey <bash@osndok.com>
-
-builtins/declare.def
- - declare_internal: don't let `declare -f +f' turn off the function
- attribute. Fix from Grisha Levit <grishalevit@gmail.com>
- - declare_internal: reject attempts to add the -A or -a attributes
- to functions. Report from Grisha Levit <grishalevit@gmail.com>
-
- 1/9
- ---
-bashline.c
- - completion_glob_pattern: new function, returns true if the passed
- string contains a glob pattern that should be process by the glob
- completion code. Completion glob patterns don't pay attention to
- backslashes unless they're the last character in the string. This
- is a different, more self-contained, fix for the problem reported
- by Tom Ryder <tom@sanctum.geek.nz>
-
-lib/glob/glob_loop.c
- - INTERNAL_GLOB_PATTERN_P: restore change from 4/27 and make this
- function return non-zero if it encounters a backslash in the string.
- It needs to match pathexp.c:unquoted_glob_pattern_p(). Adds fix
- back for issue reported by axel@freakout.de
-
-test.c
- - arithcomp: when calling evalexp, make sure to call it with the
- EXP_EXPANDED flag, since all arguments here have been evaluated
- already
-
-arrayfunc.c
- - array_expand_index: call evalexp with EXP_EXPANDED flag, since we
- have run the string through expand_arith_string already
-
- 1/11
- ----
-parser.h
- - PST_ENDALIAS: new state, means we just consumed the last character
- of an alias expansion and returned the fake space
-
-parse.y
- - shell_getc: add PST_ENDALIAS to parser_state before returning the
- fake space that marks the end of the alias, making sure to do it
- only once. With that set, fall through to the pop_string(), making
- sure to unset PST_ENDALIAS. Fixes alias bug reported by
- Ante Peric <synthmeat@gmail.com>
-
- 1/12
- ----
-lib/glob/glob.c
- - {extglob,wextglob}_skipname: make sure we check the rest of the
- pattern if the extglob pattern is null, and therefore won't match
- anything. If that is followed by a `.', quoted or unquoted, we can
- match a leading `.' in the pathname. This code is currently not
- active.
-
-builtins/hash.def
- - hash_builtin: if -d is supplied without an argument, print an error
- message and return failure, just like -t without an argument. Fixes
- inconsistency reported by Dan Jacobson <jidanni@jidanni.org>
-
- 1/13
- ----
-parse.y
- - shell_getc: use shellblank when testing the last character of an
- alias to determine whether or not to add a trailing space instead
- of testing against a space only. These are the non-shell-metacharacters
- that can delimit words. Used together with PST_ENDALIAS
-
- 1/17
- ----
-parse.y
- - shell_getc: keep track of whether the last character read from
- shell_input_line is an unquoted backslash and don't add a space to
- the end of an alias if the alias value ends in an unquoted backslash.
- From an austin-group mailing list discussion message from
- Harald van Dijk <ag@gigawatt.nl>
-
- 1/20
- ----
-general.c
- - check_identifier: make sure CHECK_WORD is non-zero before we check
- whether or not the word consists of all digits. This allows function
- names to consist solely of digits when not in posix mode. From a
- report by Andrey Butirsky <butirsky@gmail.com>
-
- 1/22
- ----
-bashline.c
- - initialize_readline: only unbind ^E in vi_movement_keymap if it's
- still bound to the default rl_emacs_editing_mode. Fixes bug
- reported by Greg Bell <gbell_spamless@yahoo.com>
-
- 1/23
- ----
-builtins/shopt.def
- - we need the extern declaration for syslog_history if SYSLOG_HISTORY
- is defined, since it's used even if SYSLOG_SHOPT is not defined.
- From a Gentoo Linux bug report, eventually reported to bug-bash by
- Tomas Mozes <hydrapolic@gmail.com>
-
- 1/25
- ----
-command.h
- - CMD_TRY_OPTIMIZING: new command flag, means this (simple) command is
- a candidate for fork optimization (suppression)
-
-builtins/evalstring.c
- - can_optimize_connection: new function, takes an AND_OR list (&& or
- ||) from parse_and_execute, makes sure it's the last in a possibly
- multi-command list, and returns non-zero if it's a simple command,
- indicating that it's a candidate for fork optimization.
- - parse_and_execute: if we have a cm_connection command, call
- can_optimize_connection to determine if it's a suitable candidate
- and set CMD_TRY_OPTIMIZING if that returns non-zero
- - optimize_fork: don't bother unless the rhs of the && or || command
- has the CMD_TRY_OPTIMIZING flag set. These fix the bug reported by
- Brad Spencer <bspencer@blackberry.com>
-
-execute_cmd.c
- - execute_connection: case AND_AND and OR_OR: call optimize_fork on
- the right side of the command before executing `second'. This will
- safely restore the fork optimization we removed from
- parse_and_execute()
-
-builtins/complete.def
- - build_actions: make sure the function name argument to -F is a
- valid shell function name: it doesn't contain any invalid posix-
- mode characters and doesn't contain any shell break characters that
- would need to be quoted when defining a function. Fixes issue
- reported by Great Big Dot <greatbigdot@gmail.com>
-
- 1/28
- ----
-variables.c
- - dispose_temporary_env: make sure to save temporary_env to a temp
- pointer and set temporary_env to NULL before trying to dispose it,
- so no flush function ever tries to add a temporary variable back
- into the table (e.g., bind_variable())
-
- 1/29
- ----
-builtins/evalstring.c
- - can_optimize_connection,optimize_fork: add the last command in lists
- separated by `;' to the list of candidates for fork optimization
-
- 1/30
- ----
-examples/loadables/strftime.c
- - strftime_builtin: try to extend the buffer longer than tbsize*3,
- which is a minimum of 24 characters, in case some of the formats
- (e.g., %c) expand to something longer than that. Fixes bug
- reported by Stan Marsh <gazelle@xmission.com>
-
- 1/31
- ----
-lib/readline/undo.c
- - rl_do_undo: before inserting text while undoing UNDO_DELETE, or
- performing a deletion while undoing UNDO_INSERT, make sure that
- rl_point is valid by calling _rl_fix_point. Fuzzing bug and fix
- from Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/search.c
- - _rl_nsearch_abort: validate new values for rl_point and rl_mark by
- calling _rl_fix_point(). Fuzzing bug and fix from
- Eduardo Bustamante <dualbus@gmail.com>
-
-subst.c
- - string_extract_double_quoted: if we parse a syntactically-incorrect
- $( expression while extracting a double-quoted string, si will
- appear to go `backward'. Just skip over the rest of the string and
- continue. Fuzzing bug from Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/text.c
- - rl_change_case: if towupper or towlower returns a valid wide char
- that can't be converted back to a valid multibyte character, use
- the original character and go on. Fuzzing bug from
- Eduardo Bustamante <dualbus@gmail.com>
-
-lib/glob/glob.c
- - wdequote_pathname: if there are no multibyte characters in pathname,
- just call udequote_pathname and don't bother converting it to wide
- characters
- - glob_pattern_p: if there are no multibyte characters in the pattern,
- just call internal_glob_pattern_p right away
-
-lib/glob/glob_loop.c
- - INTERNAL_GLOB_PATTERN_P: return 2 if we see only backslash-quoted
- characters without any other unquoted glob pattern characters, so
- interested callers can shortcut and just dequote the pathname
-
-pathexp.c
- - unquoted_glob_pattern_p: return 2 if we see only backslash-quoted
- characters without any other unquoted glob pattern characters,
- consistent with the glob library
- - unquoted_glob_pattern_p: don't count a backslash quoting a slash as
- a backslash that will trigger a call to shell_glob_filename, since
- backslashes at the end of patterns (pathname components) will always
- fail to match. XXX - this is provisional
-
-lib/glob/glob.c
- - glob_filename: if we have a directory name that has no unquoted
- special glob chars, but has backslashes, just dequote it and return
- it without going through the rest of the glob expansions. Partial
- fix for issue with unreadable directories reported by
- Andrew Church <achurch+bash@achurch.org>
-
- 2/2
- ---
-lib/readline/readline.c
- - readline_internal_teardown: if revert-all-at-newline is set, make
- sure that the history position is at the end of the history before
- calling _rl_revert_all_lines(). Fixes bug reported by
- johnlinp@gmail.com and frederik@ofb.net
-
- 2/4
- ---
-builtins/complete.def
- - complete_builtin: fix check for argument to -F to use strpbrk
- instead of incomplete use of strcspn. Fix from Grisha Levit
- <grishalevit@gmail.com>
-
- 2/5
- ---
-lib/readline/readline.c
- - rl_parse_and_bind: change parsing of boolean variable values to
- look for and consume an optional whitespace-delimited word. This
- allows trailing spaces and everything that follows to work. Idea
- from Bize Ma <binaryzebra@gmail.com>
- - rl_parse_and_bind: print error message about unknown variable names
- instead of calling rl_variable_bind to do it
- - rl_variable_bind: report error if setting string variable returns
- non-zero
-
- 2/6
- ---
-lib/readline/histfile.c
- - read_history_range: close FILE before returning if the history file
- size is 0
-
- 2/11
- ----
-bashline.c
- - edit_and_execute_command: add the current line buffer to the history
- list even if it's empty and rely on other code in bash_add_history
- to take care to not add multiple semicolons with multiple blank
- lines and command_oriented_history. Live with the blank lines as
- history entries for now. Fixes problem reported by
- Johannes Hielscher <jhielscher@posteo.de>
-
-lib/readline/misc.c
- - _rl_revert_all_lines: renamed to _rl_revert_previous_lines, since
- that is basically what it does
- - _rl_revert_all_lines: now just makes sure the history offset is at
- the end of the history and calls _rl_revert_previous_lines. Inspired
- by a suggestion from johnlinp@gmail.com
-
-lib/readline/readline.c
- - readline_internal_teardown: revert change of 2/2, moved that code
- into the (new) _rl_revert_all_lines
-
-lib/readline/rlprivate.h
- - _rl_revert_previous_lines: new extern declaration
-
-builtins/bind.def
- - bind_builtin: make sure the unwind-protect gets run when the --help
- option is used, so use `case GETOPT_HELP:' instead of `CASE_HELPOPT;'.
- Report and fix from Koichi Murase <myoga.murase@gmail.com>
-
- 2/12
- ----
-lib/readline/util.c
- - _rl_abort_internal: don't just turn off the MACRODEF state, call
- _rl_kill_kbd_macro to delete any traces of an in-progress macro
- definition before turning it off. Fixes fuzzing bug.
-
- 2/13
- ----
-examples/loadables/Makefile.in
- - CCFLAGS: add $(CPPFLAGS) to value, based on a report from
- Christian Weisgerber <naddy@mips.inka.de>
-
- 2/15
- ----
-bashline.c
- - posix_readline_initialize: keep track of the vi insertion keymap
- binding for TAB, since we change it in this function. Save the
- old binding before we change it when turning posix mode on, and
- restore that old binding when turning posix mode off, as long as
- the current binding is still rl_insert. Suggested by a report from
- Koichi Murase <myoga.murase@gmail.com>
-
- 2/17
- ----
-builtins/exec.def
- - exec_builtin: save value of job_control; use it to restore the value
- of job_control if an exec fails in an interactive shell instead of
- enabling it by default in an interactive shell. Report from
- Grisha Levit <grishalevit@gmail.com>
-
-lib/readline/bind.c
- - _rl_function_of_keyseq_internal: make sure to use checks against LEN
- instead of a NULL character in KEYSEQ to determine the length of the
- key sequence.
- Report and fix from Koichi Murase <myoga.murase@gmail.com>
- - rl_bind_key: make sure the KEY argument is not larger than the
- largest unsigned character.
- Report and fix from Koichi Murase <myoga.murase@gmail.com>
- - rl_translate_keyseq: make sure that M-x correctly adds "\ex" to the
- key sequence array when convert-meta is set.
- Report and fix from Koichi Murase <myoga.murase@gmail.com>
- - rl_translate_keyseq: now unconditionally converts meta characters to
- ESC-prefixed key sequences when processing \0nnn \Xnnn and \[char]
- escape sequences that resolve to meta characters and for `normal'
- characters that have the meta bit set
- Report and fix from Koichi Murase <myoga.murase@gmail.com>
-
-jobs.c
- - end_job_control: if the terminal pgrp (terminal_pgrp) is not the same
- as the original pgrp (original_pgrp), set the terminal's pgrp to the
- original pgrp so when we reset the shell's pgrp to original_pgrp,
- we'll continue to be able to read from the terminal if the shell is
- interactive. Fixes bug with turning off job control before starting
- an interactive shell reported by Grisha Levit
- <grishalevit@gmail.com>
-
- 2/19
- ----
-
-jobs.c
- - end_job_control: if the setpgid(0, ...) succeeds, reset the value of
- shell_pgrp. Fixes pgrp mismatch after failed exec in an interactive
- login shell reported by Grisha Levit <grishalevit@gmail.com>
-
- 2/20
- ----
-bashhist.c
- - pre_process_line: save history_length before calling history_expand,
- and after possibly decrementing history_length, just restore the old
- value instead of incrementing it. Fixes bug reported by
- Michael Albinus <michael.albinus@gmx.de>
- - bash_add_history: don't bother calling really_add_history if the
- history is stifled and the max number of entries is 0
-
-aclocal.m4,configure.ac,m4/*.m4
- - replace the old set of gettext m4 macros with the latest m4 files
- from the gnulib and gettext distributions
-
- 2/21
- ----
-builtins/cd.def
- - bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always
- failing
-
-command.h
- - W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword}
-
-subst.c
- - expand_string_for_rhs: set W_EXPANDRHS in word to be expanded
-
-subst.c
- - expand_word_internal: when encountering a single or double quoted
- string that expands to nothing, add a CTLNUL if the W_EXPANDRHS
- flag is set and the word isn't quoted, indicating that the word
- will eventually be split and we need to preserve the null to
- produce an empty word. From a discussion on bug-bash started by
- sunnycemetery@gmail.com
-
- 2/22
- ----
-bashline.c
- - completion_glob_pattern: make sure to skip over a character quoted
- by a backslash. Fixes bug reported by John Van Sickle
- <john.vansickle@gmail.com>
-
- 2/23
- ----
-lib/readline/complete.c
- - last_completion_failed: keep track of whether the last completion
- attempt generated any matches
- - rl_complete: if the last readline command was completion, but the
- completion attempt didn't generate any matches, don't regenerate
- and display the match list. Treat it as a new completion attempt.
- Suggested by Richard Stallman <rms@gnu.org>
-
-bashhist.c
- - maybe_append_history: try to handle the case where the number of
- history entries in the current shell session is greater than the
- number of entries in the history list. Based on a report from
- <airat_vi@mail.ru>
-
- 2/25
- ----
-aclocal.m4
- - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: use en_US.UTF-8 instead of
- de_DE.UTF-8; it's more likely to be installed
-
- 2/26
- ----
-doc/{bash.1,bashref.texi}
- - extdebug: make sure to note that setting this option in a startup
- file causes an attempt to start the debugger. Noted by Linda
- Walsh <bash@tlinx.org>
-
-builtins/fc.def
- - fc_builtin: if we are not listing, and delete the last history entry,
- make sure that histbeg or histend, whichever is greater, is clamped
- at the value of last_hist to avoid dereferencing the just-removed
- history index. Fixes bug reported by Chris King-Parra
- <chris@kingparra.work>
-
- 2/27
- ----
-shell.c
- - init_interactive: assignment to histexp_flag should be protected by
- #ifdef BANG_HISTORY. https://savannah.gnu.org/patch/?9759
-
-subst.c
- - list_string: if we have a non-null string, but quoted null character
- removal leaves an empty string, set W_SAWQUOTEDNULL in the returned
- word flags so the caller can deal with it
- - parameter_brace_expand_rhs: deal with word with null or empty word
- and W_SAWQUOTEDNULL in the flags coming back from expand_string_for_rhs
- by turning it into a quoted null word and modifying the flags. Part
- of fix for bug report from Grisha Levit <grishalevit@gmail.com>
- - expand_word_internal: if a double-quoted string comes back with a
- quoted null as the expansion of "$@", note that we saw it, but still
- add a quoted null into the result string instead of short-circuiting.
- Part of fix for bug report from Grisha Levit <grishalevit@gmail.com>
-
- 3/1
- ---
-examples/loadables/fdflags.c
- - O_CLOEXEC: instead of not using it, synthesize a definition for it
- from unused bits in the file status word. It's only used as a
- placeholder anyway. Fix from code by Robert Elz <kre@bmunnari.oz.au>
-
-execute_cmd.c
- - execute_connection: call optimize_fork on the rhs of a `;' connection
- to attempt to optimize the last simple command in a list
-
- 3/4
- ---
-subst.c
- - parameter_brace_expand: add `@' to the list of operators that cause
- unbound parameter errors. Fixes oversight bug reported by
- Martin Schulte <gnu@schrader-schulte.de>
-
- 3/5
- ---
-subst.c
- - expand_word_internal: update to fix from 2/21 and 2/27 to accommodate
- contexts when word splitting will not take place (W_ASSIGNRHS). Fix
- from Grisha Levit <grishalevit@gmail.com>
- - param_expand: if IFS is unset, and we are expanding $* in a context
- where we're not going to be performing word splitting, just treat it
- as if IFS=" " and don't set W_SPLITSPACE. Report and hint at fix
- from Grisha Levit <grishalevit@gmail.com>
- - param_expand: if IFS is not null, and we are expanding $* in a
- context where we're not going to be performing word splitting, and
- we quote a null string (resulting in a quoted null), make sure we
- set W_SAWQUOTEDNULL to note this for the caller
- - parameter_brace_expand_rhs: make sure to remove any W_SAWQUOTEDNULL
- flag for a the word on the rhs of the `=' operator if the original
- string is null or the original string is not null and the returned
- string (after dequoting) is not null. For instance ${v= ''} should
- not have the SAWQUOTEDNULL flag set because it is " " after
- expansion and dequoting, even though we saw a quoted null there
-
- 3/6
- ---
-lib/sh/eaccess.c
- - sh_eaccess: AIX needs the same kind of additional checks as FreeBSD
- and Solaris when running as root and checking whether or not a file
- is executable. Report and fix from REIX, Tony <tony.reix@atos.net>
-
- 3/7
- ---
-lib/glob/glob.h
- - GX_RECURSE: new flag, indicates internal call to glob_filename
-
-lib/glob/glob.c
- - glob_filename: add GX_RECURSE to recursive call to glob_filename
- - glob_filename: dequote a directory name (in the absence of a
- filename) only if this is not a recursive call to glob_filename
- ((flags & GX_RECURSE) == 0). Fixes bug reported by Dr. Werner Fink
- <werner@suse.de>
-
- 3/8
- ---
-parse.y
- - handle_eof_input_unit: before calling exit_builtin, set
- last_shell_builtin and this_shell_builtin appropriately, since the
- exit builtin uses them to determine whether or not to exit
- immediately. Fixes bug reported by Tom Levy <tomlevy93@gmail.com>
-
-lib/sh/shquote.c
- - sh_double_quote,sh_mkdoublequoted,sh_backslash_quote_for_double_quotes:
- make sure to handle multibyte characters that may contain characters
- that need to be quoted in double quotes; adding a spurious double
- quote may turn them into different characters or uncover characters
- that are special in double quotes. Fixes bug reported by
- Stephane Chazelas <stephane.chazelas@gmail.com>
- - sh_backslash_quote: don't call COPY_CHAR_P if we're in a UTF-8
- locale and the current character doesn't have its eighth bit set;
- only check mb_cur_max and is_basic if we're not in a UTF-8 character
- set
-
- 3/9
- ---
-subst.c
- - read_comsub: if it looks like we're starting a multibyte character,
- read a whole multibyte character from buf and add it all at once,
- so we don't quote each byte in a multibyte character sequence. Fixes
- bug uncovered by shquote changes from 3/8
-
- 3/11
- ----
-subst.c
- - expand_word_internal: if we are in a context where word splitting
- will not occur, but one where we need to make sure we eventually
- expand "$@" to multiple words, add a space as quoted so we can still
- split on the space separator in $@. Fixes bug reported by
- Grisha Levit <grishalevit@gmail.com>
-
- 3/13
- ----
-subst.c
- - parameter_brace_substring, parameter_brace_patsub: treat the case
- where pflags includes PF_ASSIGNRHS the same as if IFS is null, since
- word splitting will not take place
-
-{subst,array,assoc}.c,subst.h
- - string_list_pos_params: add a fourth argument: pflags; change all
- callers to initially pass 0 as fourth arg
-
- 3/14
- ----
-subst.c
- - expand_word_internal: split words with W_ASSIGNRHS flag set specially.
- These and subsequent changes fix expansion bugs reported by
- Grisha Levit <grishalevit@gmail.com>
-
-subst.c
- - string_list_pos_params: if we are expanding `@', make sure we honor
- PFLAGS including PF_ASSIGNRHS and use string_list_dollar_at to make
- sure the positional parameters are separated by spaces
- - string_list_pos_params: if we are expanding `*', make sure we honor
- PFLAGS including PF_ASSIGNRHS and separate the positional parameters
- with the first character of $IFS
- - pos_params_pat_subst,pos_params_modcase: calculate appropriate value
- for PFLAGS depending on match flags value, and pass right value to
- string_list_pos_params (affects @, * expansion)
- - pos_params: now takes PFLAGS as argument to pass to string_list_pos_params;
- changed caller
-
-array.c
- - array_pat_subst,array_modcase: calculate appropriate value for
- PFLAGS depending on match flags value, and pass right value to
- string_list_pos_params (affects @, * subscript expansion)
-
-array.[ch]
- - array_subrange: now takes additional PFLAGS argument to pass to
- string_list_pos_params
-
-assoc.c
- - assoc_pat_subst,assoc_modcase: calculate appropriate value for
- PFLAGS depending on match flags value, and pass right value to
- string_list_pos_params (affects @, * subscript expansion)
- STILL NEED TO DO SUBRANGE
-
-subst.c
- - parameter_brace_substring: add PFLAGS argument to array_subrange
-
-arrayfunc.c
- - array_keys: use string_list_pos_params instead of calling
- string_list_dollar_{star,at} directly.
-
-arrayfunc.[ch]
- - array_keys: now takes a PFLAGS argument, passes to string_list_pos_params
-
-subst.c
- - parameter_brace_expand: add PFLAGS argument to call to array_keys
-
-subst.c
- - parameter_brace_expand_indir: now takes a PFLAGS argument and uses it
- in the call to parameter_brace_expand_word
- - parameter_brace_expand: add PFLAGS argument to call to
- parameter_brace_expand_indir
-
- 3/15
- ----
-subst.c
- - chk_atstar: now takes a PFLAGS parameter, changed callers. Will
- eventually affect whether or not we saw $@
- - chk_atstar: if we see "$*" don't note that we saw $@ unless
- expand_no_split_dollar_star is unset. This is what param_expand
- does
-
- 3/18
- ----
-lib/readline/misc.c
- - rl_get_previous_history: if we are trying to go back from the
- beginning of the history, or if we are trying to go back before the
- beginning of the history, call _rl_free_saved_history_line to just
- get rid of the history line we saved instead of using
- rl_maybe_unsave_line, which modifies the current line buffer.
- Fixes bug reported by lessbug <lessbug@qq.com>
-
- 3/20
- ----
-execute_cmd.c
- - execute_command_internal: save and restore line_number around
- user_subshell setting it to the line number saved in the command.
- Fixes bug reported in https://bugzilla.novell.com/show_bug.cgi?id=1128936
-
- 3/21
- ----
-lib/sh/strtrans.c
- - ansicstr: handle multibyte characters that are not preceded by a
- backslash so we skip over potential escapes in characters whose
- multibyte representation contains a backslash. Fixes issue reported by
- Stephane Chazelas <stephane.chazelas@gmail.com>
-
-subst.c
- - reap_some_procsubs: reap_procsubs, but parameterized to take the
- max index to check -- general function for future use
- - reap_procsubs: now just calls reap_some_procsubs with the right arg
-
-execute_cmd.c
- - execute_command_internal: if we are using /dev/fd for process
- substitution, reap the procsubs at the end of this function (FIFOs
- do it at the beginning -- look at this more closely). Only do it
- for loops to avoid fd exhaustion. Fixes bug reported by
- sunnycemetery@gmail.com
-
- 3/22
- ----
-lib/readline/{rlprivate.h,signals.c}
- - _rl_interrupt_immediately: removed as no longer used
-
-redir.c
- - heredoc_expand: new function, called for both here-documents and
- here-strings, takes care of expanding the document and returns a
- string
- - write_here_document: use heredoc_expand, call write(2) once on the
- entire document; structure is now very similar to write_here_string
-
- 3/23
- ----
-redir.c
- - here_document_to_fd: expand the here document/here string first,
- using heredoc_expand, then decide what to do; remove calls to
- write_here_document/write_here_string in favor of calling
- heredoc_write directly
- - here_document_to_fd: if the expanded document is of zero length,
- just open /dev/null right away and return it -- idea from yash
- - here_document_to_fd: if the length of the expanded document is
- between 1 and PIPESIZE (pipe capacity, computed by builtins/psize.aux
- and stored in builtins/pipesize.h), try to use a pipe: write
- the document to the write end and return the read end. Prompted by a
- report from Daniel Kahn Gillmor <dkg@fifthhorseman.net>
-
-builtins/enable.def
- - dyn_load_builtin: add warning if dynamic builtin with a load function
- is loaded more than once, before running the load function a second
- time. From a suggestion by Stan Marsh <gazelle@xmission.com>
-
- 3/25
- ----
-jobs.[ch]
- - wait_for_any_job: takes a new argument, a struct procstat * that
- gets the PID of the exited job's process leader (the one that
- contributes the status) and the same status we return from the
- function
-
-builtins/wait.def
- - wait_builtin: pass a struct procstat * to wait_for_any_job to get
- the pid of the job's process leader (and the same status the
- function returns). We don't do anything with it yet
-
- 3/28
- ----
-variable.c
- - seedrand: add a couple more variables to the random seed
-
-lib/sh/tmpfile.c
- - sh_mktmpdir: new function, makes a temporary directory using
- mkdtemp if it's available, and generates a filename using
- sh_mktmpname (which uses mktemp, if available) and makes a
- directory with it if not
-
-config-{top,bot}.h
- - set up to use mkdtemp if available
-
-externs.h
- - sh_mktmpdir: extern declaration
- - MT_TEMPFILE: new flag for the tempfile functions; means to use the
- value in the NAMEROOT argument as a template for the mktemp/mkstemp/
- mkdtemp functions. Not used in mainline shell code
-
-examples/loadables/mktemp.c
- - mktemp: new loadable builtin, with BSD options and basic semantics
-
- 3/29
- ----
-builtins/common.c,builtins/printf.def
- - builtin_bind_variable: moved bind_printf_variable to common.c from
- printf.def, renamed to builtin_bind_variable, made global for other
- builtins to use
-
-builtins/read.def
- - bind_read_variable: now uses builtin_bind_variable
-
- 4/4
- ---
-lib/readline/histfile.c
- - history_rename: wrapper function for rename(2) to deal with the Win32
- refusal to rename over an existing file; changed callers. Bug and fix
- from <john.david.donoghue@gmail.com>
-
- 4/8
- ---
-builtins/trap.def
- - display_traps,showtrap: take an additional int argument, that, if
- non-zero, means to print a trap command for a signal whose disposition
- is SIG_DFL
- - trap_builtin: if the -p option is given, and posix mode is enabled,
- pass the `show every signal' flag to display_traps so SIG_DFL signals
- are displayed as `trap -- - <signal>'. From an austin-group
- interpretation (1212) initiated by Robert Elz <kre@bmunnari.oz.au>.
- Tagged for bash-5.1
-
- 4/9
- ---
-jobs.c
- - list_one_job: printing one job counts as notifying the user about
- it, so add a call to cleanup_dead_jobs like in the other job display
- functions. Fixes https://savannah.gnu.org/support/?109667 reported
- by "Brian K. White"
-
- 4/10
- ----
-redir.c
- - HEREDOC_PIPESIZE: define to PIPESIZE if not defined, allow it to be
- specified at build time; used in here_document_to_fd to determine
- whether or not a pipe is used
- - HEREDOC_PIPEMAX: allow build-time definition of the max heredoc size
- that will be written to a pipe
- - here_document_to_fd: if F_GETPIPE_SZ is defined (Linux), ensure that
- the document is shorter than the possibly-dynamic max pipe size,
- and fall back to the tempfile implementation if it is not
- - HEREDOC_PARANOID: if this is defined to a non-zero value,
- here_document_to_fd ensures that both file descriptors opened on
- the temporary file refer to the same file
-
-lib/sh/zmapfd.c
- - zmapfd: increased the default allocation sizes
-
-lib/sh/zcatfd.c
- - zcatfd: increased the default allocation sizes
-
-input.c
- - localbuf: increased the default buffer size for reads
-
- 4/11
- ----
-subst.c
- - cond_expand_word: like expand_word_unsplit, we need to peform
- quoted null character removal on both the LHS and RHS of the
- operator, since we are not performing word splitting. Fixes bug
- reported by Matt Whitlock in https://savannah.gnu.org/support/?109671
-
- 4/12
- ----
-jobs.c
- - wait_for_background_pids: don't bother with the loop that waits for
- and reaps all children of the shell in the case that it's inherited
- some children it doesn't care about. Report from Daniel Kahn Gillmor
- <dkg@fifthhorseman.net>
-
- 4/14
- ----
-subst.c
- - command_substitute: add an unwind-protect to make sure the read end
- of the pipe gets closed in the parent on a SIGINT that interrupts
- the zread. Fixes fast SIGINT fd leak reported by Tycho Kirchner
- <tychokirchner@mail.de>
-
-bashhist.c
- - history_number: if enable_history_list is set (`set -o history' has
- been executed), return the current history number even if we're
- not currently saving commands in the history list
- (remember_on_history == 0). Prompted by report from Paul Wise
- <pabs3@bonedaddy.net>
-
- 4/20
- ----
-doc/bash.1,lib/readline/doc/rluser.texi
- - make it clear that the `bind' builtin can be used to set readline
- keybindings and variables. Suggestion from Dan Jacobson
- <jidanni@jidanni.org>
-
- 4/22
- ----
-lib/glob/glob.h
- - GX_SYMLINK: new internal flag denoting we are processing a symlink to
- a directory. If GX_GLOBSTAR is active, we should not `descend' into
- that directory
-
-lib/glob/glob.c
- - glob_filename: if the directory portion of the pattern is `**'
- (all_starstar), we have globbed all of the directories corresponding
- to that pattern, and we encounter a name that is a symlink to a
- directory, don't descend into it: if the filename portion is null,
- return that name only; if the filename portion is non-null, skip over
- it because we will pick it up when we process the `real' directory.
- This is a better fix for the issue originally reported by
- Murukesh Mohanan <murukesh.mohanan@gmail.com> back in 4/2018 and
- addresses the issue raised by Eli Schwartz <eschwartz@archlinux.org>
- - glob_dir_to_array: slight optimization: if array[i] is the empty
- string, don't bother to strcpy it or check the result for a directory
- for GX_MARKDIRS support
-
- 4/23
- ----
-bashline.c
- - test_for_canon_directory: test a pathname for a directory, but
- expand and canonicalize it first using bash_filename_stat_hook()
- before calling stat(2)
- - bash_progcomp_ignore_filenames: strip non-directories out of a match
- list, but use the function above that canonicalizes the pathname to
- expand the name before testing
- - bash_directory_completion_matches: use bash_progcomp_ignore_filenames
- to strip out non-directories so we get consistent results between
- programmable completion and tab completion. Fixes bug reported by
- Ville Skyttä <ville.skytta@iki.fi>
-
-builtins/read.def
- - read_builtin: allow read -e and read -u N to be used together, by
- calling fdopen(fd) if fd != 0. Save and restore rl_instream. Fixes
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927768
-
- 4/24
- ----
-lib/readline/input.c
- - rl_getc: if readline catches SIGTSTP, the calling application must
- not have had it ignored. Run the signal handler and set the signal
- hook in case the application wants to handle it. Report from
- Robert Elz <kre@bmunnari.oz.au>
-
- 4/26
- ----
-parse.y
- - parser_will_prompt: check and return true if we have consumed the
- entire readline line buffer and will have to go back to readline for
- more input, printing a prompt as a consequence
-
-eval.c
- - parse_command: if parser_will_prompt() returns 0, indicating that we
- still have unconsumed input in the readline line buffer, don't
- execute PROMPT_COMMAND. TENTATIVE fix prompted by report from
- Matteo Landi <matteo@matteolandi.net>
-
-builtins/read.def
- - set_eol_delim: save the old values before changing the bindings for
- RETURN and the delimiter character, in case the delimiter is RETURN.
- Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
- - read_builtin: if the delimiter is '\0' and we are using readline,
- don't terminate the buffer and go back to read another character;
- allow the NULL to pass through and terminate the read.
- Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 5/9
- ---
-bashhist.c
- - bash_delete_histent: decrement history_lines_this_session only if
- remove_history returns a non-null history entry, and return failure
- if it does return a null entry
-
-builtins/history.def
- - history_builtin: when checking the argument to -d, display an error
- if the argument is >= history_base + history_length, since that's
- what history_get and remove_history check. Fixes issue reported by
- <jr@saturn.site>
-
-support/shobj-conf
- - hpux11: change stanza to create shared libraries on later versions of
- HPUX 11. Contributed by Michael Osipov <michael.osipov@siemens.com>
-
-lib/readline/terminal.c
- - _rl_init_terminal_io: assume TGETENT_BROKEN defined means that tgetent
- returns 0 on success, as on HPUX 11. Bug reported by Michael Osipov
- <michael.osipov@siemens.com>
-
-configure.ac
- - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS
-
-execute_cmd.c
- - select_builtin: set executing_builtin around the call to read_builtin
- so we can run traps if the read call is interrupted. From a report
- from Andreas Kusalananda Kähäri <andreas.kahari@abc.se>
-
- 5/12
- ----
-doc/bashref.texi
- - The Restricted Shell: add some language detailing the weaknesses of
- the restricted shell mode in isolation, inspired by a discussion on
- the zsh mailing list
-
- 5/15
- ----
-xmalloc.h
- - malloc: define to sh_malloc to get file and line information from
- malloc (not xmalloc) calls. From a suggestion by achurch@achurch.org
- (Andrew Church)
-
-builtins/evalstring.c
- - parse_and_execute: make sure the parser is not expanding an alias
- before terminating the loop that processes characters in the string.
- Fixes problem with -c commands that end with an alias reported by
- Yu Kou <ckyoog@gmail.com>
- - should_suppress_fork: make sure that we don't try to optimize out a
- fork if the parser is still expanding an alias
-
- 5/16
- ----
-lib/readline/misc.c
- - rl_get_previous_history: if previous_history() returns NULL, only
- free the saved history if we were the ones who saved it; leave any
- existing saved history entry alone. Fixes problem with ^N not working
- at the end of the history if we previously moved back to the start
- of history
-
-lib/readline/histfile.c
- - read_history_range: when reading until FROM lines with a history
- file that has timestamps, make sure to skip to the end of the command
- line corresponding to the FROMth line instead of leaving line_start
- pointing to it, and keep track of the start of the last timestamp in
- last_ts for use by the loop below. Fix for history -n bug reported
- by HIROSE Masaaki <hirose31@gmail.com>
-
-lib/readline/display.c
- - init_line_structures: if, for some reason, _rl_screenwidth ends up
- bigger than the line_size default of 1024 (e.g., gdb's setting the
- terminal width to 0), make sure line_size is at least _rl_screenwidth.
- From a report by Tom de Vries <tdevries@suse.de>
-
- 5/17
- ----
-variables.c
- - brand: split the code into a function that generates a 32-bit value
- given the last value in the sequence (intrand32) and a function that
- returns a 16-bit random number (brand)
- - seedrand: small change in hopes of adding slightly more entropy
- - brand: modify the 16-bit version to XOR the top 16 bits of the 32-bit
- seed with the bottom 16 bits and return the lower 15 bits of that
- result as before. Based on an analysis by Andrew Church
- <achurch+bash@achurch.org>
-
- 5/18
- ----
-variables.c
- - genseed: break code that generates the 32-bit seed for the RNG into
- a separate function; call from seedrand
- - {brand32,sbrand32,seedrand32}: new 32-bit versions of the random
- number generator functions that use the entire 32-bit internal value.
- Prep for systems that don't have /dev/urandom or arc4random()
- - perturb_rand32: shake up the 32-bit LCRNG in subshells
-
- 5/19
- ----
-variables.c
- - get_urandom32: get a 32-bit random number by using the first one of
- these that succeeds: reading from /dev/urandom (if available),
- calling arc4random (if available), and using the internal 32-bit
- RNG (always available)
- - SRANDOM: expand to a 32-bit random number. This is not a LCRNG, so
- the numbers shouldn't have any relationship to previous returned
- values. Assignments are accepted but have no effect on the sequence.
- Not documented yet
-
- 5/20
- ----
-doc/{bash.1,bashref.texi}
- - SRANDOM: document new special variable
-
- 5/22
- ----
-jobs.c
- - find_pid_in_pipeline: abstract some code from find_pipeline to look
- for a PID in a specific pipline passed as an argument
- - find_pipeline: if we have some saved pipeline(s), look there to find
- the PID instead of returning failure. This process could have been
- started from a DEBUG trap that saved the_pipeline. Fixes Linux bug
- reported by Hengyang Zhao <hzhao877502@gmail.com>
-
-builtins/bind.def
- - unbind_keyseq: use rl_function_of_keyseq_len so you can unbind ^@
- (which translates to 0). Fixes bug reported by
- Dennis Williamson <dennistwilliamson@gmail.com>
-
- 5/23
- ----
-lib/readline/display.c
- - rl_redisplay: make sure that the line structures can hold up to
- _rl_screenwidth characters, to support applications like gdb that
- set the screen width to huge values. Report and fix from
- Tom de Vries <tdevries@suse.de>
-
- 5/24
- ----
-lib/readline/bind.c
- - rl_generic_bind: move `ic' from block scope to function scope to
- avoid problems with compilers that destroy and recreate it every
- time through the loop. Report and fix from Adam Richter
- <adamrichter4@gmail.com>
-
- 5/30
- ----
-jobs.c
- - wait_for_job: now takes an additional struct procstat * argument,
- and returns the pid and status of the job's `controlling process'
- to the caller
-
-{jobs,nojobs}.c
- - wait_for_background_pids: take a struct proctstat * argument and fill
- it in with pid and status of the last process to terminate
-
-jobs.h
- - wait_for_job, wait_for_background_pids: add additional argument to
- declaration
-
-builtins/wait.def
- - wait_builtin: set pstat.{pid,status} each time through the pid-or-job
- loop and for wait without arguments
-
- 6/4
- ---
-sig.c
- - termsig_handler: clean up last_procsub_child before exiting, after
- unlinking all FIFOs or closing FDs to all the pipes. Might need to
- send it a SIGTERM too. Fixes issue reported by mwnx <mwnx@gmx.com>
-
-config-top.h
- - CASEMOD_CAPCASE: no longer defined by default
-
- 6/5
- ---
-lib/glob/glob.c
- - glob_always_skip_dot_and_dotdot: new global variable, if set to
- a non-zero value, no glob pattern will ever match `.' or `..'.
- Disabled by default
-
- 6/7
- ---
-bashline.c
- - cmd_xmap: changes to support multiple cmd_xmaps, one per editing
- mode keymap (one each for vi insert and command modes). Changes from
- Koichi Murase <myoga.murase@gmail.com>
-
-execute_cmd.c
- - execute_arith_command: change from expanding the expression using
- expand_words_no_vars to use expand_arith_string, with the accompanying
- conversion from a WORD_LIST into a string. This makes it more
- consistent with other arithmetic expansions. Inspired by a
- discussion begun by Nils Emmerich <nemmerich@ernw.de>
-
- 6/10
- ----
-jobs.c
- - waitchld: since process substitutions are asynchronous, save the
- status of one that exits (that we still know about) in the bgpids
- list
-
- 6/12
- ----
-jobs.c
- - wait_for_background_pids: wait for the last procsub only if it's the
- same as last_asynchronous_pid
-
-bashline.c
- - bash_backward_shellword: changes to behave better when at the
- beginning of the last character on the line and to leave point at
- the beginning of the shellword, like backward-word. Fixes from
- Andrew Gaylard <a.gaylard@gmail.com>
-
- 6/13
- ----
-bashline.c
- - __P: Replaced with PARAMS. First of many
- - bash_transpose_shellwords: transpose-words, but using `shellword'
- word boundaries like shell-forward-word and shell-backward-word.
- Contributed by Andrew Gaylard <a.gaylard@gmail.com>
- - "shell-transpose-words": new name binding for bash_transpose_shellwords
- - bash_readline_initialize: add default bindings for shell-forward-word,
- shell-backward-word, shell-transpose-words, and shell-kill-word.
- Suggested by Andrew Gaylard <a.gaylard@gmail.com>
-
-lib/readline/doc/rluser.texi
- - shell-transpose-words: document
- - {shell-forward-word,shell-backward-word,shell-kill-word,shell-transpose-words}:
- document new default bindings bash now adds
-
-variables.c
- - set_argv0: function to assign argv0 if it's found in the initial
- shell environment. Suggested by Cuong Manh Le
- <coung.manhle.vn@gmail.com>
- - initialize_shell_variables: call set_argv0() as part of shell
- initialization
-
- 6/14
- ----
-execute_cmd.c
- - execute_for_command: make sure to call stupidly_hack_special_variables
- on the index variable each time bind_variable is called on it. If
- someone does something nonsensical like `for OPTIND in ...' we want
- the side effects to happen. Reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
- - execute_select_command: do the same thing for the selection variable
- after calling bind_variable
-
- 6/15
- ----
-builtins/set.def
- - unset_builtin: if neither -f nor -v is supplied, and a NAME cannot
- be a shell variable because it's not a shell identifier, try to
- unset a shell function whether we're in posix mode or not. Suggested
- back in 1/2019 by PePa65 <solusos@passchier.net> and Robert Elz
- <kre@bmunnari.oz.au>
-
-execute_cmd.c
- - execute_simple_command: if this is being executed by the command
- builtin (flags&CMD_COMMAND_BUILTIN), don't bother to print the
- command words if set -x is enabled. From a report by Martijn Dekker
- <martijn@inlv.org> back in 4/2018
-
- 6/19
- ----
-lib/glob/glob.c
- - glob_filename: if we are not being called recursively, and there is
- only a directory name, dequote the passed pathname and see if it
- names an existing directory. If it does, return it; otherwise return
- failure ((char **)&glob_error_return). This is what makes backslash
- escaped-characters in pathnames in shell variables work the same as
- the same value passed directly. From an anonymous comment on
- https://savannah.gnu.org/support/?109629 and a discussion on the
- austin-group list.
-
- 6/20
- ----
-pathexp.c,lib/glob/glob.c
- - posix_glob_backslash: variable to control whether or not pathname
- expansion handles backslashes in the pattern the way Posix says it
- should. Enabled by default
-
-pathexp.h
- - posix_glob_backslash: new extern declaration
-
-builtins/shopt.def
- - posixglob: new option, reflects the value of posix_glob_backslash
-
-general.c
- - posix_vars: add posix_glob_backslash to the table
- - posix_initialize: set posix_glob_backslash to 1 when turning on
- posix mode
-
- 6/21
- ----
-doc/{bash.1,bashref.texi}
- - pathname expansion: note that under some circumstances the shell
- will invoke the matching engine for words with unquoted backslashes
- - posixglob: document the new shell option and its effects
-
- 6/27
- ----
-{config.h.in,configure.ac}
- - setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as
- appropriate
-
-shell.c
- - disable_priv_mode: if we have setres[ug]id, use them over
- set[ug]id, which only set the save user-id and group-id if the
- process is running as root. From Ian Eldred Pudney
- in https://savannah.gnu.org/patch/?9822
-
- 6/28
- ----
-lib/glob/glob.c
- - glob_vector: don't bother trying to read the directory if the filename
- pattern doesn't have any globbing characters except backslash; just
- dequote the pattern and try to lstat(2) it as if there were no
- globbing characters at all. From an austingroup-bugs discussion
- message from Stephane Chazelas <stephane.chazelas@gmail.com>
-
-bashline.c
- - completion_glob_pattern: just call glob_pattern_p and make sure it
- returns 1 (non-backslash globbing characters)
-
-builtins/help.def
- - help_builtin: don't try pattern matching the help topic argument
- unless glob_pattern_p returns 1
-
-pathexp.c
- - unquoted_glob_pattern_p: when in a bracket expression (open > 0),
- don't allow an unquoted slash as part of the bracket expression.
- Report from Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 7/1
- ---
-print_cmd.c
- - print_function_def,named_function_string: make sure to call
- PRINT_DEFERRED_HEREDOCS to finish printing any here documents and
- delimiters before printing the function closing brace. Fixes bug
- reported by Denis McKeon <dmckeon@swcp.com>
-
-execute_cmd.c
- - execute_command_internal: call reap_procsubs at the end of executing
- a group command on systems that have /dev/fd. Fixes bug reported by
- kfm@plushkava.net
-
- 7/3
- ---
-jobs.c
- - waitchld: this is in the potential SIGCHLD path, so don't call
- bgp_add, which can potentially call malloc. The glibc malloc doesn't
- handle that well. Report from howaboutsynergy@protonmail.com
-
- 7/5
- ---
-builtins/bind.def
- - bind_builtin: make sure return_code is >= 0 before returning it.
- Fixes bug with bind -x and invalid key sequences reported by
- bashbug@jonkmans.nl
-
- 7/8
- ---
-doc/{bash.1,bashref.texi}
- - unset: fixed up list of special variables that lose their special
- properties if they are unset. Report and fix from Edward Huff
- <ejhuff@gmail.com>
-
- 7/9
- ---
-test.c
- - unary_test: update the `-N' test to use timespecs and nanosecond
- granularity if available, and use mtime > atime instead of the
- old mtime >= atime. Fixes bug reported by kfm@plushkava.net
-
-lib/sh/strtod.c
- - strtod: make sure to use locale_decpoint() to determine the radix
- character
-
- 7/11
- ----
-lib/sh/utf8.c
- - utf8_mblen: return -2 if the UTF-8 sequence is incomplete
- - utf8_mblen: 4-byte UTF-8 characters start with a byte <= 0xf4; limit
- to 4-byte UTF-8 (since 5- and 6-byte code points were removed in 2003)
-
- 7/12
- ----
-parse.y,shell.h
- - sh_input_line_state_t: if HANDLE_MULTIBYTE is defined, add members
- for saving shell_input_line_property and its associated size; let
- save_line_state and restore_line_state manage it. This means
- restore_line_state no longer calls set_line_mbstate. From a report
- from astian <astian@e-nautia.com>
-
-parse.y
- - set_line_mbstate: if the current locale is not multibyte, just set
- everything in the property array to 1
- - set_line_mbstate: use locale_utf8locale to optimize away calls to
- mbrlen; just use utf8_mblen
-
- 7/14
- ----
-variables.c
- - sv_tz: remake the export env if TZ is being unset. Fixes bug
- reported by Travis Everett <travis.a.everett@gmail.com>
-
-lib/readline/display.c
- - rl_expand_prompt: if the prompt contains embedded newlines, compute
- local_prompt_prefix before local_prompt because each call sets
- local_prompt_newlines, and we want the values computed in the call
- that uses local_prompt to be the ones that we use. Fixes prompt
- wrapping bug reported by Tianon Gravi <admwiggin@gmail.com>
-
- 7/16
- ----
-Makefile.in
- - added a number of dependencies from Vemake Vemake
- <vemakereporter@gmail.com> as reported in
- http://savannah.gnu.org/patch/download.php?file_id=47219
-
- 7/19
- ----
-lib/sh/utf8.c
- - utf8_mblen: changes to handle invalid multibyte sequences better,
- even when N means that the sequence would be too short anyway
-
-arrayfunc.c
- - bind_assoc_var_internal: new convenience function to assign a
- key-value pair to an associative array. It gets the SHELL_VAR * AND
- a HASH_TABLE *, which may or may not correspond to the assoc_cell
- of the variable, and performs the insertion into the hash table.
- Callers take care of passing the right values.
- - bind_assoc_variable: call bind_assoc_var_internal to do the real
- work
- - assign_compound_array_list: change to assign associative array
- key-value pairs into a new hash table (NHASH), so we can still use
- the old value for expansion. We do this in place of clearing out
- the contents of the associative array before performing the expansion
- and assignments. After doing all the assignments into NHASH, we swap
- NHASH into the variable as its value and dispose of the old value.
- Fixes inconsistency reported by Darren 'Tadgy' Austin
- <darren@afterdark.org.uk>
-
- 7/20
- ----
-aclocal.m4
- - include bashansi.h in a bunch of AC_TRY_RUN recipies to avoid
- exit() being flagged as an implicit declaration. Report and fix
- from Chris Yungmann <yungmann.chris@gmail.com>
-
-shell.c
- - set_exit_status: set last_command_exit_value to the argument and make
- sure to set PIPESTATUS from that exit value
-
-shell.h
- - set_exit_status: extern declaration
-
-parse.y
- - report_syntax_error: make sure to set PIPESTATUS if we set
- last_command_exit_value on a syntax error
- - parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS
- when we set last_command_exit_value
-
-sig.c
- - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set
- last_command_exit_value
-
-variables.c
- - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value
-
-arrayfunc.c
- - find_or_make_array_variable,array_expand_index,assign_compound_array_list:
- call set_exit_status to set PIPESTATUS and last_command_exit_value
-
-builtins/evalstring.c
- - parse_and_execute: set PIPESTATUS when we set last_command_exit_value
-
-braces.c
- - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value
-
-eval.c
- - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value
-
-jobs.c
- - make_child,wait_sigint_handler: set PIPESTATUS and last_command_exit_value
- at the same time