From 0edd0a91830376f95f085d0ca3ba82502568fe18 Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Mon, 2 Aug 2021 12:07:40 -0400 Subject: [PATCH] "enable name" when name is not a shell builtin attempts to load it from a shared object --- CWRU/CWRU.chlog | 9202 +--------------------------- CWRU/old-changelogs/CWRU.chlog.v16 | 9177 +++++++++++++++++++++++++++ builtins/enable.def | 53 +- doc/bash.1 | 9 +- doc/bashref.texi | 5 + doc/version.texi | 6 +- examples/loadables/sleep.c | 13 +- execute_cmd.c | 5 +- tests/RUN-ONE-TEST | 2 +- 9 files changed, 9275 insertions(+), 9197 deletions(-) create mode 100644 CWRU/old-changelogs/CWRU.chlog.v16 diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 4765a62a..4421b986 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -1,9183 +1,7 @@ - 9/15/2016 + 12/6/2020 --------- -[bash-4.4 released] - 9/17 - ---- -builtins/common.c - - display_signal_list: if 0 is supplied as an argument to kill -l, - display a signal-out-of-range error. Fixes bug reported by - Martijn Dekker - - 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 - - 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 - -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 - - 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 - - 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 - - - 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 - - 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 - - -builtins/declare.def - - local_builtin: allow `local --help' to work even when not executing - a function. Suggestion from Norm Abramovitz - - 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 - -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 and followup from - Christian Franke - -variables.c - - all_array_variables: include associative arrays, not just indexed - arrays. Reported by Grisha Levit - -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 - - -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 - - -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 - - -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 - -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 - - - 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 and - Valentin Bajrami - -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 - -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 - - 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 - - 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 - - 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 - - - 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 - -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 - - 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 - - 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 - -lib/readline/histfile.c - - chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from - J. Peter Mugaas - -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 - -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 - -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 - - 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 - , 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 - 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 - - 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 - - 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 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 - - 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 - -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 - - 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 - -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 - -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 - - 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 - -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 - -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 - -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 - - - 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 - -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 - - 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 - - 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 - -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 - - 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 - - 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 <\> and - skip to the end of string processing. Fixes oob-read error - reported by Jerzy Kramarz - -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 - - - ANDOR: check s[1] before checking s[2] in case s[1] == end of string. - Fixes oob-read error reported by Jerzy Kramarz - -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 - - -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 - - 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 - - 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 - - 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 - -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 - - -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 - - -tests/execscript - - use $PWD/exec8.sub to protect against someone who has a cd command - in his bashrc. Report from Vladimir Marek - - - 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 - - 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 - -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 - -Makefile.in - - bashbug: use `^' as the sed delimiter instead of `%'; some compilers - use `%' in CFLAGS. Report from Vladimir Marek - - - 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 - - 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 - - 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 character class - -builtins/printf.def - - printf_builtin: when processing the `%q' format, make sure to - backslash quote all 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 - - -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 - -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) - -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 - -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 - - 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 - - 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 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - - 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 - -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 - - 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 - - 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 - - - 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 - -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 - - - 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 - - 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 - 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 , patch was originally - contributed by Geir Hauge - - 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 - - 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 - - -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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - -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 - - 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 - - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore - the nameref attribute. Report from Grisha Levit - - -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 , 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 - -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 - - 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 - - - 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 - - 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 - - - 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 - -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 - -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 - - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - - - 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 - - -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 - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - -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 - - - 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 - -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 - - -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 - - - 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 - -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 - . 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 , - fix from Eduardo Bustamante - - 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 - - 4/25 - ---- -doc/{bash.1,bashref.texi} - - cmdhist: clarify that this option only has an effect if history is - enabled. Suggested by Matthew Braun - - 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 - - -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 - - 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 - - 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 - - - 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 - -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 - - - 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 - , 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 - - -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 - - - 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 before . Fix from Eli Zaretskii - - -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 - - 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 - - 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 - - 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 - - - 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 - -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 - -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 - - 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 - - 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 - -lib/readline/histfile.c - - read_history_range: if the file isn't a regular file, return an - error. Bug report from Eduardo Bustamante , - 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 - - - 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 , 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 - -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 - - 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 . Report from Chi-Hsuan Yen - - 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 - -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 - - 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 - - -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 - - -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 - -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 - - 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 - - -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 - -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 - -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 - - - 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 - 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 - - 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 - - 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 . 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 - - 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 - - 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 - - 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 - - - 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 - -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 - - - 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 - - - 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 - - -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 - - 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 - - - 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 - - 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 - - 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 - -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 , the result of a fuzzing test. Pointer - to place for the fix from Eduardo Bustamante - - 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 - -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 - - 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 - - - 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 - 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 ; fix - from Eduardo Bustamante - - 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 , 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 - - 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 - - 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 - - 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 - -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 - -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 - - 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 - - - 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 - - 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 - -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 - -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 - - 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 - -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 - - 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 - - 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 - - -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 - - -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 - - 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 - - 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 ; 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - 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 - -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 - - 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 - - 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 - - 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 - - - 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 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 - -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 - - 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 - -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 - - 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 - - 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 - - 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 - - -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 - - 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 - - -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 ÐиÑиллов Ðима - - 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 - - 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 - - - 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 - - - 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 - - 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 - - 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 - - -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 - - - 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 - - -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 - - 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - -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 - - -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 - - - 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 - - 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 - - - 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 - - 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 - -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 - - 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 - -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 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 - - 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 - -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 - - 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 - - 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 - -lib/sh/getenv.c - - getenv: check that environ is non-NULL before looking through it. - Report and fix from Keeley Hoek - - 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 - 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 - -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 - - - 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 - - - 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 - -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 - - -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 - - - 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 - - - 7/29 - ---- -subst.c - - get_var_and_type: if VALUE is NULL, check before calling dequote_string. - Report and fix from Grisha Levit - - 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 - - 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 - - - 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 - - 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 - - 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 - - {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 - - 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 - - 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 - - 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 - - -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 - - - 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 - - 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 - - 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 - -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 - -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 - -builtins/fc.def,execute_cmd.c - - fixed some missing free()s uncovered by coverity. Report from - Siteshwar Vashisht - -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 - - 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 - -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 - - - 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 - - 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 - -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 , originally from Eli Zaretskii - - - 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 - - - 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 - -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 - - 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 - - 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 - - - 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 - - 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 - - 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 - - - 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 - ; fix inspired by Martijn Dekker - - - 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 - - - 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 - - - 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 - - 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 - -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 - - -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 - - - 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 - -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 - - -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 - - -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 - - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - -[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 - -expr.c - - expr_skipsubscript: fix return type. Report and fix from - Andreas Schwab - - 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 - - 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 - - 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 - -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 - - 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 - - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - - -examples/loadables/{basename,dirname}.c - - dirname_builtin: skip over any `--' ending the options. Report from - Peng Yu - - 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 - - - 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 - -[bash-5.0 frozen] - -[bash-5.0 released] - - 1/6/2019 - -------- - -examples/loadables/basename.c - - make sure to include bashgetopt.h. Reported by Angel - - -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 - -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 - - 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 - -builtins/declare.def - - declare_internal: don't let `declare -f +f' turn off the function - attribute. Fix from Grisha Levit - - declare_internal: reject attempts to add the -A or -a attributes - to functions. Report from Grisha Levit - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - -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 - - 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 - - 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 - -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 - -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 - -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 - -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 - - 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 - - - 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 - - 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 - -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 - - 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 - - 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 - - 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 - -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 - - rl_bind_key: make sure the KEY argument is not larger than the - largest unsigned character. - Report and fix from Koichi Murase - - 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 - - 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 - -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 - - - 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 - - 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 - - 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 - - - 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 - -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 - - - 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 - -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 - - - 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 - - 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 - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - - - 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - -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 - - 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 - - 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 -- - '. From an austin-group - interpretation (1212) initiated by Robert Elz . - 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 - - - 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 - - -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 - - - 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 - - - 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 back in 4/2018 and - addresses the issue raised by Eli Schwartz - - 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ä - -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 - - 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 - -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 - - 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 - - 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 - - -support/shobj-conf - - hpux11: change stanza to create shared libraries on later versions of - HPUX 11. Contributed by Michael Osipov - -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 - - -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 - - 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 - - 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 - -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 - - 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 - - - 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 - -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 - - 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 - - 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 - - - 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 - -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 - -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 - - 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 - - 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 - - "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 - -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 - - - 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 - - - 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 and Robert Elz - - -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 - 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 - -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 - - 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 - -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 - - - 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 - -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 - -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 - - 7/16 - ---- -Makefile.in - - added a number of dependencies from Vemake Vemake - 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 - - - 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 - -shell.c - - set_exit_status: set last_command_exit_value to the argument and make - sure to set PIPESTATUS from that exit value - -shell.h - - set_exit_status: extern declaration - -parse.y - - report_syntax_error: make sure to set PIPESTATUS if we set - last_command_exit_value on a syntax error - - parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS - when we set last_command_exit_value - -sig.c - - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set - last_command_exit_value - -variables.c - - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value - -arrayfunc.c - - find_or_make_array_variable,array_expand_index,assign_compound_array_list: - call set_exit_status to set PIPESTATUS and last_command_exit_value - -builtins/evalstring.c - - parse_and_execute: set PIPESTATUS when we set last_command_exit_value - -braces.c - - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value - -eval.c - - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value - -make_cmd.c - - set PIPESTATUS when setting $? due to syntax errors or constructs - not being available - -expr.c - - expr_streval: set PIPESTATUS when setting $? due to syntax errors - -subst.c - - extract_delimited_string,extract_dollar_brace_string,do_assignment_internal, - call_expand_word_internal,array_length_reference,param_expand, - parameter_brace_expand_word,parameter_brace_expand_rhs, - parameter_brace_expand_error,parameter_brace_expand,err_unboundvar: - set PIPESTATUS when setting last_command_exit_value on error - conditions - -redir.c - - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value - on error conditions - -subst.c - - match_upattern,match_wpattern: if the match length is greater than the - string length, short-circuit and return failure. Fixes bug - reported by Eduardo Bustamante - - 7/22 - ---- -lib/glob/sm_loop.c - - BRACKMATCH: if we think we've matched, tighten up the rules for - the closing right bracket in the bracket expression to be correct - in the presence of invalid character classes, collating symbols, - and equivalence classes. If they're invalid, they shouldn't require - additional right brackets to close them - - 7/25 - ---- -builtins/colon.def - - add the right includes so colon_builtin and false_builtin can take - a WORD_LIST * argument like the prototype says they do - - 7/29 - ---- -lib/readline/kill.c - - _rl_read_bracketed_paste_prefix: read the character prefix that - indicates a pasted string in bracketed paste mode. If we don't - read a valid bracketed paste prefix, push the other characters - back onto the input stack with _rl_unget_char - - _rl_bracketed_read_key: handle reading pasted input when bracketed - paste mode is enabled, including reading multibyte characters; push - anything beyond a single byte back onto the input stack where it - can be read by _rl_read_mbstring or subsequent input - - _rl_bracketed_read_mbstring: handle reading pasted input in bracketed - paste mode, using _rl_bracketed_read_key to get the pasted text, - then call _rl_read_mbstring to get the rest of any multibyte char - - -lib/readline/vi_mode.c - - _rl_vi_callback_getchar: call _rl_bracketed_read_mbstring to handle - bracketed paste mode input. Fixes issue with vi-change-char reported - by - - rl_vi_domove_getchar: just call _rl_bracketed_read_key and return - the result -- we're not interested in multibyte-character input here - yet - - rl_vi_replace: bind BRACK_PASTE_PREF key sequence if bracketed paste - mode has been enabled - - _rl_overstrike_bracketed_paste: key binding function for the bracketed - paste prefix key sequence in overwrite mode; reads the pasted text - and uses rl_vi_overstrike to add each character in overwrite mode. - Fixes issue reported by - - 7/31 - ---- -lib/readline/input.c - - _rl_read_mbchar: the first time through the loop (mb_len == 0), call - _rl_bracketed_read_key to process any bracketed paste characters - -lib/readline/text.c - - _rl_char_search: use _rl_bracketed_read_key in the non-multibyte - character case - -lib/readline/misc.c - - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key - -subst.c - - list_string: if string_extract_verbatim returns something, just make - a WORD_DESC * and add current_word directly to it, noting that we - don't want to free current_word (free_word = 0) - - string_extract_verbatim: if the separator string is the empty - string, don't bother with the loop -- just savestring the string, - update *sindex, and return the copy - - read_comsub: make the string we use to save the output from the pipe - 512 bytes instead of 128 (same size as the buffer used to read from - the pipe); fewer calls to xrealloc in the worst case - - parameter_brace_expand_length: optimize the common case (non-dynamic - scalar variable without `set -u' in effect) and just call MB_STRLEN - on the variable value in that case. From a report from - Alkis Georgopoulos - - 8/13 - ---- -execute_cmd.c - - execute_subshell_builtin_or_function: call subshell_exit() instead of - sh_exit() or exit() so the exit trap gets run. Fixes issue reported - in https://savannah.gnu.org/support/?109840 - - replace __P with PARAMS - -lib/readline/colors.c - - _rl_print_color_indicator: eliminate one use of S_ISLNK. - Report and fix from Christian Biesinger - - 8/22 - ---- -variables.c - - push_posix_temp_var: change to use bind_variable and modify variables - at the current local scope or create and modify variables at the - global scope, as if a standalone assignment statement had been - executed. This restores some bash-4.4 backwards compatibility with - respect to posix-mode assignment statements preceding special - builtins and shell functions. The bash-5.0 behavior, while perhaps - defensible, caused too many compatibility problems. Originally - prompted by several discussions with Martijn Dekker; the current - incarnation and tests based on a report to Debian BTS from - Thorsten Glaser - - 8/26 - ---- -shell.c,bashhist.c - - __P -> PARAMS - -shell.c - - set_option_defaults,reset_option_defaults: before calling - list_minus_o_options at invocation, call set_option_defaults to - set the options that are initialized to -1 to either 1 or 0, as - appropriate; then call reset_option_defaults to set them back to -1 - after list_minus_o_options returns - - init_interactive: if enable_history_list == -1, set it to 1, then - set remember_on_history to enable_history_list. Fixes bug reported - by Alex Kerzner - - init_noninteractive: if enable_history_list == -1, set it to 0, let - bash_history_reinit take care of setting remember_on_history - - init_interactive_script: if enable_history_list == -1, set it to 1, - then set remember_on_history to enable_history_list - -bashhist.c - - enable_history_list: initialize to -1 to note when it gets changed - by -o history or +o history at invocation - - 8/28 - ---- -lib/readline/terminal.c - - TGETENT_SUCCESS, TGETFLAG_SUCCESS: defines to represent successful - returns from tgetent and tgetflag, since HPUX manages to get them - wrong. New patch from Osipov, Michael - - TGETFLAG: new define, make sure tgetflag returns TGETENT_SUCCESS - - _rl_init_terminal_io: use TGETENT_SUCCESS and TGETFLAG - -configure.ac - - hpux: make sure to define TGETFLAG_BROKEN - - 8/30 - ---- -tests - - add copyright notices to all scripts longer than 15 lines at the - request of the FSF - - 9/1 - --- -lib/readline/complete.c - - _rl_complete_internal: move logic that checks whether the last - completion attempt failed and the current attempt returned a single - match and insert the single completion here. A better implementation - of Richard Stallman's suggestion of 2/23. - - 9/3 - --- -bashline.c - - edit_and_execute_command: reset the readahead token after calling - restore_parser_state, in case some call to reset_parser set - token_to_read. Fixes bug reported by null - - 9/9 - --- -execute_cmd.c - - execute_command_internal: if we're executing a command list - (executing_list != 0), save the old fifo list and close any new - FIFOs that the command opens. Fixes bug reported by - Kamil Cukrowski - - 9/10 - ---- -aclocal.m4,m4/intdiv0.m4 - - make sure `exit' is used consistently with included - - make sure `main' isn't declared to implicitly return int - - include before using ulimit - - include before testing string functions - - fixes from Florian Weimer - -configure.ac - - setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL, - which always fails - -shell.c - - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of - the HAVE_DECL variants, which always fail configure tests - -m4/intl.m4 - - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in - newer gettext releases - - 9/16 - ---- -builtins/help.def - - help_builtin: make the closing quote printed after the argument list - for a glob pattern argument a translatable string to ease translation - for certain languages. Report from Roland Illig - -builtins/{reserved,complete,exec,getopts}.def - - minor typographical fixes from Roland Illig - -siglist.c - - include general.h for INT_STRLEN_BOUND - - initialize_siglist: use the same string for the strlen and xmalloc - for the message about an unknown signal number; use INT_STRLEN_BOUND - instead of a fixed 10 for the number - -builtins/getopts.def,doc/{bash.1,bashref.texi} - - getopts: minor changes to the description of the effect of supplying - additional arguments. Report from Roland Illig - - 9/17 - ---- -jobs.[ch] - - save_proc_status: external interface to bgp_add, takes care of - blocking and unblocking SIGCHLD - - __P -> PARAMS - - 9/18 - ---- -jobs.[ch] - - procsub_{free,add,search,delete,waitpid,waitall,clear,prune}: new - functions to keep track of the list of active process substitutions - and their statuses. Implementation is currently a singly-linked list - of PROCESS *, so functions that expect a PROCESS * to manipulate - continue to work. Inspired by report from leo.dalecki@ntymail.com - - find_pipeline,cleanup_dead_jobs,wait_for_background_pids: call new - procsub_* functions to manage procsub list; don't call the functions - in subst.c any more - -subst.c - - process_substitute: call procsub_add with the PROCESS * returned - from make_child; let the functions in jobs.c manage the list. - waitchld continues to set the pid field in the fifo list as a hint - that a particular fd or FIFO is no longer used and can be reaped - - process_substitute: let the child process clear out any existing - procsub pid list - - wait_procsubs: no longer compiled in - -sig.c - - termsig_handler: replace discard_last_procsub_child with call to - procsub_clear - -lib/readline/display.c - - init_line_structures: fix a problem which results in references to - uninitialized memory when gdb sets the number of columns to 32767 - (their `unlimited'). Modification of change from 5/23. Report and - fix from Andrew Burgess - - 9/19 - ---- -parse.y - - xparse_dolparen: after calling parse_string to consume input, make - sure to reset the parser (reset_parser()) before restoring the EOF - token and the parser_state variable. Fixes issue with nested traps - running command substitutions in command lines with command - substitutions reported by Travis Everett - - 9/20 - ---- -doc/{bashref.texi,bash.1} - - fixed a typo in the example for the =~ operator: the ? should follow - the (a), not precede it. Report from hk - - some changes to the text describing regular expression matching for - the =~ operator - - 9/25 - ---- -general.c,builtins/shopt.def - - posix_glob_backslash: remove references to this variable and the - `posixglob' shell option - -doc/{bash.1,bashref.texi} - - remove references to the `posixglob' shell option - - 9/26 - ---- -{jobs,nojobs}.c - - DEFAULT_MAX_CHILD: bump this up to 4096 - - set_maxchild: set lmaxchild to MAX_CHILD_MAX if getmaxchild returns - -1 without changing errno (assume that sysconf returns -1 meaning - unlimited) - - initialize_job_control: call set_maxchild instead of inline code - - mark_dead_jobs_as_notified: call set_maxchild to set js.c_childmax - if it hasn't been set yet - - 9/30 - ---- -lib/glob/xmbsrtowcs.c - - xwcsrtombs: implementation of wcsrtombs from gnulib, modified to - treat invalid wide characters (or wide characters that can't be - converted to multibyte character sequences) as bytes. Should be - used only in unusual circumstances where wcsrtombs fails. - -lib/glob/glob.c - - wdequote_pathname: if wcsrtombs fails to convert the dequoted wide - character pathname back to a sequence of multibyte characters, call - xwcsrtombs to try to treat the invalid wide characters as bytes -- - the call to xdupmbstowcs treats bytes that don't convert to wide - characters as just bytes, which kind of causes this problem in the - first place. Inspired by report from Geoff Kuenning - -lib/readline/complete.c - - compute_lcd_of_matches: use the case-folding code (which performs - character-by-character checking and compares invalid multibyte - sequences as bytes) instead of the old case-sensitive code (which - used _rl_compare_chars), converting characters to lowercase as - needed. Fixes bug with invalid sequences in common filename prefixes - reported by Grisha Levit - - 10/1 - ---- -builtins/shopt.def - - reset_shopt_options: add in resets for some missing shopt options. - Report and fix from Grisha Levit - -execute_cmd.c - - execute_command_internal: make sure a failed attempt to define a - shell function causes the shell to exit if -e is enabled. Report - from Andreas Kusalananda Kähäri - - execute_command_internal: combine cm_function_def, cm_arith, and - cm_cond cases into one switch case, since the code is virtually - identical across all three - - 10/3 - ---- -pathexp.[ch],lib/glob/glob.c,lib/glob/glob_loop.c - - remove all references to posix_glob_backslash in preparation for - implementing austin group interpretation #1234 - -pathexp.c - - unquoted_glob_pattern_p: revert to bash-4.4 behavior of returning 1 - only if there is an unquoted `*', `?', or bracket expression, as - per austin group interpretation #1234 - -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: revert to bash-4.4 behavior of returning 1 - only if there is an unquoted `*', `?', or bracket expression, as - per austin group interpretation #1234 - - 10/4 - ---- -variables.c - - assign_seconds,get_seconds: use the tv_sec value returned from - gettimeofday() instead of time() to get a better approximation of - the number of seconds since the epoch for future calculations. - From a report by Stephane Chazelas - -pathexp.[ch],{bashline,subst}.c - - shell_glob_filename: now takes an additional flags argument to pass - to quote_string_for_globbing - - 10/6 - ---- -subst.c - - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC - because quote removal hasn't been performed yet - - 10/7 - ---- -pathexp.c - - quote_string_for_globbing: if we have an unquoted backslash followed - by a CTLESC-quoted character (not CTLESC-CTLESC), just perform the - usual CTLESC-to-backslash conversion instead of skipping over it. - Fixes issue raised in austin-group discussion about globbing by - Geoff Clare (austin-group issue 1234), though - it's still inherently ambiguous - - 10/8 - ---- -include/shmbutil.h - - xwcsrtombs: extern declaration, to match other functions in that file - -lib/glob/glob.c - - wcdequote_pathname: new function, actual backslash quote removal code - from wdequote_pathname; wdequote_pathname calls it - -lib/glob/glob.c - - {udequote,wcdequote}_pathname: now public void functions - -lib/glob/smatch.c - - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or - wcdequote_pathname - -lib/glob/sm_loop.c - - DEQUOTE_PATHNAME: appropriate extern declaration - - BRACKMATCH: call DEQUOTE_PATHNAME to dequote a character class name - in a bracket expression. This is the result of a discussion on the - austin-group mailing list, from Geoff Clare and - Robert Elz - - 10/10 - ----- -execute_cmd.[ch] - - async_redirect_stdin: now a global function - -subst.c - - process_substitute: call async_redirect_stdin in the child to keep - it from having stdin connected to the terminal, since it's not a - job control process - - 10/11 - ----- -subst.c - - process_substitute: in the child process, set interactive = 0, since - an asynchronous process substitution process is not interactive. - Seems to fix issue reported by Grisha Levit - -lib/sh/shmatch.c - - sh_regmatch: implement a suggestion from Grisha Levit - and don't allow nocaseglob to enable case- - insensitive regexp matching. It hasn't been documented that way - in years - - 10/30 - ----- -bashhist.c - - bash_add_history: fix a couple of problems with adding extra blank - lines to history entries containing here-documents. Fixes bug - reported by Oguz - -lib/sh/shmatch.c - - BASH_REMATCH: no longer set to readonly. From a suggestion from - Rocky Bernstein - -doc/{bash.1,bashref.texi} - - BASH_REMATCH: document that it's no longer set to readonly - -subst.c - - getpattern: since expand_string_for_pat leaves the pattern quoted, - we need to remove quoted nulls before running the string through - string_list (and then quote_string_for_globbing, since QGLOB_CVTNULL - only handles pat[0] == CTLNUL). Fixes bug reported by Oguz - - - 11/4 - ---- -configure.ac,config.h.in - - AC_HEADER_MAJOR: look for `major' and `minor' in various header files - and define MAJOR_IN_MAKEDEV or MAJOR_IN_SYSMACROS as appropriate. - From a patch from Eli Schwartz - -examples/loadables/finfo.c - - include and as appropriate for - definitions of major/minor - - 11/6 - ---- -redir.c - - heredoc_expand: if we are expanding the WORD in a here-string, use - expand_assignment_string_to_string so the expansions are consistent - in contexts where word splitting is not performed. From a bug report - by Robin A. Meade - - 11/7 - ---- -parse.y - - xparse_dolparen: if the command substitution is incomplete or doesn't - end in `)', print an error message instead of allowing EOS to - terminate the comsub. From a bug report from - Oguz - - 11/11 - ----- -lib/sh/unicode.c - - u32toutf8: fix a typo that assigned the wrong value to the first - byte of a six-byte UTF-8 character. Report and fix from - István Pásztor - - 11/15 - ----- -doc/bash.1,lib/readline/doc/{history.3,hsuser.texi} - - quick substitution: make it clear that ^s1^s2^ is equivalent to - !!:s^s1^s2^, since that's the internal transformation we perform. - Reported by Jim Monte - - note that the `q' and `x' modifiers are mutually exclusive; last - one wins. Reported by Jim Monte - - note that the `G' modifier can work with `&' as well as `s'. - Reported by Jim Monte - - note that a word designator of `-' is equivalent to `0-'. - Reported by Jim Monte - - note that a missing `new' in a substitution modifier causes - instances of `old' to be deleted - -lib/readline/histexpand.c - - history_expand_internal: make multiple :p modifiers work to suppress - execution. Reported by Jim Monte - - get_history_word_specifier: fix so a `^' word designator works as - the second part of a range. - Reported by Jim Monte - - hist_error: make sure we don't blindly copy a null character into - the error string (e.g., if there is a missing word designator - following `:'). Reported by Jim Monte - - get_history_event: if the history event specifier (!) is followed - immediately by a `-' and a non-digit (e.g. !-a), make sure the - is - treated as part of a search string instead of making it an offset of - 0. Reported by Jim Monte - - 11/19 - ----- -lib/readline/{colors,complete,histfile,input}.c,support/shobj-conf - - fixes to make readline compile on the latest HPE Nonstop (Tandem) - releases. From Randall S. Becker - -subst.c - - pat_subst: if we have a null match, make sure we advance by one - character, not one byte. Bug reported by Chris Carlen - - - 11/22 - ----- -jobs.[ch],nojobs.c,builtins/jobs.def - - get_job_by_pid: now takes a PROCESS ** third argument; if non-null, - it gets a pointer to the PROCESS struct corresponding to the PID - argument. A convenience, not used by any caller yet - -builtins/wait.def - - interrupt_immediately: remove any uses, no longer used anywheren - -variables.c - - check_unbind_variable: return -2 if the variable name is readonly - (change) or non-unsettable (new) to differentiate the return value - from -1 from makunbound (which means variable not found) - -builtins/common.[ch] - - builtin_unbind_variable: identical to check_unbind_variable but calls - builtin_error; for use by builtin commands - -buitins/wait.def - - wait_builtin: now has -p VARNAME option, which takes the pid - returned by `wait -n' or wait without arguments and assigns it to - VARNAME, unsetting VARNAME first. Requested by Robert Elz - after a similar feature in netbsd sh (not - completely compatible yet) - -doc/{bash.1,bashref.texi} - - wait: document new -p option - - 11/25 - ----- -lib/readline/display.c - - rl_redisplay: auto-set horizontal scrolling if the terminal has - only one line; disable it if we auto-set it if the terminal grows - to more than one line. Fix from Sören Tempel - - -lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 - - horizontal-scroll-mode: document auto-setting behavior - -builtins/set.def - - set_posix_mode: make setting posix mode when it's already set, or - unsetting it when it's not set, a no-op. Inspired by a report - from Ulrich Mueller - - 11/26 - ----- -doc/{bash.1,bashref.texi} - - functions: clarify that when in default mode, function names are not - limited to shell identifiers. - Suggested by Reuti - - 11/27 - ----- -lib/readline/display.c - - _rl_optimize_redisplay: tell the redisplay routines to not worry - about calculating differences between the lines and just draw the - new one. Right now, it just sets the _rl_quick_redisplay flag - - rl_redisplay: if _rl_quick_redisplay is set, just draw NEW onto - the screen at column 0 with a dumb update and clear the rest of - the line. Intended to be used when the caller knows the new line is - sufficiently different from the old one (e.g., when drawing the - i-search prompt for the first time) that it doesn't pay off to do - the calculations. As a side effect, fixes the bug reported by - ÐлекÑей Шилин - -lib/readline/isearch.c - - rl_display_search: if there isn't a search string, assume this is - the first time this is called and call _rl_optimize_redisplay to - give the redisplay code a hint - - 12/2 - ---- -builtins/wait.def - - wait_builtin: allow argument to -p to be a valid array subscript - - 12/3 - ---- -lib/readline/isearch.c - - _rl_isearch_fini: add call to _rl_optimize_redisplay because we are - switching the prompt back again and it's safer to redraw everything - (even though part of the line is the same) to deal with differences - in the prompt strings. Fixes additional problem reported by - ÐлекÑей Шилин - -lib/readline/display.c - - update_line: quick redisplay no longer sets cpos_adjusted before - the dumb update - - update_line: adjust _rl_last_c_pos in the case of a dumb update if we - are redrawing the prompt that includes invisible characters, since - _rl_col_width does not. We adjust by the count of invisible chars in - the first line of the prompt - - update_line: make sure to clear the rest of the line if it looks like - the number of visible characters on the new line is less than the - number of visible characters on the current line; the old calculation - does that just for the number of bytes (which is also useful) - - 12/4 - ---- -lib/readline/display.c - - rl_redisplay: if we are changing from one line to multiple lines, - don't try quick redisplay - - update_line: changes to quick redisplay to take advantage of knowing - the physical length of the prompt to avoid having to compute column - widths of the prompt string again; moved code to call clear screen - to the quick update section; no longer performs `goto dumb_update' - - update_line: try to take advantage of prompt_physical_chars when we - know we have written the prompt string (several places) to set - _rl_last_c_pos and calculate column widths - - update_line: if the spot where the old and new lines are the same is - before the end of the prompt string, adjust NLS and OLS so we write - the entire prompt string (as long as it's all on one line) and can - take advantage of already knowing prompt_physical_chars so we don't - have to compute column widths - - update_line: when copying chars from first diff to last match, adjust - _rl_last_c_pos by prompt_invis_chars_first_line, not wrap offset, - since we are on the first line, and only do this if we inserted more - bytes than wrap_offset (old code checked _rl_last_c_pos, which is - wrong in the presence of multibyte characters) - - 12/5 - ---- -lib/readline/display.c - - ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos - is changed - - 12/12 - ----- -lib/readline/isearch.c - - _rl_isearch_dispatch: check for multibyte characters mapped to one - of the editing functions we treat specially to modify the search - string - - 12/13 - ----- -support/shobj-conf - - FreeBSD and Dragonfly are ELF-only and can use the same code as - Linux, so add those to the linux stanza and remove the old FreeBSD - version-specific sections. Report and fix from Baptiste Daroussin - - -bashline.[ch] - - bash_execute_unix_command: no longer static, available for other - parts of the shell to use - -bashline.c - - unbind_unix_command: take a key sequence as an argument, and unbind - it in the appropriate unix command keymap - -builtins/bind.def - - unbind_keyseq: if we are unbinding a key sequence bound to - bash_execute_unix_command, which means it was added by `bind -x', - call unbind_unix_command() to remove it from the appropriate unix - command keymap. Fixes issue originally raised by - Koichi Murase and recently by - Å imon Let - - bind_builtin: check the number of bindings to bash_execute_unix_command - before and after a call to rl_parse_and_bind and if there are fewer - after binding, we know that the bind has re-bound one of the key - sequences that was bound to execute a shell command. We unbind any - key sequences from the list before the call to rl_parse_and_bind that - don't appear in the list after the call using unbind_unix_command - - 12/19 - ----- -include/posixstat.h - - added some definitions for MinGW. Report and patch from - Eli Zaretskii - - 12/20 - ----- -lib/readline/display.c - - update_line: when wrapping lines containing multibyte characters at - the wrap point, and the number of screen positions consumed by the - first character on the new line isn't the same as the old line, - make sure we set OE before the `goto dumb_update;' since clearing - the rest of the line may use it. Tentative fix for bug reported by - Kirill Chibisov - -lib/readline/signals.c - - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code, - like _rl_handle_signal does - - 12/26 - ----- -lib/sh/stringvec.c - - strvec_posixcmp: new function that conforms to posix requirement for - sorting globs: perform a bytewise comparison if the two strings - collate equally. Posix interp 963 and 1070 - - strvec_sort: take a new flags argument, if non-zero use the posix - string comparison function - -pathexp.c - - shell_glob_filename: call strvec_sort with the flag value to be - posix conformant - -lib/sh/stringlist.c - - strvec_sort: change callers - - 12/29 - ----- -sig.c - - throw_to_top_level: set running_trap to 0 after calling run_trap_cleanup. - This avoids spurious (in non-release versions) warnings from - run_pending_traps the next time a trap handler for that signal - runs. Bug report from Martijn Dekker - - 1/14/2020 - --------- -bashline.c - - find_cmd_start: don't treat the open brace in brace expansion as a - command start character; only treat open brace specially if it can - be a reserved word. Fixes bug reported back in October, 2019 in - https://savannah.gnu.org/support/index.php?110063 - - 1/15 - ---- -lib/readline/readline.c - - _rl_dispatch_subseq,_rl_subseq_result: if we push back a character - with _rl_unget_char or otherwise go back up the chain without a - sequence match, make sure we back up in rl_executing_keyseq. - Report and fix from Koichi Murase - -builtins/bind.def - - unbind_keyseq: if we unbind something that ends up pointing to a - shadow keymap, restore the ANYOTHERKEY binding that we used when - binding it. - Report and fix from Koichi Murase - -bashline.c - - bash_execute_unix_command: if we walked cmd_xmap for rl_executing_keyseq - and ended up pointing to a keymap (type == ISKMAP) we want the - binding for ANYOTHERKEY instead. - Report and fix from Koichi Murase - -lib/readline/bind.c - - rl_bind_key: if we're trying to bind a key sequence containing '\0' - using the old-style binding syntax (C-SPC), make sure we quote the - NULL so it will make it through rl_translate_keyseq(). - Report and fix from Koichi Murase - - rl_bind_key: if we're overwriting a binding for a macro, make sure to - free the old macro value. - Report and fix from Koichi Murase - - rl_generic_bind: if we're overwriting a macro saved to ANYOTHERKEY in - a shadow keymap created by rl_generic_bind, make sure to free the - macro data. - Report and fix from Koichi Murase - -trap.c - - run_pending_traps: save and restore the value of running_trap around - cycle through pending signals so recursive trap handler calls don't - set running_trap to 0 - - _run_trap_internal: allow some signals the shell treats specially - (e.g., SIGINT) to run recursive handlers - - _run_trap_internal: don't turn off SIG_INPROGRESS flag if it was on - for this signal when _run_trap_internal was called - - _run_trap_internal: save and restore the value of running_trap around - running the trap handler, except for SIGCHLD. Fixes bug reported by - Martijn Dekker - - 1/16 - ---- -general.c - - posix_initialize: if turning posix mode off, restore settings from - any saved set, if one exists, instead of setting a default environment - - 1/17 - ---- -parse.y,subst.c - - process_substitution: now available in POSIX mode. Most recently - requested by Martijn Dekker ; requested several - times in the past - -doc/bashref.texi - - posix mode: remove restriction that posix mode is not available - -lib/readline/vi_mode.c - - rl_domove_motion_callback: make sure to extend rl_line_buffer so it - can hold the dummy blank character we're appending. From a fuzzing - report by Tillmann Osswald - - vi_yank_dispatch: after we do an undo, make sure to fix point to be - less than the (new) rl_end - -lib/readline/text.c - - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on - invalid multibyte sequences - - 1/18 - ---- -test.c - - for the `-v' operator, use a clever trick from Martijn Dekker and - just test whether N is between 0 and $#. - - 1/21 - ---- -lib/readline/text.c - - rl_change_case: fix argument to rl_extend_line_buffer; make sure to - reset s and e after call in case rl_line_buffer was reallocated - -lib/readline/vi_mode.c - - _rl_vi_save_replace: if start ends up being less than zero, make - sure we don't read before the start of rl_line_buffer - - rl_vi_overstrike_kill_line,rl_vi_overstrike_kill_word: replacement - functions for ^U and ^W in vi overstrike mode, to keep right value - for vi_replace_count. - - rl_vi_overstrike_yank: similar for ^Y and rl_yank - - 1/22 - ---- -lib/readline/display.c - - update_line: if we're trying to wrap lines on an autowrap terminal, - punt and do a dumb update if the number of bytes in the first char - on the new line is greater than the number of bytes in the first char - of the old line. There's no guarantee we'll be able to extend the - old line buffer enough to accommodate the new bytes - - update_line: try to avoid some operations when wrapping lines if the - number of bytes in the first characters of the old and new lines is - the same - - update_line: when updating vis_lbreaks after fixing up the lines when - wrapping, make sure we don't exceed an index of _rl_vis_botlin when - updating the line break offsets - -lib/readline/text.c - - rl_delete_text: if deleting text leaves the mark past rl_end, adjust - it to rl_end - -lib/readline/vi_mode.c - - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting - rl_point to rl_mark - - 1/23 - ---- -lib/readline/kill.c - - rl_kill_region,region_kill_internal: call _rl_fix_point - -lib/readline/text.c,lib/readline/rlprivate.h - - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end - - 1/24 - ---- -lib/readline/bind.c - - rl_translate_keyseq: rework how key sequences are translated with - the intent of normalizing backslash treatment. Since the current - behavior of, e.g., \C-\\, is inconsistent, this change chooses to - effectively treat and display \\ as \\ instead of \C-\. This is not - completely backwards compatible, but it seems like the most reasonable - choice. This allows things like \M-\a but is not compatible with - pre-bash-4.4 (readline 7.0) handling of \C-\, which is now treated - like \C-\0. If that proves to be a problem, we can add code to - understand \C-\ as equivalent to \C-\\. Since attempting to bind - "\C-\" has generated an error for a long time, it doesn't seem like - it will be too much of a problem. - Fixes from Koichi Murase - - rl_invoking_keyseqs_in_map: make sure to consistently output - backslash as `\\' instead of producing `\C-\' - Fixes from Koichi Murase - - 1/29 - ---- -bashline.c - - readline_get_char_offset: translate a readline buffer offset - (rl_point, rl_mark, rl_end) into a number of (possibly multibyte) - characters - - readline_set_char_offset: translate a number of (possibly multibyte) - characters into a buffer offset in rl_line_buffer. Uses a private - readline function to do it, which is bad - - bash_execute_unix_command: use readline_{get,set}_char_offset to - translate the rl_point to a character offset - - bash_execute_unix_command: bind READLINE_MARK variable, exposing - the value of rl_mark to `bind -x' functions - -doc/{bash.1,bashref.texi} - - READLINE_MARK: document new variable set by the shell - - 1/31 - ---- -examples/loadables/accept.c - - accept: new loadable builtin that will accept a TCP connection on a - specified port. Inspired by Stan Marsh - - 2/1 - --- -lib/readline/histfile.c - - history_do_write,history_truncate_file: translate the return value rv - to errno when histfile_restore returns -1 (e.g., if rename() fails). - Report and fix from A - - 2/3 - --- -lib/sh/ufuncs.c - - fsleep: if pselect/select is interrupted by a signal, return -1 and - let the caller deal with it - -lib/sh/timeval.c - - multimeval: new function, multiply a timeval by a constant integer - - divtimeval: new function, divide a timeval by a constant integer - -lib/sh/uconvert.c - - uconvert: new additional argument: EP. If non-null, it gets the - address of the first non-digit that ends conversion (like strtod); - we try to do as much of the conversion as possible if EP is set so - the caller can clean up - - 2/4 - --- -examples/loadables/mkfifo.c - - mkfifo: new loadable builtin - - 2/6 - --- -variables.c - - make_local_variable: make sure local variables that have the same - names as variables found in the temporary environment are marked as - local. From Grisha Levit back in 12/2018 - - 2/7 - --- -sig.[ch] - - restore_sigmask: function to restore top-level signal mask using - sigprocmask - -{sig,eval,jobs,nojobs}.c - - replace calls to sigprocmask with restore_sigmask(); remove extern - declarations of top_level_mask - -sig.c - - initialize_shell_signals: if SIGCHLD is blocked at shell startup, - not only remove it from top_level_mask but make sure it's unblocked - -execute_cmd.c - - execute_pipeline: if lastpipe is enabled and we're executing the - rightmost pipeline element in the current shell, make sure to unblock - SIGCHLD before calling execute_command, in case `return' or `exec' - is run and that call doesn't return. From a report by - Harald van Dijk following up to a report - by Martijn Dekker - - 2/10 - ---- -builtins/trap.def - - trap_builtin: in posix mode, when trap is run with -p, show - the disposition of all signals, even those that are still in the - default state, including signals that were ignored when the shell - starts up and haven't been reset. Don't do it in default mode. - From an austin-group discussion back in April, 2019 (interp 1211) - -findcmd.c - - search_for_command: don't add commands without the execute bit set - to the command hash table. From https://savannah.gnu.org/patch/?9789 - contributed by michaeljs1990 - - 2/11 - ---- -expr.c - - strlong: require `base#' to be followed by an integer constant; - otherwise throw an error. From a report from Jeremy Townshend - back in June, 2019 - -test.c - - unary_test: allow -v N to test whether or not positional parameter - N is set. Most recently suggested by Peng Yu - and Martijn Dekker - -builtins/getopts.def - - dogetopts: use number_of_args() to compute the number of positional - parameters - -{findcmd,variables,subst,trap,sig}.h,builtins/common.h - - __P --> PARAMS - -builtins/shift.def,builtins/common.c - - shift_builtin: moved code that modifies dollar_vars and rest_of_args - to common.c:shift_args(int times), part of move to localize changes - to positional parameters - -builtins/common.c,variables.c - - posparam_count: keep a running count of the number of posititional - parameters when dollar_vars and rest_of_args are set - - 2/12 - ---- -subst.c - - number_of_args: just return posparam_count - -builtins/shift.def - - shift_builtin: if asked to clear the positional parameters with - something like `shift $#', just call clear_dollar_vars instead of - iterating through them, unsetting them one by one - -subst.[ch],builtins/common.[ch] - - number_of_args: moved to builtins/common.c - - 2/14 - ---- -subst.c - - clear_fifo_list: when using named pipes, clear out the FIFO list - without unlinking anything and set NFIFO to 0 - -execute_cmd.c - - execute_disk_command: in the child, clear out the FIFO list, since - we haven't created any FIFOs yet - - execute_in_subshell: clear out the FIFO list, since we haven't - created any FIFOs yet - -parse.y - - special_case_tokens: allow `time -- command' - - 2/21 - ---- -subst.c - - get_var_and_type: if an unset variable (not an array) is supplied - with the `[@]' subscript, don't return "". Fix to bug reported by - Arfrever Frehtes Taifersar Arahesis ; - original bug introduced 7/29/2018 - - array_transform: take a STARSUB argument instead of VARNAME, since - we've already computed what kind of index the array reference uses - in get_var_and_type, and passing VARNAME to figure out the index - type doesn't do the right thing when we're using indirect variable - expansion. Fixes bug reported by - Arfrever Frehtes Taifersar Arahesis - - array_remove_pattern: take the same new STARSUB argument for the - same reason - - parameter_brace_transform,parameter_brace_remove_pattern: change - callers to pass STARSUB instead of VARNAME - - 2/22 - ---- -execute_cmd.c - - fix_assignment_words: if an assignment is supplied to a builtin that - creates or modifies local variables while a function is executing, - set the W_FORCELOCAL flag for that word in addition to any of the - various assignment flags - -subst.c - - shell_expand_word_list: while processing a list of assignments that - are arguments to a builtin that creates or modifies local variables, - if make_internal_declare fails while attempting to create the local - variable (or give it attributes), skip attempting the assignment but - otherwise do not make this a fatal error. This results in two error - messages: one to create the variable or modify its attributes, and - one while attempting to assign the value, but the errors to not - cause the function to return immediately. Fixes inconsistency - reported by Arfrever Frehtes Taifersar Arahesis - - - 2/23 - ---- -trap.c - - first_pending_trap: generalize into first_pending_trap and - next_pending_trap - -wait.def - - wait_builtin: close up the trapped-signal-arrives hole a little more - by looking for a signal that arrived between the last check for - pending traps and setting wait_intr_flag and behaving as if it - arrived while wait was executing. Use first_pending_trap and - next_pending_trap to find a pending trap that is not SIGCHLD - -trap.c - - trap_handler: longjmp to wait_intr_buf unconditionally if - wait_intr_flag is set; don't bother with interrupt_immediately any - more - -variables.c - - all_local_variables: now takes an arg saying whether to restrict - return value to visible variables or return all local variables, - even those that are unset (the new default) - - visible_variable_in_context: new function, restricts return values - to set local variables in the current context; variable_in_context - now returns all local variables in the current context, even the - unset ones - -variables.h - - all_local_variables: change extern function declaration - -builtins/setattr.def - - show_local_var_attributes: show all local variables at the current - variable context, including unset ones, and their attributes - - show_localname_attributes: show attributes for NAME as long as NAME - resolves to a local variable at the current variable context, even - if NAME is unset - -builtins/common.h - - show_local_var_attributes, show_localname_attributes: new extern - declarations - -builtins/declare.def - - declare_internal: allow `-p' option for `local' builtin - - declare_internal: if `local' is supplied without options, or with - the `-p' option, but no variable name arguments, display all local - variables at the current variable context by calling - show_local_var_attributes - - declare_internal: if `local -p' is supplied with variable name - arguments, call show_localname_attributes to display the attributes - for that name if it resolves to a local variable at the current - variable context. Fixes issue reported by - pepa65 - -subst.c - - array_var_assignment: if VAR is unset, print the declare command - without the assignment statement, just with the attributes - - array_transform: special-case the 'a' attribute and return the - attribute string even if the array variable is unset. Feature request - from Arfrever Frehtes Taifersar Arahesis - - parameter_brace_transform: if asked to display the attributes and - value ('A') of an unset variable, make sure we pass the variable, if - it exists with attributes but without a value, to string_transform - - string_transform: if we don't have a value but the operator is 'A', - pass the variable through to string_var_assignment - - string_var_assignment: if we have an unset variable with attributes, - return a declare command that just sets the attributes. Feature request - from Arfrever Frehtes Taifersar Arahesis - - 2/24 - ---- -locale.c - - mblen: don't try to use unless HANDLE_MULITBYTE is defined. From - https://savannah.gnu.org/support/?110200 - - set_default_locale: if HAVE_SETLOCALE isn't defined, set the default - locale to "C" - - 2/25 - ---- -general.c - - interrupt_immediately: remove all references to this that are - already commented out - - 3/2 - --- -variables.c - - push_var_context,push_posix_tempvar_internal: assignment statements - preceding shell functions no longer persist after the function - completes in posix mode. POSIX interp #654, was in P1003.1-2017 - - push_posix_temp_var: variable assignments preceding special builtins - now act as if an assignment statement had been executed in posix mode - (the Posix `current execution environment') instead of unconditionally - creating a global variable - -trap.c - - clear_pending_traps: new function, just clears the pending traps flag - for all signals - - 3/6 - --- -execute_cmd.c - - execute_in_subshell: check for interrupts and terminating signals - before resetting the terminating signal handlers, and clear all - pending traps -- they're not pending for us and we should not run a - trap handler for them - - execute_in_subshell: enable bash-5.1 change from 11/29/2018 that - resets the signal-in-progress flag if we're running a command in - a subshell, since we're not running the trap command (we are the - trap command) - - 3/10 - ---- -subst.c - - parameter_brace_expand: if we assign the empty string to a variable - using the [:]= expansion in a quoted expansion, make sure we note - we are returning a quoted null string to the caller by setting - W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo - - - 3/17 - ---- -lib/readline/histfile.c - - history_truncate_file: only chown the file if we really need to. From - alex@lisas.de via https://savannah.gnu.org/support/?110207 - -lib/readline/bind.c - - rl_unbind_function_in_map: since we are looking for functions, not - key sequences, descend into keymaps attached to the keymap passed - as an argument. From a report from lockywolf@gmail.com back on 2/27, - TENTATIVE CHANGE - -variables.h - - MKLOC_ARRAYOK,MKLOC_ASSOCOK: new flags values for - make_local_{array,assoc}_variable so we can avoid hard-coded values - of 1 and make it possible to eventually pass in additional flags - -builtins/declare.def - - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK - - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK - -variables.c - - make_local_{array,assoc}_variable: understand new flags, pass - MKLOC_INHERIT to make_local_variable if it appears in the flags - argument - -builtins/declare.def - - declare_internal: add a new -I option for local and declare that - inherits attributes and value from a variable with the same name - at a previous scope. Inspired by netbsd sh - - if -I option is supplied, pass MKLOC_INHERIT to make_local_variable - and its array counterparts make_local_{array,assoc}_variable - -subst.c - - shell_expand_word_list: pass -I to declare if constructing a declare - command with make_local_declare, meaning we have an array or assoc - compound assignment. (Slighty unsatisfactory, but ok for now) Fix - for bug report from Kevin Locke , - https://savannah.gnu.org/support/index.php?109669 - - 3/18 - ---- -examples/loadables/basename.c - - basename_builtin: handle -- option without crashing. Report by Peng Yu - - -jobs.c - - notify_of_job_status: if in posix-mode shell is started with -c, - jobs should print the status of completed jobs. From a report by - Robert Elz back in 12/18 - - 3/19 - ---- -variables.c - - assign_in_env: if we're assigning POSIXLY_CORRECT or POSIX_PEDANTIC - in the temporary environment, save the values of the options - affected by posix mode so we can restore them when we restore the - old value of the variable after the command executes. Suggested by - Martijn Dekker - - 3/20 - ---- -syntax.h - - slashify_in_here_document: add `"' to this list, since POSIX says - that backslashes in here documents behave like backslashes in - double quotes, and backslash can quote a double quote in a double- - quoted string. This means that given P=A, - - cat < back in 1/2019. - - 3/23 - ---- -subst.c - - string_transform: add `U' (convert to uppercase), `u' (convert - first character to uppercase), and `L' (convert to lowercase) - transformations. Inspired by a discussion with Phil Smith - back in May, 2019 - - parameter_brace_transform: make sure `u', `U', and `L' are valid - transform operators - -doc/{bash.1,bashref.texi} - - parameter transformation: document new `U', `u', and `L' operators - -eval.c - - execute_prompt_command: if an array variable PROMPT_COMMANDS exists, - prefer it to PROMPT_COMMAND and execute all of the commands contained - as array elements in index order. From a proposal by Daniel - Colascione back in 1/2018 - - execute_array_command: function for array_walk to use when executing - commands in PROMPT_COMMANDS - -doc/{bash.1,bashref.texi} - - PROMPT_COMMANDS: new array variable - - 3/24 - ---- -builtins/ulimit.def - - new -R option, for RLIMIT_RTTIME (max time a real-time process can - run without blocking). Patch from Maciej Wolny - back in 7/2017 - -doc/{bash.1,bashref.texi} - - ulimit: document new -R option - -lib/readline/{display.c,rlprivate.h} - - _rl_clear_screen: now takes an argument saying whether to attempt to - clear the terminal scrollback buffer if the right termcap capability - exists - -lib/readline/{text.c,readline.h} - - rl_clear_display: new bindable command that clears the screen and - scrollback buffer - -lib/readline/funmap.c - - clear-display: new bindable command name - -lib/readline/emacs_keymap.c - - emacs mode M-C-l now bound to clear-display - -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - clear-display: document new function and default emacs mode binding - -arrayfunc.c - - assign_assoc_from_kvlist: allow compound assignments to associative - arrays that do not contain words of the form `[key]=value', assume - such lists are of the form (key1 value1 key2 value2). A missing or - empty key is an error; a missing value is treated as NULL. You - cannot mix the two forms. Inspired by a suggestion from Sebastian - Gniazdowski back in 7/2019 - -doc/{bash.1,bashref.texi} - - documented new associative array assignment syntax - -assoc.[ch] - - assoc_to_kvpair: new function that returns a string with quoted - key/value pairs from given associative array - -array.[ch] - - array_to_kvpair: new function that returns a string with quoted - key/value pairs from given indexed array (for completeness) - -subst.c - - parameter_brace_transform: new operator `K': produces the (possibly - quoted) value of a variable, except for arrays, where it expands to - indexed or associative array assignments in key/value pair form - - string_transform,parameter_list_transform: expand `K' to (possibly - quoted) values - - array_var_assignment: take a new fourth argument saying which kind - of assoc assignment statement to produce; calls array_to_kvpair or - assoc_to_kvpair as appropriate and just returns that value if - necessary without creating a declare command - - array_transform: if the operator is `K', call array_var_assignment - with new argument that will produce a list of key/value pairs - -doc/{bash.1,bashref.texi} - - document new 'K' parameter transformation operator - - 3/25 - ---- -doc/bash.1,lib/readline/doc/{history.3,readline.3} - - some text and formatting cleanups from Bjarni Ingi Gislason - - -bashhist.c - - SYSLOG_MAXLEN: increase to 1024, since that seems to be what most - syslog daemons handle - - bash_syslog_history: if the line is longer than SYSLOG_MAXLEN minus - the header length, log it in multiple message with a sequence number - instead of truncating. Inspired by a report from - back in 7/2018 - -lib/readline/text.c - - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, - rl_keep_mark_active: new functions to manage an active region. We - don't do anything with an active region yet. Part of a large patch - for active regions from Daniel Colascione - originally back in 3/2018 - - rl_clear_screen: call rl_keep_mark_active to keep the region active - across the screen refresh - - rl_newline: make sure to deactivate the region even though we don't - do any redisplay with it yet - -lib/readline/readline.h - - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, - rl_keep_mark_active: new extern function declarations. They are - public functions for now - -lib/readline/readline.c - - readline_internal_setup: make sure the region starts out as not - active - - readline_internal_charloop: make sure to deactivate the mark after - a command, unless the command calls rl_keep_mark_active keep it - active - -lib/readline/kill.c - - rl_bracketed_paste_begin: set rl_mark before inserting the pasted - text, so the pasted text defines the region - - rl_bracketed_paste_begin: set the region as active after inserting - the pasted text - -lib/readline/util.c - - _rl_abort_internal: make sure we deactivate the region - -lib/readline/{terminal.c,rlprivate.h} - - _rl_cr: new function to just output the term_cr (or '\r'). Part of - the active region patch - -lib/readline/display.c - - _rl_cr: use where appropriate to replace MSDOS-dependent code and - calls to tputs - -lib/readline/terminal.c - - get and store the terminal sequences to enter and exit standout - (usually some background color) mode - - 3/26 - ---- -subst.[ch] - - copy_fifo_list: now returns void * - - close_new_fifos: now takes a void * as the first argument, since it's - usually the return value from copy_fifo_list - - close_new_fifos: (named pipes): cast first argument to a char *, - since copy_fifo_list will (someday) return a bitmap - - close_new_fifos: (HAVE_DEV_FD): cast first argument to a pid_t *, - since it takes a copy of dev_fd_list; use that in the loop to - determine whether or not to close file descriptors. First half of - fix for bug reported by Valentin Lab - - unlink_fifo_list: (named pipes): when compacting the list, make sure - to avoid the copy if i == j, and, after copying fifo_list[i] to - fifo_list[j], null out fifo_list[i] so we don't try to access it - later - -execute_cmd.c - - execute_command_internal: don't call reap_procsubs after executing - the command. Rest of fix for bug reported by Valentin Lab - - - execute_command_internal,execute_builtin_or_function: ofifo_list is - now a void * instead of a char * - - 3/30 - ---- -lib/readline/{terminal.c,rlprivate.h} - - _rl_standout_{on,off}: new functions, to enter and exit terminal - standout mode - -lib/readline/rlprivate.h - - _rl_refresh_line: new extern declaration - -lib/readline/display.c - - visible and invisible lines: added members to deal with tracking the - `current face' - - realloc_line: broke code to manage visible_line and invisible_line - allocation out of init_line_structures, added code to manage arrays - of visible and invisible line face info per character - - invis_{addc,adds,nul}: new functions to add characters to the - invisible line and keep the invisible face data updated with whatever - the current face is - - set_active_region: keep track of the display region that should be - in standout mode - - rl_redisplay: use invis_addc/adds/nul to update the invisible line - buffer instead of modifying invisible_line directly - - _rl_refresh_line: moved body of function here from text.c - -lib/readline/text.c - - rl_refresh_line: now just calls _rl_refresh_line and marks the display - as fixed - - 3/31 - ---- -variables.c - - bind_variable_internal: dynamic variables with assignment functions - now honor the readonly attribute by giving an error. Fixes issue - reported by Rob Landley - - assign_seconds: allow seconds to be assigned using an arithmetic - expression - - assign_random: allow RANDOM to be assigned using an arithmetic - expression - -doc/{bash.1,bashref.texi} - - HISTCMD: note that assignments to HISTCMD have no effect - - 4/2 - --- -execute_cmd.c - - execute_in_subshell: make sure we note that we're not reading our - command input from a buffered stream any more, so we don't - sync the buffered stream backwards in subsequent commands this - subshell runs. Fixes bug reported by OÄuz - - 4/3 - --- -builtins/read.def - - read_builtin: if a read in posix mode is interrupted by a signal, - make sure to preserve the value of errno around calls to - check_signals and run_pending_traps so any error message isn't quite - as confusing. Issue reported by Stan Marsh - -lib/sh/zread.c - - zread: preserve value of errno (always EINTR) around calls to - check_signals or check_signals_and_traps - -trap.c - - run_debug_trap: allow suppress_debug_trap_verbose being set to - turn off `set -v' temporarily while executing the DEBUG trap (if - it's set) - -builtins/fc.def - - set suppress_debug_trap_verbose so set -v won't be in effect while - the DEBUG trap runs. Most recently reported by Ami Fischman - ; originally raised by Boruch Baum - back in 10/2017 - - 4/6 - --- -lib/readline/display.c - - puts_face,putc_face: new functions to write strings or characters to - the display while handling standout mode - - update_line,_rl_move_cursor_relative: take additional argument(s) - describing the visible and invisible faces corresponding to the - visible and invisible lines, respectively - -lib/readline/readline.c - - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on - by default) - -trap.c - - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0 - since run_pending_trap usually does these things - -sig.c - - throw_to_top_level: only call the SIGINT trap if there is a SIGINT - trap pending (shouldn't matter, just a check) - -bashline.c - - bash_event_hook: try to identify the signal of interest we've - received - - bash_event_hook: if in posix mode running the read builtin, and we - get a (trappped) SIGINT, throw to top level so we can interrupt - the read. From a report by Robert Elz - - 4/7 - --- -lib/readline/display.c - - update_line: make sure to update and compare face data at the same - time as comparing old and new line data: the lines are only the same - if the face information and character information are identical - (ofd, ols, etc.) - - update_line: make sure to copy face data along with line data - - update_line: use puts_face in place of _rl_output_some_chars to - output face data along with line data - - _rl_move_cursor_relative: when we write characters, make sure to take - the face data into account using puts_face - [END OF INTEGRATION OF ACTIVE MARK AND FACE PATCHES from - Daniel Colascione ] - -{jobs,nojobs}.c - - make_child: to avoid installing a handler for SIGTERM in interactive - shells, and avoid race conditions with child processes resetting the - SIGTERM signal handler to the default, block SIGTERM and then - reset the SIGTERM handler to SIG_DFL before fork, then reset the - handler to SIG_IGN and unblock it in the parent after fork() returns. - Fix for readline and SIGTERM handling reported by Chris Down - (original change was back in 2/2013) that - allows a bash waiting in readline() for input to be killed with a - SIGTERM sent by another process - - take out calls to RESET_SIGTERM, no longer needed - -execute_cmd.c - - execute_in_subshell,execute_simple_command,execute_disk_command: - remove calls to CHECK_SIGTERM, since we don't install a handler - any more - -lib/readline/readline.c - - _rl_enable_bracketed_paste: enabled by default for the time being - - 4/9 - --- -jobs.h - - JWAIT_WAITING: new flag for wait functions; means only wait for jobs - with the J_WAITING flag set - - J_WAITING: new job flag, part of arg list to `wait -n' - - IS_WAITING(i): job i has the J_WAITING flag set - -jobs.c - - wait_for_any_job: if the flags includes JWAIT_WAITING, we only return - jobs with the J_WAITING flag already set; otherwise we skip them. - For `wait -n args' support - -builtins/wait.def - - set_waitlist: take a list of jobspecs and set the J_WAITING flag in - each valid job from the list - - unset_waitlist: turn off the J_WAITING flag for all jobs where it's - set - - wait_builtin: if -n is supplied with a list of arguments, set the - J_WAITING flag in each job in the list, call wait_for_any_job with - the JWAIT_WAITING flag, and clean up by calling unset_waitlist(). - From a suggestion from Robert Elz back in 3/2019 - (originally in 10/2017) - - 4/11 - ---- -lib/readline/display.c - - update_line: in step 5b of the line wrapping prompt code, make sure - OFDF and NFDF are set before performing a dumb update - - 4/12 - ---- -sig.c - - termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before - resending a terminating signal to ourselves, in the event that this - is called in a signal handler context with the terminating signal - blocked. Inspired by a report from - - 4/13 - ---- - -lib/readline/text.c - - rl_newline: if the region is active, call rl_redisplay to clear - standout mode before returning - -lib/readline/display.c - - norm_face: new function to mark a portion of the invisible face - buffer as normal text (no standout) - - rl_redisplay: if the line consumes more than a screen's worth of - lines, mark the lines that are off the top of the display as having - a `normal' face - - 4/14 - ---- -variables.c - - LINENO: no longer has the integer attribute, since it does not take - arithmetic expressions on assignment (use $((expr)) instead) - -lib/readline/mbutil.c - - _rl_find_prev_utf8char: new function, uses the structure of UTF-8 - characters to find the start of the previous one no matter where we - start: at the beginning of the next character, at the end of a - multibyte character, or in the middle of a multibyte character. - EXPERIMENTAL - - _rl_find_prev_mbchar_internal: for now, call _rl_find_prev_utf8char - if we are in a UTF-8 locale. EXPERIMENTAL - - 4/15 - ---- -lib/readline/mbutil.c - - _rl_utf8_mblen: changes to handle invalid multibyte sequences better, - even when N means that the sequence would be too short anyway - -examples/loadables/csv.c - - csv: new loadable builtin to parse a line of csv data and store it - into an array supplied as an argument - - 4/16 - ---- -examples/loadables/cut.c - - cut: new loadable builtin - - lcut: new builtin that does what cut does but on a string supplied - as an argument (only one string for now) - - 4/17 - ---- -jobs.h - - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second - argument to make_child - -jobs.c - - make_child: now takes a set of flags as the second argument - -execute_cmd.c - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument - -subst.c - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument - -doc/{bash.1,bashref.texi} - - document that the words in a compound array assignment undergo all - the shell word expansions, including filename generation and word - splitting. From a report from E. Choroba - - 4/18 - ---- -subst.c - - command_substitute: use JOB_CONTROL instead of INTERACTIVE in the - test to determine whether or not to give the terminal back to - pipeline_pgrp - -jobs.c - - make_child: if FORK_NOTERM is set in the flags argument, don't call - give_terminal_to - -{jobs,nojobs}.c,jobs.h - - wait_for: now takes a second argument, a flags word - -{execute_cmd,subst}.c - - wait_for: change all callers to add second argument to wait_for - -jobs.c - - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call - give_terminal_to - - 4/19 - ---- -subst.c - - command_substitute: block SIGINT around call to read_comsub, so we - let any interrupts affect the command substitution. Fixes issue - reported by DALECKI Léo - -hashcmd.h - - FILENAME_HASH_BUCKETS: increase to 256 - -assoc.h - - ASSOC_HASH_BUCKETS: new define, set to 1024 - -variables.c - - make_new_assoc_variable,make_local_assoc_variable: call assoc_create - with ASSOC_HASH_BUCKETS as argument. This changes the hash function - and how the array keys are ordered (which is not guaranteed) - -builtins/read.def - - read_builtin: in posix mode, or if the read call returns -1/EINTR, - don't call run_pending_traps until the read command returns. This - allows a trap action to see the same exit status that the read - builtin would return when it exits on a signal (e.g., SIGINT == 130). - From a suggestion by - - 4/20 - ---- -hashlib.c - - hash_rehash: function to rehash a table, after increasing or decreasing - the number of buckets. From patches from Thomas Kremer - (https://savannah.gnu.org/patch/?9850) and Koichi Murase - - - hash_grow,hash_shrink: grow or shrink a hash table by a factor of - HASH_REHASH_MULTIPLIER (4) - - hash_insert,hash_search: call hash_grow if necessary - -arrayfunc.c - - convert_var_to_{array,assoc}: if the original variable had no value - (it was unset), the array variable should be unset as well. Reported - by andrej@podzimek.org - - 4/21 - ---- -bashline.c - - set_saved_history: change logic used to decide where in the history - operate_and_get_next should start by using a logical offset into the - history list that is an offset from history_base. This avoids having - to take whether or not the history is stifled and full into account. - Report and fix from Greg Price - - operate_and_get_next: just calculate the logical offset of where we - should be in the history instead of an absolute offset - -lib/readline/input.c - - _rl_nchars_available: new function, returns the number of characters - available to be read if FIONREAD is available - - 4/22 - ---- -lib/readline/{readline.c,rlprivate.h} - - _rl_pending_command: new struct to hold information about a pending - command for readline to execute when the current command completes. - A command can set this up so that it gets executed like a - continuation before redisplay - -lib/readline/readline.c - - readline_internal_charloop: after _rl_dispatch returns, check - _rl_command_to_execute, and, if it's non-zero, redisplay and then - execute it as a command - - added a small set of library-private functions for managing the - executing key sequence (not used yet) - -lib/readline/isearch.c - - _rl_isearch_dispatch: if we have found an opcode or have added a - character to the search string and searched for it, reset the keymap - and okeymap members of the search context in preparation for reading - another key sequence/opcode - - _rl_isearch_dispatch: if we read a key sequence bound to an editing - command that is not an `opcode', set up _rl_command_to_execute to - execute it after the searching returns and arrange to break out of - the search - - _rl_isearch_dispatch: if we paste in text from bracketed paste, set - the mark as active so we can highlight it when we display the search - string - - _rl_isearch_dispatch: if we've found the search string, activate the - mark and set rl_point and rl_mark so the search string is highlighted - when we display the search results - - _rl_isearch_dispatch: do translation for keys that map to - rl_do_lowercase_version like we do when dispatching while reading a - key sequence - - 4/23 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: if bracketed paste mode is enabled and there are - enough characters waiting in the terminal's input queue, try to read - the bracketed paste prefix and jump straight to the opcode execution - if we read it. Otherwise, just go on with the ESC. Inspired by report - from - -parse.y - - parse_comsub: posix-mode shells don't allow a closing right paren to - delimit a pending here-document -- it requires the newline - -doc/bashref.texi - - POSIX mode: updated posix mode description with the new here-document - delimiter requirement - -lib/readline/search.c - - _rl_nsearch_dispatch: if bracketed paste mode is enabled, and we read - an ESC, try to see if we have a bracketed paste op and insert the - pasted next. If we don't, go on with the ESC - - _rl_nsearch_dosearch: experimental code to highlight the search string - when displaying the line found in the history. Only done when we are - not searching for a pattern, since we don't have information on the - end of the matching portion of the line. Experimental because it - changes where we put point and mark if searching is successful - -expr.c - - expr_streval: if find_variable for the case where the string is not - an array reference doesn't find anything, see if we can find - something by using find_variable_last_nameref and use the value - from there in the call to expr_streval, kind of using the expression - recursion to complement the nameref recursion. Report from - Daniel Molina - - 4/24 - ---- -jobs.c - - {start,stop}_pipeline: don't reset pipeline_pgrp to 0 if it's already - the same as shell_pgrp, since we don't want to reset it in the middle - of a shell started to run a command or process substitution (after - forking a child to run one command, but before forking another, for - instance). Reported by Rob Landley - - 4/27 - ---- -parse.y - - function_def: break the productions starting with `function' without - `()' into two productions to avoid a shift-reduce conflict. Report - and patch from Dale R. Worley - -variables.h - - localvar_inherit: add extern declaration here - -subst.c - - shell_expand_word_list: take out change from 3/17 to pass -I to - make_internal_declare; it generates errors the user will find - confusing if there is a variable with the same name but a different - type at a previous scope - - shell_expand_word_list: check for and note whether or not -I is - supplied to the declaration command, since it changes the default - behavior of a compound assignment without -a or -A - - shell_expand_word_list: if we have a compound assignment that is an - argument to a declaration command, but there are no options supplied - to the command that determine the type of the array, make sure we - call make_internal_declare with either -a (no localvar_inherit or -I) - or at least -- (if we are inheriting), because we don't want the - declare to get skipped before we perform the word assignment. Fixes - bug reported by Ross Goldberg - - 4/28 - ---- -subst.c - - expand_declaration_argument: new function, broke code that handles - compound assignments that are arguments to declaration commands out - of shell_expand_word_list into this function. No functional change - yet - - 4/29 - ---- -subst.c - - expand_compound_assignment_word: helper function for - expand_declaration_argument: takes NAME[+]=( VALUE ), converts VALUE - to a list of words, then single-quotes each word and reconstructs - the original word. This assumes the result will go to - do_word_assignment, which will remove the single quotes - - expand_oneword: helper function for expand_compound_assignment_word, - takes VALUE and performs the splitting into words, and then the - expansion and single-quoting of each individual word. Indexed and - associative arrays take different code paths, because they undergo - different expansions and associative arrays need special handling to - avoid having to scan for the end of the subscript multiple times - - expand_declaration_argument: call expand_compound_assignment_word to - get the expansion-before-calling-builtins word expansion sequence - correct. Better fix for for bug report from Kevin Locke - , - https://savannah.gnu.org/support/index.php?109669 - -arrayfunc.c - - quote_array_compound_word: take [IND]=VALUE and convert it to - ['IND']='VALUE'. Called by quote_compound_array_list for each word - in the list - - expand_and_quote_assoc_qword: take [KEY]=VALUE and convert it to - ['expanded-key']='expanded-value' (or VALUE to 'expanded-value'). - Called by subst.c:expand_oneword() for each word in the list - - quote_compound_array_list: take a list of words and convert each - [IND]=VALUE to ['IND']='VALUE' (or just 'VALUE' if there is no - [IND]=). Used for indexed arrays - -arrayfunc.h - - expand_and_quote_assoc_word,quote_compound_array_list: new extern - declarations - - 4/30 - ---- -doc/{bashref.texi,bash.1} - - rework description of reserved words a little; add a reserved words - node to bashref.texi. Based on a report from Dale R. Worley - - -builtins/history.def - - history_builtin: if the shell is restricted, don't allow pathnames - with slashes to be read or written. From a report from - Diffie - -shell.c - - maybe_make_restricted: add HISTFILE to the list of readonly variables - -doc/{bashref.texi,bash.1} - - document new restricted shell restrictions - - 5/1 - --- -jobs.c - - wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM - is set in the flags argument - -subst.c - - command_substitute: call make_child with FORK_NOTERM flag so it - doesn't try to set the terminal's process group - - command_substitute: call wait_for with JWAIT_NOTERM so it doesn't - try to set the terminal's process group - - command_substitute: now that wait_for doesn't try to reset the - terminal's process group, remove the code that tries to clean up - after that - - 5/4 - --- -doc/bash.1 - - make sure to mention /etc/inputrc as the ultimate default readline - init file, like other documentation does. Update from - Greg Price - -lib/readline/readline.c - - if the private startup hook function variable _rl_internal_startup_hook - is set, execute that after any user-specified startup hook - -lib/readline/rlprivate.h - - _rl_internal_startup_hook: new extern declaration - -bashline.c,lib/readline/{misc.c,readline.h} - - operate_and_get_next: moved to rl_operate_and_get_next so it's - available to all readline programs, uses _rl_internal_startup_hook. - Based on patch from Greg Price - -lib/readline/funmap.c - - "operate-and-get-next": now a bindable readline command - -lib/readline/emacs_keymap.c - - rl_operate_and_get_next: bound to ^O in emacs mode by default - -doc/bash.1,lib/readline/{readline.3,rluser.texi} - - operate-and-get-next: move to readline section of the manuals, out of - bash-specific functions section - - 5/5 - --- -hashlib.c - - hash_string: use a series of shifts and adds to avoid a multiply by - FNV_PRIME. From Landon Curt Noll's FNV web page - -builtins/fc.def - - fc_gethist,fc_gethnum: now take an additional argument indicating the - operating mode: if the arg is 1, fc is listing commands; if it is 0, - fc is executing commands. Affects how -0 is handled (fc_gethnum - returns -1). Changed callers to handle the return value appropriately. - Report from Jason Franklin about - seg fault and core dump - - fc_builtin: if fc_gethnum returns < 0 when setting histbeg or histend, - report a range error - -doc/bash.1,lib/readline/doc/hsuser.texi - - fc: document how 0 and -0 are treated for listing and executing - -shell.c - - run_one_command: call parse_and_execute with SEVAL_RESETLINE so the - line number gets set to 1. Reported by Rob Landley - - 5/8 - --- -support/config.{guess,sub} - - update to latest versions - -configure.ac - - add support for `genode' from Emery Hemingway - - 5/14 - ---- -test.c - - term: fix case where an argument that looks like a unary operator, - but doesn't have enough tokens left to have an argument to that - operator, was not being treated as a one-argument test. Affects - only uses of test with four and greater arguments, which posix says - are unspecified. This is a bug, or at least an incompatibility, at - least 30 years old. - - test_command: if there are unconsumed arguments, call test_syntax_error - with a `syntax error' argument if the first remaining argument starts - with a `-'. Better than a generic `too many arguments' error - - 5/19 - ---- -configure.ac,config.h.in - - getrandom: add test, define HAVE_GETRANDOM - - getentropy: add test, define HAVE_GETENTROPY - -variables.c - - get_urand32: use getrandom; provide imperfect emulation that uses - getentropy if available, and falls back to reading /dev/urandom if - that's not available. The idea is to use /dev/urandom as little as - possible - - 5/20 - ---- -configure.ac - - updated version to 5.1-alpha - -lib/readline/readline.h - - updated defines to readline version 8.1 - -variables.c - - brand: if shell_compatibility_level is 50 or below, don't xor the - top and bottom halves of the 32-bit random number together, since - previous versions did not - - 5/21 - ---- -COMPAT - - overhauled and updated the descriptions of the various shopt compatNN - options - -doc/bashref.texi - - Shell Compatibility Mode: new section, describes compatibility levels, - BASH_COMPAT, and the various compatNN shopt options - - 5/23 - ---- -doc/bash.1 - - added Shell Compatibility mode section - -doc/{bash.1,bashref.texi} - - changed shopt section to list the compatibility options and refer - to Shell Compatibility Mode section - - BASH_COMPAT: overhauled the text, refers to Shell Compatibility Mode - section - - 5/27 - ---- -variables.c,/lib/sh/random.c - - moved functions that manage 16-bit and 32-bit random values to - lib/sh/random.c - -alias.c - - add_alias: don't bother checking null alias values for ending in - space or tab - -braces.c,include/typemax.h - - move sh_imaxabs and overflow and underflow detection to typemax.h - so the expression evaluation code can use it in the future - - 5/28 - ---- -lib/readline/kill.c - - _rl_bracketed_read_mbstring: make sure to fill in mb[0] even if - the locale says MB_CUR_MAX == 1 in case a caller uses it. Partial - fix for bug reported by Phi Debian - -lib/readline/vi_mode.c - - rl_vi_change_char: make sure _rl_vi_last_replacement gets filled in - in the case where MB_CUR_MAX == 1. Rest of fix for bug reported by - Phi Debian - - _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement - - 5/29 - ---- -lib/malloc/malloc.c - - __P -> PARAMS - - union mhead: now 16 bytes to force 16-byte alignment; extra 8 bytes - at the end of struct minfo to use for guard bytes. Enabled if - pointers are 64 bits (SIZEOF_CHAR_P == 8) - - if we have 64-bit pointers, prepopulate the 64-byte bin first instead - of the 32-byte bin (pointers and WORD_DESCs still fit into 32 bytes, - but WORD_LISTs are now 36 bytes with malloc overhead). We can still - split 64-byte blocks to satisfy 32-byte requests - - internal_malloc: fill in the new 8 mh_magic8 bytes with MAGIC1 guard - bytes - - internal_malloc: print a warning message if the returned pointer is - not aligned according to MALIGN_MASK - - internal_free: detect underflow by checking that mh_magic8 is full - of MAGIC1 bytes - - internal_realloc: detect underflow by checking that mh_magic8 is full - of MAGIC1 bytes - -lib/malloc/stats.c - - _print_malloc_stats: slight adjustment for better column alignment - - 6/1 - --- -execute_cmd.c - - execute_command_internal: treat a redirection failure with errexit - set as a command failure that exits the shell. Bug report from - Hyunho Cho - - 6/3 - --- -redir.c - - redirection_error: takes a new argument, FN, which if non-NULL is - the filename to be used in the error message. - -redir.[ch],builtins/evalstring.c - - redirection_error: changed extern declaration and callers - -redir.c - - do_redirection_internal: takes a new third parameter, FNP, a char ** - to use (*FNP, if non-NULL) to store and return the expanded filename - for those redirections that take one - - do_redirections: pass a char ** (&fn) to do_redirection_internal to - get a pointer to the expanded filename; pass it to redirection_error - if appropriate. Free FN in any case, since do_redirection_internal - won't. Fix for double expansion of filename in certain redirections - reported by OÄuz - - 6/4 - --- -parse.y - - parse_comsub: while we're reading a here-document, don't perform any - history expansion (set history_expansion_inhibited). Fixes issue - reported by "ladyrick" - -general.h,parse.y - - __P -> PARAMS - -shell.c - - shellstart: struct timeval used to initialize shell starting time; - shell_start_time now initialized from shellstart.tv_sec - -variables.c - - assign_seconds: reset shellstart to set shell starting time - -pcomplete.c - - include posixtime.h instead of - -lib/sh/{ufuncs,uconvert}.c - - include posixtime.h instead of the inline conditional includes - -aclocal.m4 - - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the - deprecated AC_HEADER_EGREP - -posixtime.h - - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement - definition - -lib/sh/gettimeofday.c - - gettimeofday: replacement function, so we don't have to use - HAVE_GETTIMEOFDAY in the rest of the code - - 6/5 - --- -{lots of files}.[ch] -builtins/{lots of files}.{c,h,def} -lib/glob/{lots of files}.[ch] -lib/malloc/{lots of files}.[ch] -lib/sh/{lots of files}.c -include/{lots of files}.h -examples/loadables/{lots of files}.c - - __P -> PARAMS - -doc/{bash.1,bashref.texi} - - SECONDS: clarify that the number of seconds is always determined by - querying the system clock - - 6/8 - --- -configure.ac - - if CFLAGS is not supplied in the environment or on the command line, - add the gcc options that suppress warnings about parens and print - formats in a slightly different way that will avoid some collisions - -lib/readline/readline.c - - _rl_dispatch_subseq: don't set rl_last_func to rl_vi_arg_digit, just - the same as if it were rl_digit_argument. This allows functions like - rl_yank_last_arg, which behave differently when called multiple times - in a row, to work closer to what is expected. This allows what - Leo Alekseyev reported to work, with caveats - -lib/readline/vi_mode.c - - rl_vi_yank_arg: make sure to pass `key' to rl_yank_nth_arg, in case - it needs to use it later - - rl_vi_redo: suppress attempts to redo `.' when the current keymap is - vi_movement_keymap, since that will recursively call vi_redo - - 6/11 - ---- -redir.c - - limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can - handle atomic writes without hanging. Tested on FreeBSD 13 - -[bash-5.1-alpha frozen] - - 6/15 - ---- -subst.c - - do_assignment_internal: call stupidly_hack_special_variables on the - name returned from the variable assignment, in case there was a - nameref expansion, and on the original name only if the assignment - returned NULL. Fixes bug reported by James D. Lin - - 6/16 - ---- -builtins/hash.def - - hash_builtin: don't print anything if the hash table is empty when - listing portably (-l) unless the shell compatibility level is <= 50 - Issue originally raised by - - 6/17 - ---- -pathexp.c - - glob_name_is_acceptable: extend GLOBIGNORE to ignore `.' and `..' - as a terminal pathname component instead of just ignoring filenames - that are `.' or `..'. From a suggestion by Ilkka Virta - - - 6/18 - ---- -po/Makefile.in.in - - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have - to create the variable manually - -lib/readline/doc/rltech.texi - - add descriptions of the active mark functions that are available to - applications. I guess they will remain public - -subst.c - - valid_parameter_transform: new function, reject transformations - longer than a single character or invalid transformation operators - - parameter_brace_transform: call valid_parameter_transform - - 6/22 - ---- -lib/sh/zread.c - - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by - Jason A. Donenfeld - -lib/sh/zcatfd.c - - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096) - -lib/sh/zmapfd.c - - zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096) - - 6/29 - ---- -aclocal.m4 - - BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants, - from Jessica Clarke - -xmalloc.c - - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think - it works - -examples/loadables/finfo.c - - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke - - -unwind_prot.c - - unwind_protect_mem_internal: make sure we allocate at least as many - bytes for an entire UNWIND_ELT. Fix from Jessica Clarke - - - 7/1 - --- -eval.c - - alrm_catcher: use write(2) instead of fprintf to print the - auto-logout message to the terminal - -jobs.c - - UNQUEUE_SIGCHLD: set queue_sigchld to 1 around call to waitchld(), - since it is not being called from a signal handler and so SIGCHLD is - not blocked. Fixes report by Godmar Back - - 7/2 - --- -doc/{bash.1,bashref.texi} - - read: clarify that without any name arguments, the line assigned to - REPLY is not modified. From a question by M. Nejat AYDIN - with input from Eli Schwartz - - - 7/5 - --- -lib/readline/vi_mode.c - - _rl_vi_done_inserting: make sure to close out all undo groups when - leaving insert mode, so we don't have anything dangling. - Report and fix from David Fries - - 7/6 - --- -lib/readline/vi_mode.c - - _rl_vi_domove_motion_cleanup: the `c' and `C' commands should enter - insert mode even if the motion command doesn't delete any text. - From a report by David Fries - - _rl_vi_done_inserting: add a missing rl_end_undo_group when - _rl_vi_doing_insert is set: there should be one begun by - rl_vi_start_inserting and one begun by the command (change or replace). - From a report by David Fries - - rl_vi_replace: set _rl_vi_last_key_before_insert to 'R' explicitly, - since other code checks that and we want to allow users to rebind - this function - - 7/7 - --- -lib/readline/vi_mode.c - - rl_vi_{delete,change,yank}_to: if we have a non-null _rl_vimvcxt, - just reinitialize it so we don't have to allocate a new one. This is - a change primarily for callback mode, and fixes a memory leak - -builtins/evalstring.c - - optimize_shell_function: try to optimize away the fork in the last - command in a shell function body, under certain conditions - -execute_cmd.c - - execute_function: attempt to optimize away forks in a shell function - that is already marked NO_FORK and being executed in a command - substitution - - 7/8 - --- -{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c - - interrupt_immediately: remove, no longer used - -jobs.c - - waitchld: don't perform asynchronous notification if we are currently - executing a builtin (executing_builtin != 0). Inspired by a report - from Godmar Back - - 7/9 - --- -lib/readline/signals.c - - _rl_handle_signal: block SIGTTOU while handling a SIGTTOU, since we - no longer run this in a signal handling context where SIGTTOIU would - be blocked - - 7/14 - ---- -execute_cmd.c - - execute_simple_command: use new variable `cmdflags' instead of using - simple_command->flags directly; initialize from simple_command->flags - - check_command_builtin: take a simple command list of words starting - with `command' and including a command_word argument, and peel off - the `command' and any instances of `-p' and `--' and return the - updated list - - execute_simple_command: if the first word of the simple command is - `command', call check_command_builtin to peel off any `command' and - `-p' and `--' and go on to execute the rest of the words as a simple - command. If we're in posix mode, we've got the special builtins - handled before this runs. Fixes complaint about `command' in the - background running an extra bash process from Dmitry Alexandrov - - - 7/17 - ---- -doc/bash.1 -lib/readline/doc/{rltech,hstech,rluser}.texi -lib/readline/doc/{readline,history}.3 - - a few small tweaks to make the language gender-neutral - - 7/18 - ---- -subst.c - - expand_word_internal: case `:' make sure the shell is either not in - posix mode or W_TILDEEXP is set before turning on W_ITILDE. The old - code would turn it on unconditionally if the W_ASSIGNMENT flag was - set. Fixes bug reported by OÄuz - - 7/20 - ---- -builtins/complete.def - - replace macros used to print compspec actions, options, and other - info with a small set of functions that traverse the structs used - to hold that information and print everything instead of eumerating - each option and action separately. From a patch submitted by - Martin Kealey - - 7/27 - ---- -variables.c - - push_posix_tempvar_internal: restore $SHELLOPTS after restoring the - values of shell options saved by `local -' by calling set_shellopts(). - Report from Grisha Levit - -flags.c - - reset_shell_flags: set histexp_flag to 0 and let bash_history_reinit - take care of setting history_expansion appropriately. Report and fix - from Grisha Levit - - 7/28 - ---- -general.c - - assignment: if (FLAGS & 1), we are parsing the contents of a compound - assignment, and a word must begin with a `[' and have a valid - subscript terminated by `]' before the `=' to be considered an - assignment statemen and subsequently expanded like one. Report from - Alexey Izbyshev - - 7/30 - ---- -lib/glob/sm_loop.c - - BRACKMATCH: if the bracket expression is matching simple characters - and not a range, compare the character from the string and the - pattern directly, as required by Posix interp 948 - -lib/glob/smatch.c - - charcmp_wc: split off code that calls wcscoll from rangecmp_wc, - just return the results of wcscoll - - rangecmp_wc: call charcmp_wc and impose a total ordering - by performing a byte comparison (or wint_t comparison) of C1 and C2 - as required by Posix interp 948 (charcmp_wc takes care of the - behavior of FORCECOLL) - - collequiv_wc: call charcmp_wc instead of rangecmp_wc - - charcmp: character comparison code from rangecmp - - rangecmp: call charcmp and impose total ordering as required by - Posix interp 948 - - collequiv: call charcmp instead of rangecmp - - _fnmatch_fallback: ASCII version of fallback for equivalence classes - when there are no multibyte characters in the pattern; just calls - fnmatch with a reconstructed equivalence class pattern - - collequiv: call _fnmatch_fallback if charcmp returns non-zero and - the configure check indicates fnmatch has character class support. - Fixes issue reported by Harald van Dijk - - 8/2 - --- -lib/readline/signals.c - - _rl_handle_signal: since we're not called in a signal handler context - any more, we don't need to explicitly unblock the signal we received - so the application's signal handler will get it when we resend the - signal to ourselves. It doesn't hurt anything to do it, but we don't - have to - - _rl_handle_signal: Set up a framework for any signals that need to - be blocked during cleanup: add the signal to SET (initialized to the - existing set of blocked signals) and set BLOCK_SIG to 1. We block - that set around the call to rl_cleanup_after_signal(). - - _rl_handle_signal: on AIX, if the signal is SIGHUP, make sure we - block SIGHUP while running rl_cleanup_after_signal() - - 8/3 - --- -jobs.c - - start_job: don't allow `fg' or `bg' in a command substitution to - attempt to start a parent's jobs. Suggested by OÄuz - - -builtins/set.def - - set_current_options: only call change_flag or SET_BINARY_O_OPTION_VALUE - if the value has changed from what is stored in the bitmap, to avoid - any side effects from setting the options and save time on any - unnecessary function calls. Inspired by report from Grisha Levit - - -parse.y - - xparse_dolparen: before we jump to top level, check whether we are - still reading from the string (we might have run all the unwind- - protects) and turn off PST_CMDSUBST if we are not. Fixes fuzzing - bug reported by Jakub Wilk - - 8/4 - --- -subst.c - - process_substitute: set subshell_environment to include SUBSHELL_ASYNC - in the child process, since we passed FORK_ASYNC to make_child. Fixes - DEBUG trap problem reported by Jonathan Rascher - -subst.c - - unlink_all_fifos: new function, just unconditionally closes and - unlinks (if using FIFOs) each pipe used for process substitution. - There is an open to unblock any child processes sleeping on the - FIFO first. Inspired by a suggestion from "CHIGOT, CLEMENT" - - -shell.c - - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list() - -sig.c - - termsig_handler: call unlink_all_fifos() instead of - unlink_fifo_list() - - 8/5 - --- -arrayfunc.c - - quote_compound_array_list: turn empty strings into '' instead of - leaving them unmodified. Fixes bug in changes from 4/29 reported - by andy_bash - - 8/10 - ---- -bashline.c - - edit_and_execute_command,bash_execute_unix_command: restore the bash - signal handlers before running parse_and_execute() so bash will catch - and handle signals, instead of letting readline catch them without - any opportunity to run _rl_handle_signal(). Fixes bug reported by - Stan Marsh - - 8/11 - ---- -builtins/fc.def - - fc_gethnum: return HIST_INVALID for -0 if not in listing mode - - fc_builtin: throw an out-of-range error if histbeg or histend gets - set to HIST_INVALID - - fc_builtin: don't throw errors for other out-of-range history - specifications, clamp them at the beginning or end of the history - list, as appropriate, per POSIX. Report and fix from Martijn Dekker - - - 8/12 - ---- -builtins/fc.def - - fc_gethnum: return HIST_NOTFOUND (new error) if the string is not a - number and doesn't correspond to any command in the history list - - fc_builtin: print a "no command found" error message if fc_gethnum - returns HIST_NOTFOUND - - 8/14 - ---- -flags.c - - no_invisible_vars: removed undocumented `-I' flag - -{flags,variables}.c,flags.h,builtins/{declare,setattr.def} - - no_invisible_vars: remove all references - -command.h - - PF_ALLINDS: new flag, means to expand an array variable name without - a subscript as if it were subscripted by `@' instead of `0' - -subst.c - - parameter_brace_expand_word: if PFLAGS contains PF_ALLINDS, expand - an array variable name as if it were subscripted by "@" instead of - 0/"0": a string with the element values separated by " ". Little - nuance; we're just interested in whether or not there are any - values at all - - parameter_brace_expand: if we are expanding something like ${foo@a}, - pass PF_ALLINDS to parameter_brace_expand_word and - parameter_brace_expand_indir so we don't get tripped up on `nounset' - if foo has an assigned subscript other than 0/"0". Inspired by a - report from Andrew Neff - - 8/17 - ---- -bashhist.c - - bash_add_history,maybe_add_history: don't need to call shell_comment - if we are in the middle of adding a here-document, since it may - call the parser recursively on data that is not guaranteed to be - valid input. From a report by Hyunho Cho - - 8/24 - ---- -lib/readline/complete.c - - compare_match: compare TEXT from the line buffer and MATCH, a - possible completion for TEXT, after dequoting TEXT if necessary - - rl_complete_internal,rl_menu_complete : if show-all-if-unmodified is - set, use compare_match instead of a straight strcmp to determine if - the match has changed the text to complete, so we can use it for - filenames that require quoting. Report and pointer to fix from - Abon B - - 8/25 - ---- -eval.c - - execute_prompt_command: PROMPT_COMMAND can now be an array, subsuming - PROMPT_COMMANDS, which bash no longer looks for. Prompted by a - suggestion from Martijn Dekker - - 8/26 - ---- -builtins/fc.def - - fc_gethnum: now takes a flags word as the third argument, with two - current flag values: HN_LISTING, which means we are listing history - entries, and HN_FIRST, which means we are parsing the first in a - first,last range of history entries - - fc_gethnum: if we have a number >= 0, and it's out of range, return - different values (0 or last history) depending on whether we are - parsing the first or last in a range argument. Based on a report from - Martijn Dekker - - 8/31 - ---- -parse.y - - grammar: call handle_eof_input_unit from the eof-after-error - production only from interactive top-level shells, so a syntax error - in `eval' doesn't exit an interactive shell. Report and fix from - Koichi Murase - -bashline.c - - bash_execute_unix_command: if we call parse_and_execute with allocated - memory, make sure not to include SEVAL_NOFREE in the flags so it will - free that command string before returning. Report and fix from - Koichi Murase - -array.[ch] - - array_to_argv: now takes a second argument: COUNTP; returns the number - of elements stored in the strvec - - array_to_argv: don't store array elements with null values; it makes - it hard for callers to walk the whole array reliably - -pcomplete.c - - gen_shell_function_matches: change call to array_to_argv - -array.h - - execute_array_command: now takes the entire ARRAY * as the first - parameter - -eval.c - - execute_array_command: now takes the entire array, puts the elements - into a strvec, and executes each element of the strvevc as a command. - This protects against a command from PROMPT_COMMAND[n] unsetting the - corresponding element of PROMPT_COMMAND. - From a report from Koichi Murase - - 9/7 - --- -[bash-5.1-beta frozen] - - 9/8 - --- -lib/readline/display.c - - _rl_update_final: don't bother doing anything if the line structures - have not been initialized. Report and fix from gary@catalyst.net.nz - -variables.c - - get_histcmd: perform the same adjustment as in prompt_history_number; - make sure to subtract one if we're doing this while executing a - command that has already been saved to the history list. Inspired - by a report from L A Walsh - - 9/14 - ---- -aclocal.m4 - - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported - by Andreas K. Hüttel - -syntax.h - - slashify_in_here_document: restore previous value that doesn't - include double quote, since it's only special in certain cases - -subst.c - - expand_word_internal: when processing backslash-double quote inside - a ${...} construct inside a here documemt, treat it the same as if - it were double-quoted, as posix says. Fixes report from - Andreas Schwab - - 9/15 - ---- -support/signames.c - - added a number of more esoteric signal names from AIX and Solaris - -parse.y - - report_syntax_error: make sure that the exit status is only set to - one of the special builtin exit statuses if we are really executing - a builtin here, not just if parse_and_execute_level > 0. Reported by - Rob Landley - -execute_cmd.c - - EX_BADSYNTAX: make sure that gets translated into EX_BADUSAGE (2) - - execute_simple_command: if a function returns a value greater than - EX_SHERRBASE, use builtin_status to translate it, as if a builtin - were being executed - - builtin_status: make sure a status > EX_SHERRBASE gets translated to - EXECUTION_FAILURE - - 9/21 - ---- -subst.c - - process_substitute: set up input from /dev/null (standard for an - asynchronous process) only if the shell is interactive and reading - input from the terminal. This allows scripts to use process - substitution to filter stdin. From a report from - Andreas Schwab - - 9/23 - ---- -doc/{bash.1,bashref.texi} - - ENV: a couple of changes clarifying that it's only used when an - interactive shell is started in posix mode. Report from - Reuben Thomas - -examples/loadables/asort.c - - asort: loadable builtin to sort an array. Contributed by - Geir Hauge - - 10/1 - ---- - -[bash-5.1-rc1 frozen] - - 10/7 - ---- -subst.c - - process_substitute: try it without setting the stdin for a process - substitution started from an interactive shell to /dev/null. We will - have to see if this causes problems like those reported back in - 9/2019 by Grisha Levit. From a report by Hyunho Cho - -lib/readline/terminal.c - - _rl_init_terminal_io: if the terminal is unknown, disable bracketed - paste on the assumption it can't handle the enable/disable escape - sequences - - 10/8 - ---- -lib/readline/terminal.c - - _rl_init_terminal_io: if the terminal name is "dumb", disable - bracketed paste mode. Suggested by - Andreas Schwab - - 10/13 - ----- -trap.[ch] - - set_trap_state: new function to allow other signal handlers to set - the internal state that trap_handler would set to note that the - shell received a trapped signal. Used by sigint_sighandler(). - -sig.c - - sigint_sighandler: call set_trap_state to set the pending trap state - for SIGINT if trap_handler is not called. Needed because - throw_to_top_level now checks whether a signal is pending before - running the trap (change from 4/2020) - -builtins/trap.def - - trap_builtin: if the shell is interactive (interactive_shell != 0) - but running something like PROMPT_COMMAND that sets - parse_and_execute_level > 0 but interactive == 0, make sure to set - the signal handler to the default interactive shell SIGINT handler - (sigint_sighandler) instead of the default non-interactive one. - Fixes bug reported by Daniel Farina with a hint - from felix - - 10/26 - ----- - -lib/readline/{readline.c,rlprivate.h} - - _rl_enable_active_region: new variable, mirrors value of - _rl_enable_bracketed_paste - - BRACKETED_PASTE_DEFAULT: new define, default initial value of - _rl_enable_bracketed_paste and _rl_enable_active_region - -lib/readline/bind.c - - hack_special_boolean_var: make sure that _rl_enable_active_region - is set appropriately when "enable-bracketed-paste" is modified - -lib/readline/isearch.c - - _rl_isearch_dispatch: make sure that we activate the mark on finding - the search string only if _rl_enable_active_region is non-zero, even - if bracketed paste is enabled - -lib/readline/search.c - - noninc_dosearch: make sure that we activate the mark on finding - the search string only if _rl_enable_active_region is non-zero, even - if bracketed paste is enabled - -lib/readline/kill.c - - rl_bracketed_paste_begin: make sure we activate the mark only if - _rl_enable_active_region is enabled - -lib/readline/isearch.c - - _rl_isearch_dispatch: the requirement for number of available unread - characters (bytes) to trigger the bracketed paste test is now - BRACK_PASTE_SLEN-1, like for non-incremental searches - - 10/29 - ----- - -doc/bash.1,lib/readline/rluser.texi - - enable-bracketed-paste: change to note the the current default is `On' - - 10/30 - ----- -lib/glob/glob.c - - wdequote_pathname: if wcsrtombs fails, make sure to check whether it - leaves wpathname set to a non-NULL value before checking whether or - not *wpathname is a null character (indicating an incomplete - conversion). Fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972286 - with an assist from Bernhard Übelacker - - 11/1 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: when checking whether the current character is - one of the isearch `opcodes', only check the multibyte character - member of CXT if we're currently running in a multibyte locale. Don't - assume that other parts of the code will set mb[0] = c and mb[1] = 0. - Report from Detlef Vollmann - -[bash-5.1-rc2 frozen] - - 11/10 - ----- -lib/readline/isearch.c - - _rl_isearch_dispatch: if we are aborting the search, make sure to - call _rl_fix_point and to make sure the point and mark are less - than the new rl_end, in case they got out of sync. Report and fix - from Tillmann Osswald - -test.c - - unary_test: assume the argument has already been expanded (the code - paths for [[ and [ expand it) and add AV_NOEXPAND to the flags passed - to array_value if assoc_expand_once is enabled. Prompted by a report - from Greg Wooledge - -[bash-5.1-rc3 frozen] - - 11/18 - ----- -doc/{bash.1,bashref.texi} - - small tweaks to the ulimit description to make it more consistent with - the Posix standard's terminology - - 12/6 - ---- [bash-5.1 released] 12/7 @@ -10795,3 +1619,27 @@ trap.c - any_signals_trapped: return that a signal is trapped only if it's not ignored. This is an additional opportunity for optimization, reported in https://bugzilla.redhat.com/show_bug.cgi?id=1981926 + + 7/30 + ---- +examples/loadables/sleep.c + - main: if the uconvert conversion fails, but the argument appears to + contain a GNU-like interval specifier like "1m30s", return + EX_DISKFALLBACK so the execute_builtin code tries to run the + external version + +builtins/enable.def + - enable_shell_builtin: if the builtin isn't found, return EX_NOTFOUND + to allow the caller (enable_builtin) to react differently if it + wants to + - dyn_load_builtin: if the shared object isn't found, return EX_NOTFOUND, + change enable_builtin to deal with it + - enable_builtin: if there are no supplied options, and we attempt to + enable a non-existent builtin, try modifying `enable name' to the + equivalent of `enable -f name name' and return success if we + successfully load a builtin from a shared object. Proposed several + times, most recently by Robert Elz + +doc/{bash.1,bashref.texi} + - enable: document new behavior of `enable NAME' when NAME is not a + current shell builtin diff --git a/CWRU/old-changelogs/CWRU.chlog.v16 b/CWRU/old-changelogs/CWRU.chlog.v16 new file mode 100644 index 00000000..299f05a0 --- /dev/null +++ b/CWRU/old-changelogs/CWRU.chlog.v16 @@ -0,0 +1,9177 @@ + + 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 + + 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 + - 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 + +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 + - 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 + + 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 + + + 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 + + 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 + + +builtins/declare.def + - local_builtin: allow `local --help' to work even when not executing + a function. Suggestion from Norm Abramovitz + + 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 + +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 and followup from + Christian Franke + +variables.c + - all_array_variables: include associative arrays, not just indexed + arrays. Reported by Grisha Levit + +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 + + +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 + + +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 + + +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 + +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 + + + 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 and + Valentin Bajrami + +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 + +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 + + 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 + + 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 + + 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 + + + 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 + +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 + + 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 + + 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 + +lib/readline/histfile.c + - chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from + J. Peter Mugaas + +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 + +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 + +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 + + 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 + , 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 + 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 + - 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 + + 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 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 + + 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 + +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 + + 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 + +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 + +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 + + 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 + +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 + +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 + +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 + + - 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 + +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 + - 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 + + 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 + +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 + + 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 + + 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 <\> and + skip to the end of string processing. Fixes oob-read error + reported by Jerzy Kramarz + +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 + + - ANDOR: check s[1] before checking s[2] in case s[1] == end of string. + Fixes oob-read error reported by Jerzy Kramarz + +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 + + +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 + + 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 + + 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 + + 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 + +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 + + +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 + + +tests/execscript + - use $PWD/exec8.sub to protect against someone who has a cd command + in his bashrc. Report from Vladimir Marek + + + 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 + + 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 + +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 + +Makefile.in + - bashbug: use `^' as the sed delimiter instead of `%'; some compilers + use `%' in CFLAGS. Report from Vladimir Marek + + + 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 + + 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 + + 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 character class + +builtins/printf.def + - printf_builtin: when processing the `%q' format, make sure to + backslash quote all 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 + + +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 + +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) + +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 + +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 + + 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 + + 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 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 + +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 + - 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 + - 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 + +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 + + 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 + +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 + + 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 + +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 + + 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 + + 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 + +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 + + 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 + - 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 + + + 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 + +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 + + + 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 + + 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 + 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 , patch was originally + contributed by Geir Hauge + + 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 + + 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 + + +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 + + 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 + +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 + + 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 + +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 + + 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 + +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 + +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 + + 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 + - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore + the nameref attribute. Report from Grisha Levit + + +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 , 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 + +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 + + 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 + + + 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 + + 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 + + + 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 + +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 + +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 + + + 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 + +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 + + 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 + +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 + + 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 + +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 + + 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 + + + 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 + + +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 + + 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 + + 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 + + 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 + + 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 + - 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 + - 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 + +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 + + 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 + - 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 + - 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 + + 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 + +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 + + + 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 + +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 + + +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 + + - 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 + +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 + . 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 , + fix from Eduardo Bustamante + + 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 + + 4/25 + ---- +doc/{bash.1,bashref.texi} + - cmdhist: clarify that this option only has an effect if history is + enabled. Suggested by Matthew Braun + + 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 + + +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 + - 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 + + 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 + + + 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 + +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 + + - 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 + , 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 + + +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 + + + 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 before . Fix from Eli Zaretskii + + +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 + + 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 + + 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 + + 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 + + - 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 + +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 + +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 + + 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 + + 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 + +lib/readline/histfile.c + - read_history_range: if the file isn't a regular file, return an + error. Bug report from Eduardo Bustamante , + 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 + + + 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 , 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 + +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 + + 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 . Report from Chi-Hsuan Yen + + 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 + +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 + - 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 + + +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 + + +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 + +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 + + 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 + + +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 + +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 + +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 + + + 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 + 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 + + 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 + + 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 . 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 + + 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 + + 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 + + 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 + + + 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 + +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 + + + 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 + + - 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 + + +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 + + 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 + + + 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 + + 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 + + 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 + +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 , the result of a fuzzing test. Pointer + to place for the fix from Eduardo Bustamante + + 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 + +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 + + 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 + + + 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 + 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 ; fix + from Eduardo Bustamante + + 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 , 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 + + 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 + + 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 + + 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 + +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 + +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 + + 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 + + - 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 + + 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 + +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 + +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 + - 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 + +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 + + 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 + + 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 + + +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 + + +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 + + 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 + + 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 ; 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 + +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 + + 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 + + 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 + +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 + + 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 + +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 + + 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 + +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 + - 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 + 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 + +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 + + 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 + - 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 + + 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 + + + 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 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 + +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 + + 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 + +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 + + 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 + + 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 + - 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 + + +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 + + 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 + + +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 ÐиÑиллов Ðима + - 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 + + 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 + + + 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 + + + 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 + + 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 + + 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 + + +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 + + + 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 + + +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 + + 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 + +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 + + 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 + + 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 + +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 + + 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 + +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 + +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 + + +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 + + + 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 + + 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 + + + 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 + + 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 + +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 + + 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 + +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 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 + + 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 + +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 + + 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 + + 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 + +lib/sh/getenv.c + - getenv: check that environ is non-NULL before looking through it. + Report and fix from Keeley Hoek + + 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 + 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 + +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 + + + 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 + + - 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 + +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 + + +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 + + + 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 + + + 7/29 + ---- +subst.c + - get_var_and_type: if VALUE is NULL, check before calling dequote_string. + Report and fix from Grisha Levit + + 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 + - 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 + + + 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 + + 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 + + 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 + - {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 + + 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 + + 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 + + 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 + + +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 + + - 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 + - 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 + + 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 + +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 + +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 + +builtins/fc.def,execute_cmd.c + - fixed some missing free()s uncovered by coverity. Report from + Siteshwar Vashisht + +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 + + 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 + +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 + + + 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 + - 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 + +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 , originally from Eli Zaretskii + + + 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 + + + 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 + +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 + + 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 + + 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 + + - 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 + + 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 + + 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 + + + 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 + ; fix inspired by Martijn Dekker + + + 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 + + + 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 + + + 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 + + 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 + +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 + + +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 + + + 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 + +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 + + +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 + + +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 + + + 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 + +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 + - 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 + - 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 + + 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 + + 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 + +[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 + +expr.c + - expr_skipsubscript: fix return type. Report and fix from + Andreas Schwab + + 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 + - 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 + + 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 + +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 + + 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 + + + 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 + + 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 + + 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 + + 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 + + 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 + - 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 + + +examples/loadables/{basename,dirname}.c + - dirname_builtin: skip over any `--' ending the options. Report from + Peng Yu + + 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 + + + 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 + +[bash-5.0 frozen] + +[bash-5.0 released] + + 1/6/2019 + -------- + +examples/loadables/basename.c + - make sure to include bashgetopt.h. Reported by Angel + + +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 + +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 + + 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 + +builtins/declare.def + - declare_internal: don't let `declare -f +f' turn off the function + attribute. Fix from Grisha Levit + - declare_internal: reject attempts to add the -A or -a attributes + to functions. Report from Grisha Levit + + 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 + +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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + +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 + + 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 + + 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 + +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 + +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 + +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 + +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 + + 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 + + + 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 + - 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 + +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 + + 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 + + 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 + + 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 + +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 + - rl_bind_key: make sure the KEY argument is not larger than the + largest unsigned character. + Report and fix from Koichi Murase + - 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 + - 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 + +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 + + + 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 + + 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 + - 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 + + + 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 + +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 + + + 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 + +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 + + + 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 + - 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 + + 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 + +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 + + 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 + - 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 + - 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 + + 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 + + + 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 + +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 + - 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 + + 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 + +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 + + 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 + +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 + +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 + + 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 + + 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 -- - '. From an austin-group + interpretation (1212) initiated by Robert Elz . + 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 + + + 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 + + +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 + + + 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 + + + 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 back in 4/2018 and + addresses the issue raised by Eli Schwartz + - 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ä + +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 + + 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 + +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 + - 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 + + 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 + + +support/shobj-conf + - hpux11: change stanza to create shared libraries on later versions of + HPUX 11. Contributed by Michael Osipov + +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 + + +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 + + 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 + - 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 + +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 + + 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 + + + 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 + +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 + + 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 + + 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 + + + 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 + +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 + +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 + + 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 + + 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 + - "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 + +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 + + - 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 + + - 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 and Robert Elz + + +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 + 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 + +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 + + 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 + +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 + + + 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 + +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 + +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 + + 7/16 + ---- +Makefile.in + - added a number of dependencies from Vemake Vemake + 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 + + + 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 + +shell.c + - set_exit_status: set last_command_exit_value to the argument and make + sure to set PIPESTATUS from that exit value + +shell.h + - set_exit_status: extern declaration + +parse.y + - report_syntax_error: make sure to set PIPESTATUS if we set + last_command_exit_value on a syntax error + - parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS + when we set last_command_exit_value + +sig.c + - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set + last_command_exit_value + +variables.c + - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value + +arrayfunc.c + - find_or_make_array_variable,array_expand_index,assign_compound_array_list: + call set_exit_status to set PIPESTATUS and last_command_exit_value + +builtins/evalstring.c + - parse_and_execute: set PIPESTATUS when we set last_command_exit_value + +braces.c + - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value + +eval.c + - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value + +make_cmd.c + - set PIPESTATUS when setting $? due to syntax errors or constructs + not being available + +expr.c + - expr_streval: set PIPESTATUS when setting $? due to syntax errors + +subst.c + - extract_delimited_string,extract_dollar_brace_string,do_assignment_internal, + call_expand_word_internal,array_length_reference,param_expand, + parameter_brace_expand_word,parameter_brace_expand_rhs, + parameter_brace_expand_error,parameter_brace_expand,err_unboundvar: + set PIPESTATUS when setting last_command_exit_value on error + conditions + +redir.c + - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value + on error conditions + +subst.c + - match_upattern,match_wpattern: if the match length is greater than the + string length, short-circuit and return failure. Fixes bug + reported by Eduardo Bustamante + + 7/22 + ---- +lib/glob/sm_loop.c + - BRACKMATCH: if we think we've matched, tighten up the rules for + the closing right bracket in the bracket expression to be correct + in the presence of invalid character classes, collating symbols, + and equivalence classes. If they're invalid, they shouldn't require + additional right brackets to close them + + 7/25 + ---- +builtins/colon.def + - add the right includes so colon_builtin and false_builtin can take + a WORD_LIST * argument like the prototype says they do + + 7/29 + ---- +lib/readline/kill.c + - _rl_read_bracketed_paste_prefix: read the character prefix that + indicates a pasted string in bracketed paste mode. If we don't + read a valid bracketed paste prefix, push the other characters + back onto the input stack with _rl_unget_char + - _rl_bracketed_read_key: handle reading pasted input when bracketed + paste mode is enabled, including reading multibyte characters; push + anything beyond a single byte back onto the input stack where it + can be read by _rl_read_mbstring or subsequent input + - _rl_bracketed_read_mbstring: handle reading pasted input in bracketed + paste mode, using _rl_bracketed_read_key to get the pasted text, + then call _rl_read_mbstring to get the rest of any multibyte char + + +lib/readline/vi_mode.c + - _rl_vi_callback_getchar: call _rl_bracketed_read_mbstring to handle + bracketed paste mode input. Fixes issue with vi-change-char reported + by + - rl_vi_domove_getchar: just call _rl_bracketed_read_key and return + the result -- we're not interested in multibyte-character input here + yet + - rl_vi_replace: bind BRACK_PASTE_PREF key sequence if bracketed paste + mode has been enabled + - _rl_overstrike_bracketed_paste: key binding function for the bracketed + paste prefix key sequence in overwrite mode; reads the pasted text + and uses rl_vi_overstrike to add each character in overwrite mode. + Fixes issue reported by + + 7/31 + ---- +lib/readline/input.c + - _rl_read_mbchar: the first time through the loop (mb_len == 0), call + _rl_bracketed_read_key to process any bracketed paste characters + +lib/readline/text.c + - _rl_char_search: use _rl_bracketed_read_key in the non-multibyte + character case + +lib/readline/misc.c + - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key + +subst.c + - list_string: if string_extract_verbatim returns something, just make + a WORD_DESC * and add current_word directly to it, noting that we + don't want to free current_word (free_word = 0) + - string_extract_verbatim: if the separator string is the empty + string, don't bother with the loop -- just savestring the string, + update *sindex, and return the copy + - read_comsub: make the string we use to save the output from the pipe + 512 bytes instead of 128 (same size as the buffer used to read from + the pipe); fewer calls to xrealloc in the worst case + - parameter_brace_expand_length: optimize the common case (non-dynamic + scalar variable without `set -u' in effect) and just call MB_STRLEN + on the variable value in that case. From a report from + Alkis Georgopoulos + + 8/13 + ---- +execute_cmd.c + - execute_subshell_builtin_or_function: call subshell_exit() instead of + sh_exit() or exit() so the exit trap gets run. Fixes issue reported + in https://savannah.gnu.org/support/?109840 + - replace __P with PARAMS + +lib/readline/colors.c + - _rl_print_color_indicator: eliminate one use of S_ISLNK. + Report and fix from Christian Biesinger + + 8/22 + ---- +variables.c + - push_posix_temp_var: change to use bind_variable and modify variables + at the current local scope or create and modify variables at the + global scope, as if a standalone assignment statement had been + executed. This restores some bash-4.4 backwards compatibility with + respect to posix-mode assignment statements preceding special + builtins and shell functions. The bash-5.0 behavior, while perhaps + defensible, caused too many compatibility problems. Originally + prompted by several discussions with Martijn Dekker; the current + incarnation and tests based on a report to Debian BTS from + Thorsten Glaser + + 8/26 + ---- +shell.c,bashhist.c + - __P -> PARAMS + +shell.c + - set_option_defaults,reset_option_defaults: before calling + list_minus_o_options at invocation, call set_option_defaults to + set the options that are initialized to -1 to either 1 or 0, as + appropriate; then call reset_option_defaults to set them back to -1 + after list_minus_o_options returns + - init_interactive: if enable_history_list == -1, set it to 1, then + set remember_on_history to enable_history_list. Fixes bug reported + by Alex Kerzner + - init_noninteractive: if enable_history_list == -1, set it to 0, let + bash_history_reinit take care of setting remember_on_history + - init_interactive_script: if enable_history_list == -1, set it to 1, + then set remember_on_history to enable_history_list + +bashhist.c + - enable_history_list: initialize to -1 to note when it gets changed + by -o history or +o history at invocation + + 8/28 + ---- +lib/readline/terminal.c + - TGETENT_SUCCESS, TGETFLAG_SUCCESS: defines to represent successful + returns from tgetent and tgetflag, since HPUX manages to get them + wrong. New patch from Osipov, Michael + - TGETFLAG: new define, make sure tgetflag returns TGETENT_SUCCESS + - _rl_init_terminal_io: use TGETENT_SUCCESS and TGETFLAG + +configure.ac + - hpux: make sure to define TGETFLAG_BROKEN + + 8/30 + ---- +tests + - add copyright notices to all scripts longer than 15 lines at the + request of the FSF + + 9/1 + --- +lib/readline/complete.c + - _rl_complete_internal: move logic that checks whether the last + completion attempt failed and the current attempt returned a single + match and insert the single completion here. A better implementation + of Richard Stallman's suggestion of 2/23. + + 9/3 + --- +bashline.c + - edit_and_execute_command: reset the readahead token after calling + restore_parser_state, in case some call to reset_parser set + token_to_read. Fixes bug reported by null + + 9/9 + --- +execute_cmd.c + - execute_command_internal: if we're executing a command list + (executing_list != 0), save the old fifo list and close any new + FIFOs that the command opens. Fixes bug reported by + Kamil Cukrowski + + 9/10 + ---- +aclocal.m4,m4/intdiv0.m4 + - make sure `exit' is used consistently with included + - make sure `main' isn't declared to implicitly return int + - include before using ulimit + - include before testing string functions + - fixes from Florian Weimer + +configure.ac + - setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL, + which always fails + +shell.c + - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of + the HAVE_DECL variants, which always fail configure tests + +m4/intl.m4 + - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in + newer gettext releases + + 9/16 + ---- +builtins/help.def + - help_builtin: make the closing quote printed after the argument list + for a glob pattern argument a translatable string to ease translation + for certain languages. Report from Roland Illig + +builtins/{reserved,complete,exec,getopts}.def + - minor typographical fixes from Roland Illig + +siglist.c + - include general.h for INT_STRLEN_BOUND + - initialize_siglist: use the same string for the strlen and xmalloc + for the message about an unknown signal number; use INT_STRLEN_BOUND + instead of a fixed 10 for the number + +builtins/getopts.def,doc/{bash.1,bashref.texi} + - getopts: minor changes to the description of the effect of supplying + additional arguments. Report from Roland Illig + + 9/17 + ---- +jobs.[ch] + - save_proc_status: external interface to bgp_add, takes care of + blocking and unblocking SIGCHLD + - __P -> PARAMS + + 9/18 + ---- +jobs.[ch] + - procsub_{free,add,search,delete,waitpid,waitall,clear,prune}: new + functions to keep track of the list of active process substitutions + and their statuses. Implementation is currently a singly-linked list + of PROCESS *, so functions that expect a PROCESS * to manipulate + continue to work. Inspired by report from leo.dalecki@ntymail.com + - find_pipeline,cleanup_dead_jobs,wait_for_background_pids: call new + procsub_* functions to manage procsub list; don't call the functions + in subst.c any more + +subst.c + - process_substitute: call procsub_add with the PROCESS * returned + from make_child; let the functions in jobs.c manage the list. + waitchld continues to set the pid field in the fifo list as a hint + that a particular fd or FIFO is no longer used and can be reaped + - process_substitute: let the child process clear out any existing + procsub pid list + - wait_procsubs: no longer compiled in + +sig.c + - termsig_handler: replace discard_last_procsub_child with call to + procsub_clear + +lib/readline/display.c + - init_line_structures: fix a problem which results in references to + uninitialized memory when gdb sets the number of columns to 32767 + (their `unlimited'). Modification of change from 5/23. Report and + fix from Andrew Burgess + + 9/19 + ---- +parse.y + - xparse_dolparen: after calling parse_string to consume input, make + sure to reset the parser (reset_parser()) before restoring the EOF + token and the parser_state variable. Fixes issue with nested traps + running command substitutions in command lines with command + substitutions reported by Travis Everett + + 9/20 + ---- +doc/{bashref.texi,bash.1} + - fixed a typo in the example for the =~ operator: the ? should follow + the (a), not precede it. Report from hk + - some changes to the text describing regular expression matching for + the =~ operator + + 9/25 + ---- +general.c,builtins/shopt.def + - posix_glob_backslash: remove references to this variable and the + `posixglob' shell option + +doc/{bash.1,bashref.texi} + - remove references to the `posixglob' shell option + + 9/26 + ---- +{jobs,nojobs}.c + - DEFAULT_MAX_CHILD: bump this up to 4096 + - set_maxchild: set lmaxchild to MAX_CHILD_MAX if getmaxchild returns + -1 without changing errno (assume that sysconf returns -1 meaning + unlimited) + - initialize_job_control: call set_maxchild instead of inline code + - mark_dead_jobs_as_notified: call set_maxchild to set js.c_childmax + if it hasn't been set yet + + 9/30 + ---- +lib/glob/xmbsrtowcs.c + - xwcsrtombs: implementation of wcsrtombs from gnulib, modified to + treat invalid wide characters (or wide characters that can't be + converted to multibyte character sequences) as bytes. Should be + used only in unusual circumstances where wcsrtombs fails. + +lib/glob/glob.c + - wdequote_pathname: if wcsrtombs fails to convert the dequoted wide + character pathname back to a sequence of multibyte characters, call + xwcsrtombs to try to treat the invalid wide characters as bytes -- + the call to xdupmbstowcs treats bytes that don't convert to wide + characters as just bytes, which kind of causes this problem in the + first place. Inspired by report from Geoff Kuenning + +lib/readline/complete.c + - compute_lcd_of_matches: use the case-folding code (which performs + character-by-character checking and compares invalid multibyte + sequences as bytes) instead of the old case-sensitive code (which + used _rl_compare_chars), converting characters to lowercase as + needed. Fixes bug with invalid sequences in common filename prefixes + reported by Grisha Levit + + 10/1 + ---- +builtins/shopt.def + - reset_shopt_options: add in resets for some missing shopt options. + Report and fix from Grisha Levit + +execute_cmd.c + - execute_command_internal: make sure a failed attempt to define a + shell function causes the shell to exit if -e is enabled. Report + from Andreas Kusalananda Kähäri + - execute_command_internal: combine cm_function_def, cm_arith, and + cm_cond cases into one switch case, since the code is virtually + identical across all three + + 10/3 + ---- +pathexp.[ch],lib/glob/glob.c,lib/glob/glob_loop.c + - remove all references to posix_glob_backslash in preparation for + implementing austin group interpretation #1234 + +pathexp.c + - unquoted_glob_pattern_p: revert to bash-4.4 behavior of returning 1 + only if there is an unquoted `*', `?', or bracket expression, as + per austin group interpretation #1234 + +lib/glob/glob_loop.c + - INTERNAL_GLOB_PATTERN_P: revert to bash-4.4 behavior of returning 1 + only if there is an unquoted `*', `?', or bracket expression, as + per austin group interpretation #1234 + + 10/4 + ---- +variables.c + - assign_seconds,get_seconds: use the tv_sec value returned from + gettimeofday() instead of time() to get a better approximation of + the number of seconds since the epoch for future calculations. + From a report by Stephane Chazelas + +pathexp.[ch],{bashline,subst}.c + - shell_glob_filename: now takes an additional flags argument to pass + to quote_string_for_globbing + + 10/6 + ---- +subst.c + - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC + because quote removal hasn't been performed yet + + 10/7 + ---- +pathexp.c + - quote_string_for_globbing: if we have an unquoted backslash followed + by a CTLESC-quoted character (not CTLESC-CTLESC), just perform the + usual CTLESC-to-backslash conversion instead of skipping over it. + Fixes issue raised in austin-group discussion about globbing by + Geoff Clare (austin-group issue 1234), though + it's still inherently ambiguous + + 10/8 + ---- +include/shmbutil.h + - xwcsrtombs: extern declaration, to match other functions in that file + +lib/glob/glob.c + - wcdequote_pathname: new function, actual backslash quote removal code + from wdequote_pathname; wdequote_pathname calls it + +lib/glob/glob.c + - {udequote,wcdequote}_pathname: now public void functions + +lib/glob/smatch.c + - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or + wcdequote_pathname + +lib/glob/sm_loop.c + - DEQUOTE_PATHNAME: appropriate extern declaration + - BRACKMATCH: call DEQUOTE_PATHNAME to dequote a character class name + in a bracket expression. This is the result of a discussion on the + austin-group mailing list, from Geoff Clare and + Robert Elz + + 10/10 + ----- +execute_cmd.[ch] + - async_redirect_stdin: now a global function + +subst.c + - process_substitute: call async_redirect_stdin in the child to keep + it from having stdin connected to the terminal, since it's not a + job control process + + 10/11 + ----- +subst.c + - process_substitute: in the child process, set interactive = 0, since + an asynchronous process substitution process is not interactive. + Seems to fix issue reported by Grisha Levit + +lib/sh/shmatch.c + - sh_regmatch: implement a suggestion from Grisha Levit + and don't allow nocaseglob to enable case- + insensitive regexp matching. It hasn't been documented that way + in years + + 10/30 + ----- +bashhist.c + - bash_add_history: fix a couple of problems with adding extra blank + lines to history entries containing here-documents. Fixes bug + reported by Oguz + +lib/sh/shmatch.c + - BASH_REMATCH: no longer set to readonly. From a suggestion from + Rocky Bernstein + +doc/{bash.1,bashref.texi} + - BASH_REMATCH: document that it's no longer set to readonly + +subst.c + - getpattern: since expand_string_for_pat leaves the pattern quoted, + we need to remove quoted nulls before running the string through + string_list (and then quote_string_for_globbing, since QGLOB_CVTNULL + only handles pat[0] == CTLNUL). Fixes bug reported by Oguz + + + 11/4 + ---- +configure.ac,config.h.in + - AC_HEADER_MAJOR: look for `major' and `minor' in various header files + and define MAJOR_IN_MAKEDEV or MAJOR_IN_SYSMACROS as appropriate. + From a patch from Eli Schwartz + +examples/loadables/finfo.c + - include and as appropriate for + definitions of major/minor + + 11/6 + ---- +redir.c + - heredoc_expand: if we are expanding the WORD in a here-string, use + expand_assignment_string_to_string so the expansions are consistent + in contexts where word splitting is not performed. From a bug report + by Robin A. Meade + + 11/7 + ---- +parse.y + - xparse_dolparen: if the command substitution is incomplete or doesn't + end in `)', print an error message instead of allowing EOS to + terminate the comsub. From a bug report from + Oguz + + 11/11 + ----- +lib/sh/unicode.c + - u32toutf8: fix a typo that assigned the wrong value to the first + byte of a six-byte UTF-8 character. Report and fix from + István Pásztor + + 11/15 + ----- +doc/bash.1,lib/readline/doc/{history.3,hsuser.texi} + - quick substitution: make it clear that ^s1^s2^ is equivalent to + !!:s^s1^s2^, since that's the internal transformation we perform. + Reported by Jim Monte + - note that the `q' and `x' modifiers are mutually exclusive; last + one wins. Reported by Jim Monte + - note that the `G' modifier can work with `&' as well as `s'. + Reported by Jim Monte + - note that a word designator of `-' is equivalent to `0-'. + Reported by Jim Monte + - note that a missing `new' in a substitution modifier causes + instances of `old' to be deleted + +lib/readline/histexpand.c + - history_expand_internal: make multiple :p modifiers work to suppress + execution. Reported by Jim Monte + - get_history_word_specifier: fix so a `^' word designator works as + the second part of a range. + Reported by Jim Monte + - hist_error: make sure we don't blindly copy a null character into + the error string (e.g., if there is a missing word designator + following `:'). Reported by Jim Monte + - get_history_event: if the history event specifier (!) is followed + immediately by a `-' and a non-digit (e.g. !-a), make sure the - is + treated as part of a search string instead of making it an offset of + 0. Reported by Jim Monte + + 11/19 + ----- +lib/readline/{colors,complete,histfile,input}.c,support/shobj-conf + - fixes to make readline compile on the latest HPE Nonstop (Tandem) + releases. From Randall S. Becker + +subst.c + - pat_subst: if we have a null match, make sure we advance by one + character, not one byte. Bug reported by Chris Carlen + + + 11/22 + ----- +jobs.[ch],nojobs.c,builtins/jobs.def + - get_job_by_pid: now takes a PROCESS ** third argument; if non-null, + it gets a pointer to the PROCESS struct corresponding to the PID + argument. A convenience, not used by any caller yet + +builtins/wait.def + - interrupt_immediately: remove any uses, no longer used anywheren + +variables.c + - check_unbind_variable: return -2 if the variable name is readonly + (change) or non-unsettable (new) to differentiate the return value + from -1 from makunbound (which means variable not found) + +builtins/common.[ch] + - builtin_unbind_variable: identical to check_unbind_variable but calls + builtin_error; for use by builtin commands + +buitins/wait.def + - wait_builtin: now has -p VARNAME option, which takes the pid + returned by `wait -n' or wait without arguments and assigns it to + VARNAME, unsetting VARNAME first. Requested by Robert Elz + after a similar feature in netbsd sh (not + completely compatible yet) + +doc/{bash.1,bashref.texi} + - wait: document new -p option + + 11/25 + ----- +lib/readline/display.c + - rl_redisplay: auto-set horizontal scrolling if the terminal has + only one line; disable it if we auto-set it if the terminal grows + to more than one line. Fix from Sören Tempel + + +lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 + - horizontal-scroll-mode: document auto-setting behavior + +builtins/set.def + - set_posix_mode: make setting posix mode when it's already set, or + unsetting it when it's not set, a no-op. Inspired by a report + from Ulrich Mueller + + 11/26 + ----- +doc/{bash.1,bashref.texi} + - functions: clarify that when in default mode, function names are not + limited to shell identifiers. + Suggested by Reuti + + 11/27 + ----- +lib/readline/display.c + - _rl_optimize_redisplay: tell the redisplay routines to not worry + about calculating differences between the lines and just draw the + new one. Right now, it just sets the _rl_quick_redisplay flag + - rl_redisplay: if _rl_quick_redisplay is set, just draw NEW onto + the screen at column 0 with a dumb update and clear the rest of + the line. Intended to be used when the caller knows the new line is + sufficiently different from the old one (e.g., when drawing the + i-search prompt for the first time) that it doesn't pay off to do + the calculations. As a side effect, fixes the bug reported by + ÐлекÑей Шилин + +lib/readline/isearch.c + - rl_display_search: if there isn't a search string, assume this is + the first time this is called and call _rl_optimize_redisplay to + give the redisplay code a hint + + 12/2 + ---- +builtins/wait.def + - wait_builtin: allow argument to -p to be a valid array subscript + + 12/3 + ---- +lib/readline/isearch.c + - _rl_isearch_fini: add call to _rl_optimize_redisplay because we are + switching the prompt back again and it's safer to redraw everything + (even though part of the line is the same) to deal with differences + in the prompt strings. Fixes additional problem reported by + ÐлекÑей Шилин + +lib/readline/display.c + - update_line: quick redisplay no longer sets cpos_adjusted before + the dumb update + - update_line: adjust _rl_last_c_pos in the case of a dumb update if we + are redrawing the prompt that includes invisible characters, since + _rl_col_width does not. We adjust by the count of invisible chars in + the first line of the prompt + - update_line: make sure to clear the rest of the line if it looks like + the number of visible characters on the new line is less than the + number of visible characters on the current line; the old calculation + does that just for the number of bytes (which is also useful) + + 12/4 + ---- +lib/readline/display.c + - rl_redisplay: if we are changing from one line to multiple lines, + don't try quick redisplay + - update_line: changes to quick redisplay to take advantage of knowing + the physical length of the prompt to avoid having to compute column + widths of the prompt string again; moved code to call clear screen + to the quick update section; no longer performs `goto dumb_update' + - update_line: try to take advantage of prompt_physical_chars when we + know we have written the prompt string (several places) to set + _rl_last_c_pos and calculate column widths + - update_line: if the spot where the old and new lines are the same is + before the end of the prompt string, adjust NLS and OLS so we write + the entire prompt string (as long as it's all on one line) and can + take advantage of already knowing prompt_physical_chars so we don't + have to compute column widths + - update_line: when copying chars from first diff to last match, adjust + _rl_last_c_pos by prompt_invis_chars_first_line, not wrap offset, + since we are on the first line, and only do this if we inserted more + bytes than wrap_offset (old code checked _rl_last_c_pos, which is + wrong in the presence of multibyte characters) + + 12/5 + ---- +lib/readline/display.c + - ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos + is changed + + 12/12 + ----- +lib/readline/isearch.c + - _rl_isearch_dispatch: check for multibyte characters mapped to one + of the editing functions we treat specially to modify the search + string + + 12/13 + ----- +support/shobj-conf + - FreeBSD and Dragonfly are ELF-only and can use the same code as + Linux, so add those to the linux stanza and remove the old FreeBSD + version-specific sections. Report and fix from Baptiste Daroussin + + +bashline.[ch] + - bash_execute_unix_command: no longer static, available for other + parts of the shell to use + +bashline.c + - unbind_unix_command: take a key sequence as an argument, and unbind + it in the appropriate unix command keymap + +builtins/bind.def + - unbind_keyseq: if we are unbinding a key sequence bound to + bash_execute_unix_command, which means it was added by `bind -x', + call unbind_unix_command() to remove it from the appropriate unix + command keymap. Fixes issue originally raised by + Koichi Murase and recently by + Å imon Let + - bind_builtin: check the number of bindings to bash_execute_unix_command + before and after a call to rl_parse_and_bind and if there are fewer + after binding, we know that the bind has re-bound one of the key + sequences that was bound to execute a shell command. We unbind any + key sequences from the list before the call to rl_parse_and_bind that + don't appear in the list after the call using unbind_unix_command + + 12/19 + ----- +include/posixstat.h + - added some definitions for MinGW. Report and patch from + Eli Zaretskii + + 12/20 + ----- +lib/readline/display.c + - update_line: when wrapping lines containing multibyte characters at + the wrap point, and the number of screen positions consumed by the + first character on the new line isn't the same as the old line, + make sure we set OE before the `goto dumb_update;' since clearing + the rest of the line may use it. Tentative fix for bug reported by + Kirill Chibisov + +lib/readline/signals.c + - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code, + like _rl_handle_signal does + + 12/26 + ----- +lib/sh/stringvec.c + - strvec_posixcmp: new function that conforms to posix requirement for + sorting globs: perform a bytewise comparison if the two strings + collate equally. Posix interp 963 and 1070 + - strvec_sort: take a new flags argument, if non-zero use the posix + string comparison function + +pathexp.c + - shell_glob_filename: call strvec_sort with the flag value to be + posix conformant + +lib/sh/stringlist.c + - strvec_sort: change callers + + 12/29 + ----- +sig.c + - throw_to_top_level: set running_trap to 0 after calling run_trap_cleanup. + This avoids spurious (in non-release versions) warnings from + run_pending_traps the next time a trap handler for that signal + runs. Bug report from Martijn Dekker + + 1/14/2020 + --------- +bashline.c + - find_cmd_start: don't treat the open brace in brace expansion as a + command start character; only treat open brace specially if it can + be a reserved word. Fixes bug reported back in October, 2019 in + https://savannah.gnu.org/support/index.php?110063 + + 1/15 + ---- +lib/readline/readline.c + - _rl_dispatch_subseq,_rl_subseq_result: if we push back a character + with _rl_unget_char or otherwise go back up the chain without a + sequence match, make sure we back up in rl_executing_keyseq. + Report and fix from Koichi Murase + +builtins/bind.def + - unbind_keyseq: if we unbind something that ends up pointing to a + shadow keymap, restore the ANYOTHERKEY binding that we used when + binding it. + Report and fix from Koichi Murase + +bashline.c + - bash_execute_unix_command: if we walked cmd_xmap for rl_executing_keyseq + and ended up pointing to a keymap (type == ISKMAP) we want the + binding for ANYOTHERKEY instead. + Report and fix from Koichi Murase + +lib/readline/bind.c + - rl_bind_key: if we're trying to bind a key sequence containing '\0' + using the old-style binding syntax (C-SPC), make sure we quote the + NULL so it will make it through rl_translate_keyseq(). + Report and fix from Koichi Murase + - rl_bind_key: if we're overwriting a binding for a macro, make sure to + free the old macro value. + Report and fix from Koichi Murase + - rl_generic_bind: if we're overwriting a macro saved to ANYOTHERKEY in + a shadow keymap created by rl_generic_bind, make sure to free the + macro data. + Report and fix from Koichi Murase + +trap.c + - run_pending_traps: save and restore the value of running_trap around + cycle through pending signals so recursive trap handler calls don't + set running_trap to 0 + - _run_trap_internal: allow some signals the shell treats specially + (e.g., SIGINT) to run recursive handlers + - _run_trap_internal: don't turn off SIG_INPROGRESS flag if it was on + for this signal when _run_trap_internal was called + - _run_trap_internal: save and restore the value of running_trap around + running the trap handler, except for SIGCHLD. Fixes bug reported by + Martijn Dekker + + 1/16 + ---- +general.c + - posix_initialize: if turning posix mode off, restore settings from + any saved set, if one exists, instead of setting a default environment + + 1/17 + ---- +parse.y,subst.c + - process_substitution: now available in POSIX mode. Most recently + requested by Martijn Dekker ; requested several + times in the past + +doc/bashref.texi + - posix mode: remove restriction that posix mode is not available + +lib/readline/vi_mode.c + - rl_domove_motion_callback: make sure to extend rl_line_buffer so it + can hold the dummy blank character we're appending. From a fuzzing + report by Tillmann Osswald + - vi_yank_dispatch: after we do an undo, make sure to fix point to be + less than the (new) rl_end + +lib/readline/text.c + - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on + invalid multibyte sequences + + 1/18 + ---- +test.c + - for the `-v' operator, use a clever trick from Martijn Dekker and + just test whether N is between 0 and $#. + + 1/21 + ---- +lib/readline/text.c + - rl_change_case: fix argument to rl_extend_line_buffer; make sure to + reset s and e after call in case rl_line_buffer was reallocated + +lib/readline/vi_mode.c + - _rl_vi_save_replace: if start ends up being less than zero, make + sure we don't read before the start of rl_line_buffer + - rl_vi_overstrike_kill_line,rl_vi_overstrike_kill_word: replacement + functions for ^U and ^W in vi overstrike mode, to keep right value + for vi_replace_count. + - rl_vi_overstrike_yank: similar for ^Y and rl_yank + + 1/22 + ---- +lib/readline/display.c + - update_line: if we're trying to wrap lines on an autowrap terminal, + punt and do a dumb update if the number of bytes in the first char + on the new line is greater than the number of bytes in the first char + of the old line. There's no guarantee we'll be able to extend the + old line buffer enough to accommodate the new bytes + - update_line: try to avoid some operations when wrapping lines if the + number of bytes in the first characters of the old and new lines is + the same + - update_line: when updating vis_lbreaks after fixing up the lines when + wrapping, make sure we don't exceed an index of _rl_vis_botlin when + updating the line break offsets + +lib/readline/text.c + - rl_delete_text: if deleting text leaves the mark past rl_end, adjust + it to rl_end + +lib/readline/vi_mode.c + - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting + rl_point to rl_mark + + 1/23 + ---- +lib/readline/kill.c + - rl_kill_region,region_kill_internal: call _rl_fix_point + +lib/readline/text.c,lib/readline/rlprivate.h + - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end + + 1/24 + ---- +lib/readline/bind.c + - rl_translate_keyseq: rework how key sequences are translated with + the intent of normalizing backslash treatment. Since the current + behavior of, e.g., \C-\\, is inconsistent, this change chooses to + effectively treat and display \\ as \\ instead of \C-\. This is not + completely backwards compatible, but it seems like the most reasonable + choice. This allows things like \M-\a but is not compatible with + pre-bash-4.4 (readline 7.0) handling of \C-\, which is now treated + like \C-\0. If that proves to be a problem, we can add code to + understand \C-\ as equivalent to \C-\\. Since attempting to bind + "\C-\" has generated an error for a long time, it doesn't seem like + it will be too much of a problem. + Fixes from Koichi Murase + - rl_invoking_keyseqs_in_map: make sure to consistently output + backslash as `\\' instead of producing `\C-\' + Fixes from Koichi Murase + + 1/29 + ---- +bashline.c + - readline_get_char_offset: translate a readline buffer offset + (rl_point, rl_mark, rl_end) into a number of (possibly multibyte) + characters + - readline_set_char_offset: translate a number of (possibly multibyte) + characters into a buffer offset in rl_line_buffer. Uses a private + readline function to do it, which is bad + - bash_execute_unix_command: use readline_{get,set}_char_offset to + translate the rl_point to a character offset + - bash_execute_unix_command: bind READLINE_MARK variable, exposing + the value of rl_mark to `bind -x' functions + +doc/{bash.1,bashref.texi} + - READLINE_MARK: document new variable set by the shell + + 1/31 + ---- +examples/loadables/accept.c + - accept: new loadable builtin that will accept a TCP connection on a + specified port. Inspired by Stan Marsh + + 2/1 + --- +lib/readline/histfile.c + - history_do_write,history_truncate_file: translate the return value rv + to errno when histfile_restore returns -1 (e.g., if rename() fails). + Report and fix from A + + 2/3 + --- +lib/sh/ufuncs.c + - fsleep: if pselect/select is interrupted by a signal, return -1 and + let the caller deal with it + +lib/sh/timeval.c + - multimeval: new function, multiply a timeval by a constant integer + - divtimeval: new function, divide a timeval by a constant integer + +lib/sh/uconvert.c + - uconvert: new additional argument: EP. If non-null, it gets the + address of the first non-digit that ends conversion (like strtod); + we try to do as much of the conversion as possible if EP is set so + the caller can clean up + + 2/4 + --- +examples/loadables/mkfifo.c + - mkfifo: new loadable builtin + + 2/6 + --- +variables.c + - make_local_variable: make sure local variables that have the same + names as variables found in the temporary environment are marked as + local. From Grisha Levit back in 12/2018 + + 2/7 + --- +sig.[ch] + - restore_sigmask: function to restore top-level signal mask using + sigprocmask + +{sig,eval,jobs,nojobs}.c + - replace calls to sigprocmask with restore_sigmask(); remove extern + declarations of top_level_mask + +sig.c + - initialize_shell_signals: if SIGCHLD is blocked at shell startup, + not only remove it from top_level_mask but make sure it's unblocked + +execute_cmd.c + - execute_pipeline: if lastpipe is enabled and we're executing the + rightmost pipeline element in the current shell, make sure to unblock + SIGCHLD before calling execute_command, in case `return' or `exec' + is run and that call doesn't return. From a report by + Harald van Dijk following up to a report + by Martijn Dekker + + 2/10 + ---- +builtins/trap.def + - trap_builtin: in posix mode, when trap is run with -p, show + the disposition of all signals, even those that are still in the + default state, including signals that were ignored when the shell + starts up and haven't been reset. Don't do it in default mode. + From an austin-group discussion back in April, 2019 (interp 1211) + +findcmd.c + - search_for_command: don't add commands without the execute bit set + to the command hash table. From https://savannah.gnu.org/patch/?9789 + contributed by michaeljs1990 + + 2/11 + ---- +expr.c + - strlong: require `base#' to be followed by an integer constant; + otherwise throw an error. From a report from Jeremy Townshend + back in June, 2019 + +test.c + - unary_test: allow -v N to test whether or not positional parameter + N is set. Most recently suggested by Peng Yu + and Martijn Dekker + +builtins/getopts.def + - dogetopts: use number_of_args() to compute the number of positional + parameters + +{findcmd,variables,subst,trap,sig}.h,builtins/common.h + - __P --> PARAMS + +builtins/shift.def,builtins/common.c + - shift_builtin: moved code that modifies dollar_vars and rest_of_args + to common.c:shift_args(int times), part of move to localize changes + to positional parameters + +builtins/common.c,variables.c + - posparam_count: keep a running count of the number of posititional + parameters when dollar_vars and rest_of_args are set + + 2/12 + ---- +subst.c + - number_of_args: just return posparam_count + +builtins/shift.def + - shift_builtin: if asked to clear the positional parameters with + something like `shift $#', just call clear_dollar_vars instead of + iterating through them, unsetting them one by one + +subst.[ch],builtins/common.[ch] + - number_of_args: moved to builtins/common.c + + 2/14 + ---- +subst.c + - clear_fifo_list: when using named pipes, clear out the FIFO list + without unlinking anything and set NFIFO to 0 + +execute_cmd.c + - execute_disk_command: in the child, clear out the FIFO list, since + we haven't created any FIFOs yet + - execute_in_subshell: clear out the FIFO list, since we haven't + created any FIFOs yet + +parse.y + - special_case_tokens: allow `time -- command' + + 2/21 + ---- +subst.c + - get_var_and_type: if an unset variable (not an array) is supplied + with the `[@]' subscript, don't return "". Fix to bug reported by + Arfrever Frehtes Taifersar Arahesis ; + original bug introduced 7/29/2018 + - array_transform: take a STARSUB argument instead of VARNAME, since + we've already computed what kind of index the array reference uses + in get_var_and_type, and passing VARNAME to figure out the index + type doesn't do the right thing when we're using indirect variable + expansion. Fixes bug reported by + Arfrever Frehtes Taifersar Arahesis + - array_remove_pattern: take the same new STARSUB argument for the + same reason + - parameter_brace_transform,parameter_brace_remove_pattern: change + callers to pass STARSUB instead of VARNAME + + 2/22 + ---- +execute_cmd.c + - fix_assignment_words: if an assignment is supplied to a builtin that + creates or modifies local variables while a function is executing, + set the W_FORCELOCAL flag for that word in addition to any of the + various assignment flags + +subst.c + - shell_expand_word_list: while processing a list of assignments that + are arguments to a builtin that creates or modifies local variables, + if make_internal_declare fails while attempting to create the local + variable (or give it attributes), skip attempting the assignment but + otherwise do not make this a fatal error. This results in two error + messages: one to create the variable or modify its attributes, and + one while attempting to assign the value, but the errors to not + cause the function to return immediately. Fixes inconsistency + reported by Arfrever Frehtes Taifersar Arahesis + + + 2/23 + ---- +trap.c + - first_pending_trap: generalize into first_pending_trap and + next_pending_trap + +wait.def + - wait_builtin: close up the trapped-signal-arrives hole a little more + by looking for a signal that arrived between the last check for + pending traps and setting wait_intr_flag and behaving as if it + arrived while wait was executing. Use first_pending_trap and + next_pending_trap to find a pending trap that is not SIGCHLD + +trap.c + - trap_handler: longjmp to wait_intr_buf unconditionally if + wait_intr_flag is set; don't bother with interrupt_immediately any + more + +variables.c + - all_local_variables: now takes an arg saying whether to restrict + return value to visible variables or return all local variables, + even those that are unset (the new default) + - visible_variable_in_context: new function, restricts return values + to set local variables in the current context; variable_in_context + now returns all local variables in the current context, even the + unset ones + +variables.h + - all_local_variables: change extern function declaration + +builtins/setattr.def + - show_local_var_attributes: show all local variables at the current + variable context, including unset ones, and their attributes + - show_localname_attributes: show attributes for NAME as long as NAME + resolves to a local variable at the current variable context, even + if NAME is unset + +builtins/common.h + - show_local_var_attributes, show_localname_attributes: new extern + declarations + +builtins/declare.def + - declare_internal: allow `-p' option for `local' builtin + - declare_internal: if `local' is supplied without options, or with + the `-p' option, but no variable name arguments, display all local + variables at the current variable context by calling + show_local_var_attributes + - declare_internal: if `local -p' is supplied with variable name + arguments, call show_localname_attributes to display the attributes + for that name if it resolves to a local variable at the current + variable context. Fixes issue reported by + pepa65 + +subst.c + - array_var_assignment: if VAR is unset, print the declare command + without the assignment statement, just with the attributes + - array_transform: special-case the 'a' attribute and return the + attribute string even if the array variable is unset. Feature request + from Arfrever Frehtes Taifersar Arahesis + - parameter_brace_transform: if asked to display the attributes and + value ('A') of an unset variable, make sure we pass the variable, if + it exists with attributes but without a value, to string_transform + - string_transform: if we don't have a value but the operator is 'A', + pass the variable through to string_var_assignment + - string_var_assignment: if we have an unset variable with attributes, + return a declare command that just sets the attributes. Feature request + from Arfrever Frehtes Taifersar Arahesis + + 2/24 + ---- +locale.c + - mblen: don't try to use unless HANDLE_MULITBYTE is defined. From + https://savannah.gnu.org/support/?110200 + - set_default_locale: if HAVE_SETLOCALE isn't defined, set the default + locale to "C" + + 2/25 + ---- +general.c + - interrupt_immediately: remove all references to this that are + already commented out + + 3/2 + --- +variables.c + - push_var_context,push_posix_tempvar_internal: assignment statements + preceding shell functions no longer persist after the function + completes in posix mode. POSIX interp #654, was in P1003.1-2017 + - push_posix_temp_var: variable assignments preceding special builtins + now act as if an assignment statement had been executed in posix mode + (the Posix `current execution environment') instead of unconditionally + creating a global variable + +trap.c + - clear_pending_traps: new function, just clears the pending traps flag + for all signals + + 3/6 + --- +execute_cmd.c + - execute_in_subshell: check for interrupts and terminating signals + before resetting the terminating signal handlers, and clear all + pending traps -- they're not pending for us and we should not run a + trap handler for them + - execute_in_subshell: enable bash-5.1 change from 11/29/2018 that + resets the signal-in-progress flag if we're running a command in + a subshell, since we're not running the trap command (we are the + trap command) + + 3/10 + ---- +subst.c + - parameter_brace_expand: if we assign the empty string to a variable + using the [:]= expansion in a quoted expansion, make sure we note + we are returning a quoted null string to the caller by setting + W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo + + + 3/17 + ---- +lib/readline/histfile.c + - history_truncate_file: only chown the file if we really need to. From + alex@lisas.de via https://savannah.gnu.org/support/?110207 + +lib/readline/bind.c + - rl_unbind_function_in_map: since we are looking for functions, not + key sequences, descend into keymaps attached to the keymap passed + as an argument. From a report from lockywolf@gmail.com back on 2/27, + TENTATIVE CHANGE + +variables.h + - MKLOC_ARRAYOK,MKLOC_ASSOCOK: new flags values for + make_local_{array,assoc}_variable so we can avoid hard-coded values + of 1 and make it possible to eventually pass in additional flags + +builtins/declare.def + - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK + - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK + +variables.c + - make_local_{array,assoc}_variable: understand new flags, pass + MKLOC_INHERIT to make_local_variable if it appears in the flags + argument + +builtins/declare.def + - declare_internal: add a new -I option for local and declare that + inherits attributes and value from a variable with the same name + at a previous scope. Inspired by netbsd sh + - if -I option is supplied, pass MKLOC_INHERIT to make_local_variable + and its array counterparts make_local_{array,assoc}_variable + +subst.c + - shell_expand_word_list: pass -I to declare if constructing a declare + command with make_local_declare, meaning we have an array or assoc + compound assignment. (Slighty unsatisfactory, but ok for now) Fix + for bug report from Kevin Locke , + https://savannah.gnu.org/support/index.php?109669 + + 3/18 + ---- +examples/loadables/basename.c + - basename_builtin: handle -- option without crashing. Report by Peng Yu + + +jobs.c + - notify_of_job_status: if in posix-mode shell is started with -c, + jobs should print the status of completed jobs. From a report by + Robert Elz back in 12/18 + + 3/19 + ---- +variables.c + - assign_in_env: if we're assigning POSIXLY_CORRECT or POSIX_PEDANTIC + in the temporary environment, save the values of the options + affected by posix mode so we can restore them when we restore the + old value of the variable after the command executes. Suggested by + Martijn Dekker + + 3/20 + ---- +syntax.h + - slashify_in_here_document: add `"' to this list, since POSIX says + that backslashes in here documents behave like backslashes in + double quotes, and backslash can quote a double quote in a double- + quoted string. This means that given P=A, + + cat < back in 1/2019. + + 3/23 + ---- +subst.c + - string_transform: add `U' (convert to uppercase), `u' (convert + first character to uppercase), and `L' (convert to lowercase) + transformations. Inspired by a discussion with Phil Smith + back in May, 2019 + - parameter_brace_transform: make sure `u', `U', and `L' are valid + transform operators + +doc/{bash.1,bashref.texi} + - parameter transformation: document new `U', `u', and `L' operators + +eval.c + - execute_prompt_command: if an array variable PROMPT_COMMANDS exists, + prefer it to PROMPT_COMMAND and execute all of the commands contained + as array elements in index order. From a proposal by Daniel + Colascione back in 1/2018 + - execute_array_command: function for array_walk to use when executing + commands in PROMPT_COMMANDS + +doc/{bash.1,bashref.texi} + - PROMPT_COMMANDS: new array variable + + 3/24 + ---- +builtins/ulimit.def + - new -R option, for RLIMIT_RTTIME (max time a real-time process can + run without blocking). Patch from Maciej Wolny + back in 7/2017 + +doc/{bash.1,bashref.texi} + - ulimit: document new -R option + +lib/readline/{display.c,rlprivate.h} + - _rl_clear_screen: now takes an argument saying whether to attempt to + clear the terminal scrollback buffer if the right termcap capability + exists + +lib/readline/{text.c,readline.h} + - rl_clear_display: new bindable command that clears the screen and + scrollback buffer + +lib/readline/funmap.c + - clear-display: new bindable command name + +lib/readline/emacs_keymap.c + - emacs mode M-C-l now bound to clear-display + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - clear-display: document new function and default emacs mode binding + +arrayfunc.c + - assign_assoc_from_kvlist: allow compound assignments to associative + arrays that do not contain words of the form `[key]=value', assume + such lists are of the form (key1 value1 key2 value2). A missing or + empty key is an error; a missing value is treated as NULL. You + cannot mix the two forms. Inspired by a suggestion from Sebastian + Gniazdowski back in 7/2019 + +doc/{bash.1,bashref.texi} + - documented new associative array assignment syntax + +assoc.[ch] + - assoc_to_kvpair: new function that returns a string with quoted + key/value pairs from given associative array + +array.[ch] + - array_to_kvpair: new function that returns a string with quoted + key/value pairs from given indexed array (for completeness) + +subst.c + - parameter_brace_transform: new operator `K': produces the (possibly + quoted) value of a variable, except for arrays, where it expands to + indexed or associative array assignments in key/value pair form + - string_transform,parameter_list_transform: expand `K' to (possibly + quoted) values + - array_var_assignment: take a new fourth argument saying which kind + of assoc assignment statement to produce; calls array_to_kvpair or + assoc_to_kvpair as appropriate and just returns that value if + necessary without creating a declare command + - array_transform: if the operator is `K', call array_var_assignment + with new argument that will produce a list of key/value pairs + +doc/{bash.1,bashref.texi} + - document new 'K' parameter transformation operator + + 3/25 + ---- +doc/bash.1,lib/readline/doc/{history.3,readline.3} + - some text and formatting cleanups from Bjarni Ingi Gislason + + +bashhist.c + - SYSLOG_MAXLEN: increase to 1024, since that seems to be what most + syslog daemons handle + - bash_syslog_history: if the line is longer than SYSLOG_MAXLEN minus + the header length, log it in multiple message with a sequence number + instead of truncating. Inspired by a report from + back in 7/2018 + +lib/readline/text.c + - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, + rl_keep_mark_active: new functions to manage an active region. We + don't do anything with an active region yet. Part of a large patch + for active regions from Daniel Colascione + originally back in 3/2018 + - rl_clear_screen: call rl_keep_mark_active to keep the region active + across the screen refresh + - rl_newline: make sure to deactivate the region even though we don't + do any redisplay with it yet + +lib/readline/readline.h + - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, + rl_keep_mark_active: new extern function declarations. They are + public functions for now + +lib/readline/readline.c + - readline_internal_setup: make sure the region starts out as not + active + - readline_internal_charloop: make sure to deactivate the mark after + a command, unless the command calls rl_keep_mark_active keep it + active + +lib/readline/kill.c + - rl_bracketed_paste_begin: set rl_mark before inserting the pasted + text, so the pasted text defines the region + - rl_bracketed_paste_begin: set the region as active after inserting + the pasted text + +lib/readline/util.c + - _rl_abort_internal: make sure we deactivate the region + +lib/readline/{terminal.c,rlprivate.h} + - _rl_cr: new function to just output the term_cr (or '\r'). Part of + the active region patch + +lib/readline/display.c + - _rl_cr: use where appropriate to replace MSDOS-dependent code and + calls to tputs + +lib/readline/terminal.c + - get and store the terminal sequences to enter and exit standout + (usually some background color) mode + + 3/26 + ---- +subst.[ch] + - copy_fifo_list: now returns void * + - close_new_fifos: now takes a void * as the first argument, since it's + usually the return value from copy_fifo_list + - close_new_fifos: (named pipes): cast first argument to a char *, + since copy_fifo_list will (someday) return a bitmap + - close_new_fifos: (HAVE_DEV_FD): cast first argument to a pid_t *, + since it takes a copy of dev_fd_list; use that in the loop to + determine whether or not to close file descriptors. First half of + fix for bug reported by Valentin Lab + - unlink_fifo_list: (named pipes): when compacting the list, make sure + to avoid the copy if i == j, and, after copying fifo_list[i] to + fifo_list[j], null out fifo_list[i] so we don't try to access it + later + +execute_cmd.c + - execute_command_internal: don't call reap_procsubs after executing + the command. Rest of fix for bug reported by Valentin Lab + + - execute_command_internal,execute_builtin_or_function: ofifo_list is + now a void * instead of a char * + + 3/30 + ---- +lib/readline/{terminal.c,rlprivate.h} + - _rl_standout_{on,off}: new functions, to enter and exit terminal + standout mode + +lib/readline/rlprivate.h + - _rl_refresh_line: new extern declaration + +lib/readline/display.c + - visible and invisible lines: added members to deal with tracking the + `current face' + - realloc_line: broke code to manage visible_line and invisible_line + allocation out of init_line_structures, added code to manage arrays + of visible and invisible line face info per character + - invis_{addc,adds,nul}: new functions to add characters to the + invisible line and keep the invisible face data updated with whatever + the current face is + - set_active_region: keep track of the display region that should be + in standout mode + - rl_redisplay: use invis_addc/adds/nul to update the invisible line + buffer instead of modifying invisible_line directly + - _rl_refresh_line: moved body of function here from text.c + +lib/readline/text.c + - rl_refresh_line: now just calls _rl_refresh_line and marks the display + as fixed + + 3/31 + ---- +variables.c + - bind_variable_internal: dynamic variables with assignment functions + now honor the readonly attribute by giving an error. Fixes issue + reported by Rob Landley + - assign_seconds: allow seconds to be assigned using an arithmetic + expression + - assign_random: allow RANDOM to be assigned using an arithmetic + expression + +doc/{bash.1,bashref.texi} + - HISTCMD: note that assignments to HISTCMD have no effect + + 4/2 + --- +execute_cmd.c + - execute_in_subshell: make sure we note that we're not reading our + command input from a buffered stream any more, so we don't + sync the buffered stream backwards in subsequent commands this + subshell runs. Fixes bug reported by OÄuz + + 4/3 + --- +builtins/read.def + - read_builtin: if a read in posix mode is interrupted by a signal, + make sure to preserve the value of errno around calls to + check_signals and run_pending_traps so any error message isn't quite + as confusing. Issue reported by Stan Marsh + +lib/sh/zread.c + - zread: preserve value of errno (always EINTR) around calls to + check_signals or check_signals_and_traps + +trap.c + - run_debug_trap: allow suppress_debug_trap_verbose being set to + turn off `set -v' temporarily while executing the DEBUG trap (if + it's set) + +builtins/fc.def + - set suppress_debug_trap_verbose so set -v won't be in effect while + the DEBUG trap runs. Most recently reported by Ami Fischman + ; originally raised by Boruch Baum + back in 10/2017 + + 4/6 + --- +lib/readline/display.c + - puts_face,putc_face: new functions to write strings or characters to + the display while handling standout mode + - update_line,_rl_move_cursor_relative: take additional argument(s) + describing the visible and invisible faces corresponding to the + visible and invisible lines, respectively + +lib/readline/readline.c + - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on + by default) + +trap.c + - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0 + since run_pending_trap usually does these things + +sig.c + - throw_to_top_level: only call the SIGINT trap if there is a SIGINT + trap pending (shouldn't matter, just a check) + +bashline.c + - bash_event_hook: try to identify the signal of interest we've + received + - bash_event_hook: if in posix mode running the read builtin, and we + get a (trappped) SIGINT, throw to top level so we can interrupt + the read. From a report by Robert Elz + + 4/7 + --- +lib/readline/display.c + - update_line: make sure to update and compare face data at the same + time as comparing old and new line data: the lines are only the same + if the face information and character information are identical + (ofd, ols, etc.) + - update_line: make sure to copy face data along with line data + - update_line: use puts_face in place of _rl_output_some_chars to + output face data along with line data + - _rl_move_cursor_relative: when we write characters, make sure to take + the face data into account using puts_face + [END OF INTEGRATION OF ACTIVE MARK AND FACE PATCHES from + Daniel Colascione ] + +{jobs,nojobs}.c + - make_child: to avoid installing a handler for SIGTERM in interactive + shells, and avoid race conditions with child processes resetting the + SIGTERM signal handler to the default, block SIGTERM and then + reset the SIGTERM handler to SIG_DFL before fork, then reset the + handler to SIG_IGN and unblock it in the parent after fork() returns. + Fix for readline and SIGTERM handling reported by Chris Down + (original change was back in 2/2013) that + allows a bash waiting in readline() for input to be killed with a + SIGTERM sent by another process + - take out calls to RESET_SIGTERM, no longer needed + +execute_cmd.c + - execute_in_subshell,execute_simple_command,execute_disk_command: + remove calls to CHECK_SIGTERM, since we don't install a handler + any more + +lib/readline/readline.c + - _rl_enable_bracketed_paste: enabled by default for the time being + + 4/9 + --- +jobs.h + - JWAIT_WAITING: new flag for wait functions; means only wait for jobs + with the J_WAITING flag set + - J_WAITING: new job flag, part of arg list to `wait -n' + - IS_WAITING(i): job i has the J_WAITING flag set + +jobs.c + - wait_for_any_job: if the flags includes JWAIT_WAITING, we only return + jobs with the J_WAITING flag already set; otherwise we skip them. + For `wait -n args' support + +builtins/wait.def + - set_waitlist: take a list of jobspecs and set the J_WAITING flag in + each valid job from the list + - unset_waitlist: turn off the J_WAITING flag for all jobs where it's + set + - wait_builtin: if -n is supplied with a list of arguments, set the + J_WAITING flag in each job in the list, call wait_for_any_job with + the JWAIT_WAITING flag, and clean up by calling unset_waitlist(). + From a suggestion from Robert Elz back in 3/2019 + (originally in 10/2017) + + 4/11 + ---- +lib/readline/display.c + - update_line: in step 5b of the line wrapping prompt code, make sure + OFDF and NFDF are set before performing a dumb update + + 4/12 + ---- +sig.c + - termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before + resending a terminating signal to ourselves, in the event that this + is called in a signal handler context with the terminating signal + blocked. Inspired by a report from + + 4/13 + ---- + +lib/readline/text.c + - rl_newline: if the region is active, call rl_redisplay to clear + standout mode before returning + +lib/readline/display.c + - norm_face: new function to mark a portion of the invisible face + buffer as normal text (no standout) + - rl_redisplay: if the line consumes more than a screen's worth of + lines, mark the lines that are off the top of the display as having + a `normal' face + + 4/14 + ---- +variables.c + - LINENO: no longer has the integer attribute, since it does not take + arithmetic expressions on assignment (use $((expr)) instead) + +lib/readline/mbutil.c + - _rl_find_prev_utf8char: new function, uses the structure of UTF-8 + characters to find the start of the previous one no matter where we + start: at the beginning of the next character, at the end of a + multibyte character, or in the middle of a multibyte character. + EXPERIMENTAL + - _rl_find_prev_mbchar_internal: for now, call _rl_find_prev_utf8char + if we are in a UTF-8 locale. EXPERIMENTAL + + 4/15 + ---- +lib/readline/mbutil.c + - _rl_utf8_mblen: changes to handle invalid multibyte sequences better, + even when N means that the sequence would be too short anyway + +examples/loadables/csv.c + - csv: new loadable builtin to parse a line of csv data and store it + into an array supplied as an argument + + 4/16 + ---- +examples/loadables/cut.c + - cut: new loadable builtin + - lcut: new builtin that does what cut does but on a string supplied + as an argument (only one string for now) + + 4/17 + ---- +jobs.h + - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second + argument to make_child + +jobs.c + - make_child: now takes a set of flags as the second argument + +execute_cmd.c + - make_child: change callers to pass FORK_ASYNC instead of a non-zero + value as the second argument + +subst.c + - make_child: change callers to pass FORK_ASYNC instead of a non-zero + value as the second argument + +doc/{bash.1,bashref.texi} + - document that the words in a compound array assignment undergo all + the shell word expansions, including filename generation and word + splitting. From a report from E. Choroba + + 4/18 + ---- +subst.c + - command_substitute: use JOB_CONTROL instead of INTERACTIVE in the + test to determine whether or not to give the terminal back to + pipeline_pgrp + +jobs.c + - make_child: if FORK_NOTERM is set in the flags argument, don't call + give_terminal_to + +{jobs,nojobs}.c,jobs.h + - wait_for: now takes a second argument, a flags word + +{execute_cmd,subst}.c + - wait_for: change all callers to add second argument to wait_for + +jobs.c + - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call + give_terminal_to + + 4/19 + ---- +subst.c + - command_substitute: block SIGINT around call to read_comsub, so we + let any interrupts affect the command substitution. Fixes issue + reported by DALECKI Léo + +hashcmd.h + - FILENAME_HASH_BUCKETS: increase to 256 + +assoc.h + - ASSOC_HASH_BUCKETS: new define, set to 1024 + +variables.c + - make_new_assoc_variable,make_local_assoc_variable: call assoc_create + with ASSOC_HASH_BUCKETS as argument. This changes the hash function + and how the array keys are ordered (which is not guaranteed) + +builtins/read.def + - read_builtin: in posix mode, or if the read call returns -1/EINTR, + don't call run_pending_traps until the read command returns. This + allows a trap action to see the same exit status that the read + builtin would return when it exits on a signal (e.g., SIGINT == 130). + From a suggestion by + + 4/20 + ---- +hashlib.c + - hash_rehash: function to rehash a table, after increasing or decreasing + the number of buckets. From patches from Thomas Kremer + (https://savannah.gnu.org/patch/?9850) and Koichi Murase + + - hash_grow,hash_shrink: grow or shrink a hash table by a factor of + HASH_REHASH_MULTIPLIER (4) + - hash_insert,hash_search: call hash_grow if necessary + +arrayfunc.c + - convert_var_to_{array,assoc}: if the original variable had no value + (it was unset), the array variable should be unset as well. Reported + by andrej@podzimek.org + + 4/21 + ---- +bashline.c + - set_saved_history: change logic used to decide where in the history + operate_and_get_next should start by using a logical offset into the + history list that is an offset from history_base. This avoids having + to take whether or not the history is stifled and full into account. + Report and fix from Greg Price + - operate_and_get_next: just calculate the logical offset of where we + should be in the history instead of an absolute offset + +lib/readline/input.c + - _rl_nchars_available: new function, returns the number of characters + available to be read if FIONREAD is available + + 4/22 + ---- +lib/readline/{readline.c,rlprivate.h} + - _rl_pending_command: new struct to hold information about a pending + command for readline to execute when the current command completes. + A command can set this up so that it gets executed like a + continuation before redisplay + +lib/readline/readline.c + - readline_internal_charloop: after _rl_dispatch returns, check + _rl_command_to_execute, and, if it's non-zero, redisplay and then + execute it as a command + - added a small set of library-private functions for managing the + executing key sequence (not used yet) + +lib/readline/isearch.c + - _rl_isearch_dispatch: if we have found an opcode or have added a + character to the search string and searched for it, reset the keymap + and okeymap members of the search context in preparation for reading + another key sequence/opcode + - _rl_isearch_dispatch: if we read a key sequence bound to an editing + command that is not an `opcode', set up _rl_command_to_execute to + execute it after the searching returns and arrange to break out of + the search + - _rl_isearch_dispatch: if we paste in text from bracketed paste, set + the mark as active so we can highlight it when we display the search + string + - _rl_isearch_dispatch: if we've found the search string, activate the + mark and set rl_point and rl_mark so the search string is highlighted + when we display the search results + - _rl_isearch_dispatch: do translation for keys that map to + rl_do_lowercase_version like we do when dispatching while reading a + key sequence + + 4/23 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: if bracketed paste mode is enabled and there are + enough characters waiting in the terminal's input queue, try to read + the bracketed paste prefix and jump straight to the opcode execution + if we read it. Otherwise, just go on with the ESC. Inspired by report + from + +parse.y + - parse_comsub: posix-mode shells don't allow a closing right paren to + delimit a pending here-document -- it requires the newline + +doc/bashref.texi + - POSIX mode: updated posix mode description with the new here-document + delimiter requirement + +lib/readline/search.c + - _rl_nsearch_dispatch: if bracketed paste mode is enabled, and we read + an ESC, try to see if we have a bracketed paste op and insert the + pasted next. If we don't, go on with the ESC + - _rl_nsearch_dosearch: experimental code to highlight the search string + when displaying the line found in the history. Only done when we are + not searching for a pattern, since we don't have information on the + end of the matching portion of the line. Experimental because it + changes where we put point and mark if searching is successful + +expr.c + - expr_streval: if find_variable for the case where the string is not + an array reference doesn't find anything, see if we can find + something by using find_variable_last_nameref and use the value + from there in the call to expr_streval, kind of using the expression + recursion to complement the nameref recursion. Report from + Daniel Molina + + 4/24 + ---- +jobs.c + - {start,stop}_pipeline: don't reset pipeline_pgrp to 0 if it's already + the same as shell_pgrp, since we don't want to reset it in the middle + of a shell started to run a command or process substitution (after + forking a child to run one command, but before forking another, for + instance). Reported by Rob Landley + + 4/27 + ---- +parse.y + - function_def: break the productions starting with `function' without + `()' into two productions to avoid a shift-reduce conflict. Report + and patch from Dale R. Worley + +variables.h + - localvar_inherit: add extern declaration here + +subst.c + - shell_expand_word_list: take out change from 3/17 to pass -I to + make_internal_declare; it generates errors the user will find + confusing if there is a variable with the same name but a different + type at a previous scope + - shell_expand_word_list: check for and note whether or not -I is + supplied to the declaration command, since it changes the default + behavior of a compound assignment without -a or -A + - shell_expand_word_list: if we have a compound assignment that is an + argument to a declaration command, but there are no options supplied + to the command that determine the type of the array, make sure we + call make_internal_declare with either -a (no localvar_inherit or -I) + or at least -- (if we are inheriting), because we don't want the + declare to get skipped before we perform the word assignment. Fixes + bug reported by Ross Goldberg + + 4/28 + ---- +subst.c + - expand_declaration_argument: new function, broke code that handles + compound assignments that are arguments to declaration commands out + of shell_expand_word_list into this function. No functional change + yet + + 4/29 + ---- +subst.c + - expand_compound_assignment_word: helper function for + expand_declaration_argument: takes NAME[+]=( VALUE ), converts VALUE + to a list of words, then single-quotes each word and reconstructs + the original word. This assumes the result will go to + do_word_assignment, which will remove the single quotes + - expand_oneword: helper function for expand_compound_assignment_word, + takes VALUE and performs the splitting into words, and then the + expansion and single-quoting of each individual word. Indexed and + associative arrays take different code paths, because they undergo + different expansions and associative arrays need special handling to + avoid having to scan for the end of the subscript multiple times + - expand_declaration_argument: call expand_compound_assignment_word to + get the expansion-before-calling-builtins word expansion sequence + correct. Better fix for for bug report from Kevin Locke + , + https://savannah.gnu.org/support/index.php?109669 + +arrayfunc.c + - quote_array_compound_word: take [IND]=VALUE and convert it to + ['IND']='VALUE'. Called by quote_compound_array_list for each word + in the list + - expand_and_quote_assoc_qword: take [KEY]=VALUE and convert it to + ['expanded-key']='expanded-value' (or VALUE to 'expanded-value'). + Called by subst.c:expand_oneword() for each word in the list + - quote_compound_array_list: take a list of words and convert each + [IND]=VALUE to ['IND']='VALUE' (or just 'VALUE' if there is no + [IND]=). Used for indexed arrays + +arrayfunc.h + - expand_and_quote_assoc_word,quote_compound_array_list: new extern + declarations + + 4/30 + ---- +doc/{bashref.texi,bash.1} + - rework description of reserved words a little; add a reserved words + node to bashref.texi. Based on a report from Dale R. Worley + + +builtins/history.def + - history_builtin: if the shell is restricted, don't allow pathnames + with slashes to be read or written. From a report from + Diffie + +shell.c + - maybe_make_restricted: add HISTFILE to the list of readonly variables + +doc/{bashref.texi,bash.1} + - document new restricted shell restrictions + + 5/1 + --- +jobs.c + - wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM + is set in the flags argument + +subst.c + - command_substitute: call make_child with FORK_NOTERM flag so it + doesn't try to set the terminal's process group + - command_substitute: call wait_for with JWAIT_NOTERM so it doesn't + try to set the terminal's process group + - command_substitute: now that wait_for doesn't try to reset the + terminal's process group, remove the code that tries to clean up + after that + + 5/4 + --- +doc/bash.1 + - make sure to mention /etc/inputrc as the ultimate default readline + init file, like other documentation does. Update from + Greg Price + +lib/readline/readline.c + - if the private startup hook function variable _rl_internal_startup_hook + is set, execute that after any user-specified startup hook + +lib/readline/rlprivate.h + - _rl_internal_startup_hook: new extern declaration + +bashline.c,lib/readline/{misc.c,readline.h} + - operate_and_get_next: moved to rl_operate_and_get_next so it's + available to all readline programs, uses _rl_internal_startup_hook. + Based on patch from Greg Price + +lib/readline/funmap.c + - "operate-and-get-next": now a bindable readline command + +lib/readline/emacs_keymap.c + - rl_operate_and_get_next: bound to ^O in emacs mode by default + +doc/bash.1,lib/readline/{readline.3,rluser.texi} + - operate-and-get-next: move to readline section of the manuals, out of + bash-specific functions section + + 5/5 + --- +hashlib.c + - hash_string: use a series of shifts and adds to avoid a multiply by + FNV_PRIME. From Landon Curt Noll's FNV web page + +builtins/fc.def + - fc_gethist,fc_gethnum: now take an additional argument indicating the + operating mode: if the arg is 1, fc is listing commands; if it is 0, + fc is executing commands. Affects how -0 is handled (fc_gethnum + returns -1). Changed callers to handle the return value appropriately. + Report from Jason Franklin about + seg fault and core dump + - fc_builtin: if fc_gethnum returns < 0 when setting histbeg or histend, + report a range error + +doc/bash.1,lib/readline/doc/hsuser.texi + - fc: document how 0 and -0 are treated for listing and executing + +shell.c + - run_one_command: call parse_and_execute with SEVAL_RESETLINE so the + line number gets set to 1. Reported by Rob Landley + + 5/8 + --- +support/config.{guess,sub} + - update to latest versions + +configure.ac + - add support for `genode' from Emery Hemingway + + 5/14 + ---- +test.c + - term: fix case where an argument that looks like a unary operator, + but doesn't have enough tokens left to have an argument to that + operator, was not being treated as a one-argument test. Affects + only uses of test with four and greater arguments, which posix says + are unspecified. This is a bug, or at least an incompatibility, at + least 30 years old. + - test_command: if there are unconsumed arguments, call test_syntax_error + with a `syntax error' argument if the first remaining argument starts + with a `-'. Better than a generic `too many arguments' error + + 5/19 + ---- +configure.ac,config.h.in + - getrandom: add test, define HAVE_GETRANDOM + - getentropy: add test, define HAVE_GETENTROPY + +variables.c + - get_urand32: use getrandom; provide imperfect emulation that uses + getentropy if available, and falls back to reading /dev/urandom if + that's not available. The idea is to use /dev/urandom as little as + possible + + 5/20 + ---- +configure.ac + - updated version to 5.1-alpha + +lib/readline/readline.h + - updated defines to readline version 8.1 + +variables.c + - brand: if shell_compatibility_level is 50 or below, don't xor the + top and bottom halves of the 32-bit random number together, since + previous versions did not + + 5/21 + ---- +COMPAT + - overhauled and updated the descriptions of the various shopt compatNN + options + +doc/bashref.texi + - Shell Compatibility Mode: new section, describes compatibility levels, + BASH_COMPAT, and the various compatNN shopt options + + 5/23 + ---- +doc/bash.1 + - added Shell Compatibility mode section + +doc/{bash.1,bashref.texi} + - changed shopt section to list the compatibility options and refer + to Shell Compatibility Mode section + - BASH_COMPAT: overhauled the text, refers to Shell Compatibility Mode + section + + 5/27 + ---- +variables.c,/lib/sh/random.c + - moved functions that manage 16-bit and 32-bit random values to + lib/sh/random.c + +alias.c + - add_alias: don't bother checking null alias values for ending in + space or tab + +braces.c,include/typemax.h + - move sh_imaxabs and overflow and underflow detection to typemax.h + so the expression evaluation code can use it in the future + + 5/28 + ---- +lib/readline/kill.c + - _rl_bracketed_read_mbstring: make sure to fill in mb[0] even if + the locale says MB_CUR_MAX == 1 in case a caller uses it. Partial + fix for bug reported by Phi Debian + +lib/readline/vi_mode.c + - rl_vi_change_char: make sure _rl_vi_last_replacement gets filled in + in the case where MB_CUR_MAX == 1. Rest of fix for bug reported by + Phi Debian + - _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement + + 5/29 + ---- +lib/malloc/malloc.c + - __P -> PARAMS + - union mhead: now 16 bytes to force 16-byte alignment; extra 8 bytes + at the end of struct minfo to use for guard bytes. Enabled if + pointers are 64 bits (SIZEOF_CHAR_P == 8) + - if we have 64-bit pointers, prepopulate the 64-byte bin first instead + of the 32-byte bin (pointers and WORD_DESCs still fit into 32 bytes, + but WORD_LISTs are now 36 bytes with malloc overhead). We can still + split 64-byte blocks to satisfy 32-byte requests + - internal_malloc: fill in the new 8 mh_magic8 bytes with MAGIC1 guard + bytes + - internal_malloc: print a warning message if the returned pointer is + not aligned according to MALIGN_MASK + - internal_free: detect underflow by checking that mh_magic8 is full + of MAGIC1 bytes + - internal_realloc: detect underflow by checking that mh_magic8 is full + of MAGIC1 bytes + +lib/malloc/stats.c + - _print_malloc_stats: slight adjustment for better column alignment + + 6/1 + --- +execute_cmd.c + - execute_command_internal: treat a redirection failure with errexit + set as a command failure that exits the shell. Bug report from + Hyunho Cho + + 6/3 + --- +redir.c + - redirection_error: takes a new argument, FN, which if non-NULL is + the filename to be used in the error message. + +redir.[ch],builtins/evalstring.c + - redirection_error: changed extern declaration and callers + +redir.c + - do_redirection_internal: takes a new third parameter, FNP, a char ** + to use (*FNP, if non-NULL) to store and return the expanded filename + for those redirections that take one + - do_redirections: pass a char ** (&fn) to do_redirection_internal to + get a pointer to the expanded filename; pass it to redirection_error + if appropriate. Free FN in any case, since do_redirection_internal + won't. Fix for double expansion of filename in certain redirections + reported by OÄuz + + 6/4 + --- +parse.y + - parse_comsub: while we're reading a here-document, don't perform any + history expansion (set history_expansion_inhibited). Fixes issue + reported by "ladyrick" + +general.h,parse.y + - __P -> PARAMS + +shell.c + - shellstart: struct timeval used to initialize shell starting time; + shell_start_time now initialized from shellstart.tv_sec + +variables.c + - assign_seconds: reset shellstart to set shell starting time + +pcomplete.c + - include posixtime.h instead of + +lib/sh/{ufuncs,uconvert}.c + - include posixtime.h instead of the inline conditional includes + +aclocal.m4 + - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the + deprecated AC_HEADER_EGREP + +posixtime.h + - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement + definition + +lib/sh/gettimeofday.c + - gettimeofday: replacement function, so we don't have to use + HAVE_GETTIMEOFDAY in the rest of the code + + 6/5 + --- +{lots of files}.[ch] +builtins/{lots of files}.{c,h,def} +lib/glob/{lots of files}.[ch] +lib/malloc/{lots of files}.[ch] +lib/sh/{lots of files}.c +include/{lots of files}.h +examples/loadables/{lots of files}.c + - __P -> PARAMS + +doc/{bash.1,bashref.texi} + - SECONDS: clarify that the number of seconds is always determined by + querying the system clock + + 6/8 + --- +configure.ac + - if CFLAGS is not supplied in the environment or on the command line, + add the gcc options that suppress warnings about parens and print + formats in a slightly different way that will avoid some collisions + +lib/readline/readline.c + - _rl_dispatch_subseq: don't set rl_last_func to rl_vi_arg_digit, just + the same as if it were rl_digit_argument. This allows functions like + rl_yank_last_arg, which behave differently when called multiple times + in a row, to work closer to what is expected. This allows what + Leo Alekseyev reported to work, with caveats + +lib/readline/vi_mode.c + - rl_vi_yank_arg: make sure to pass `key' to rl_yank_nth_arg, in case + it needs to use it later + - rl_vi_redo: suppress attempts to redo `.' when the current keymap is + vi_movement_keymap, since that will recursively call vi_redo + + 6/11 + ---- +redir.c + - limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can + handle atomic writes without hanging. Tested on FreeBSD 13 + +[bash-5.1-alpha frozen] + + 6/15 + ---- +subst.c + - do_assignment_internal: call stupidly_hack_special_variables on the + name returned from the variable assignment, in case there was a + nameref expansion, and on the original name only if the assignment + returned NULL. Fixes bug reported by James D. Lin + + 6/16 + ---- +builtins/hash.def + - hash_builtin: don't print anything if the hash table is empty when + listing portably (-l) unless the shell compatibility level is <= 50 + Issue originally raised by + + 6/17 + ---- +pathexp.c + - glob_name_is_acceptable: extend GLOBIGNORE to ignore `.' and `..' + as a terminal pathname component instead of just ignoring filenames + that are `.' or `..'. From a suggestion by Ilkka Virta + + + 6/18 + ---- +po/Makefile.in.in + - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have + to create the variable manually + +lib/readline/doc/rltech.texi + - add descriptions of the active mark functions that are available to + applications. I guess they will remain public + +subst.c + - valid_parameter_transform: new function, reject transformations + longer than a single character or invalid transformation operators + - parameter_brace_transform: call valid_parameter_transform + + 6/22 + ---- +lib/sh/zread.c + - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by + Jason A. Donenfeld + +lib/sh/zcatfd.c + - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096) + +lib/sh/zmapfd.c + - zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096) + + 6/29 + ---- +aclocal.m4 + - BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants, + from Jessica Clarke + +xmalloc.c + - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think + it works + +examples/loadables/finfo.c + - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke + + +unwind_prot.c + - unwind_protect_mem_internal: make sure we allocate at least as many + bytes for an entire UNWIND_ELT. Fix from Jessica Clarke + + + 7/1 + --- +eval.c + - alrm_catcher: use write(2) instead of fprintf to print the + auto-logout message to the terminal + +jobs.c + - UNQUEUE_SIGCHLD: set queue_sigchld to 1 around call to waitchld(), + since it is not being called from a signal handler and so SIGCHLD is + not blocked. Fixes report by Godmar Back + + 7/2 + --- +doc/{bash.1,bashref.texi} + - read: clarify that without any name arguments, the line assigned to + REPLY is not modified. From a question by M. Nejat AYDIN + with input from Eli Schwartz + + + 7/5 + --- +lib/readline/vi_mode.c + - _rl_vi_done_inserting: make sure to close out all undo groups when + leaving insert mode, so we don't have anything dangling. + Report and fix from David Fries + + 7/6 + --- +lib/readline/vi_mode.c + - _rl_vi_domove_motion_cleanup: the `c' and `C' commands should enter + insert mode even if the motion command doesn't delete any text. + From a report by David Fries + - _rl_vi_done_inserting: add a missing rl_end_undo_group when + _rl_vi_doing_insert is set: there should be one begun by + rl_vi_start_inserting and one begun by the command (change or replace). + From a report by David Fries + - rl_vi_replace: set _rl_vi_last_key_before_insert to 'R' explicitly, + since other code checks that and we want to allow users to rebind + this function + + 7/7 + --- +lib/readline/vi_mode.c + - rl_vi_{delete,change,yank}_to: if we have a non-null _rl_vimvcxt, + just reinitialize it so we don't have to allocate a new one. This is + a change primarily for callback mode, and fixes a memory leak + +builtins/evalstring.c + - optimize_shell_function: try to optimize away the fork in the last + command in a shell function body, under certain conditions + +execute_cmd.c + - execute_function: attempt to optimize away forks in a shell function + that is already marked NO_FORK and being executed in a command + substitution + + 7/8 + --- +{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c + - interrupt_immediately: remove, no longer used + +jobs.c + - waitchld: don't perform asynchronous notification if we are currently + executing a builtin (executing_builtin != 0). Inspired by a report + from Godmar Back + + 7/9 + --- +lib/readline/signals.c + - _rl_handle_signal: block SIGTTOU while handling a SIGTTOU, since we + no longer run this in a signal handling context where SIGTTOIU would + be blocked + + 7/14 + ---- +execute_cmd.c + - execute_simple_command: use new variable `cmdflags' instead of using + simple_command->flags directly; initialize from simple_command->flags + - check_command_builtin: take a simple command list of words starting + with `command' and including a command_word argument, and peel off + the `command' and any instances of `-p' and `--' and return the + updated list + - execute_simple_command: if the first word of the simple command is + `command', call check_command_builtin to peel off any `command' and + `-p' and `--' and go on to execute the rest of the words as a simple + command. If we're in posix mode, we've got the special builtins + handled before this runs. Fixes complaint about `command' in the + background running an extra bash process from Dmitry Alexandrov + + + 7/17 + ---- +doc/bash.1 +lib/readline/doc/{rltech,hstech,rluser}.texi +lib/readline/doc/{readline,history}.3 + - a few small tweaks to make the language gender-neutral + + 7/18 + ---- +subst.c + - expand_word_internal: case `:' make sure the shell is either not in + posix mode or W_TILDEEXP is set before turning on W_ITILDE. The old + code would turn it on unconditionally if the W_ASSIGNMENT flag was + set. Fixes bug reported by OÄuz + + 7/20 + ---- +builtins/complete.def + - replace macros used to print compspec actions, options, and other + info with a small set of functions that traverse the structs used + to hold that information and print everything instead of eumerating + each option and action separately. From a patch submitted by + Martin Kealey + + 7/27 + ---- +variables.c + - push_posix_tempvar_internal: restore $SHELLOPTS after restoring the + values of shell options saved by `local -' by calling set_shellopts(). + Report from Grisha Levit + +flags.c + - reset_shell_flags: set histexp_flag to 0 and let bash_history_reinit + take care of setting history_expansion appropriately. Report and fix + from Grisha Levit + + 7/28 + ---- +general.c + - assignment: if (FLAGS & 1), we are parsing the contents of a compound + assignment, and a word must begin with a `[' and have a valid + subscript terminated by `]' before the `=' to be considered an + assignment statemen and subsequently expanded like one. Report from + Alexey Izbyshev + + 7/30 + ---- +lib/glob/sm_loop.c + - BRACKMATCH: if the bracket expression is matching simple characters + and not a range, compare the character from the string and the + pattern directly, as required by Posix interp 948 + +lib/glob/smatch.c + - charcmp_wc: split off code that calls wcscoll from rangecmp_wc, + just return the results of wcscoll + - rangecmp_wc: call charcmp_wc and impose a total ordering + by performing a byte comparison (or wint_t comparison) of C1 and C2 + as required by Posix interp 948 (charcmp_wc takes care of the + behavior of FORCECOLL) + - collequiv_wc: call charcmp_wc instead of rangecmp_wc + - charcmp: character comparison code from rangecmp + - rangecmp: call charcmp and impose total ordering as required by + Posix interp 948 + - collequiv: call charcmp instead of rangecmp + - _fnmatch_fallback: ASCII version of fallback for equivalence classes + when there are no multibyte characters in the pattern; just calls + fnmatch with a reconstructed equivalence class pattern + - collequiv: call _fnmatch_fallback if charcmp returns non-zero and + the configure check indicates fnmatch has character class support. + Fixes issue reported by Harald van Dijk + + 8/2 + --- +lib/readline/signals.c + - _rl_handle_signal: since we're not called in a signal handler context + any more, we don't need to explicitly unblock the signal we received + so the application's signal handler will get it when we resend the + signal to ourselves. It doesn't hurt anything to do it, but we don't + have to + - _rl_handle_signal: Set up a framework for any signals that need to + be blocked during cleanup: add the signal to SET (initialized to the + existing set of blocked signals) and set BLOCK_SIG to 1. We block + that set around the call to rl_cleanup_after_signal(). + - _rl_handle_signal: on AIX, if the signal is SIGHUP, make sure we + block SIGHUP while running rl_cleanup_after_signal() + + 8/3 + --- +jobs.c + - start_job: don't allow `fg' or `bg' in a command substitution to + attempt to start a parent's jobs. Suggested by OÄuz + + +builtins/set.def + - set_current_options: only call change_flag or SET_BINARY_O_OPTION_VALUE + if the value has changed from what is stored in the bitmap, to avoid + any side effects from setting the options and save time on any + unnecessary function calls. Inspired by report from Grisha Levit + + +parse.y + - xparse_dolparen: before we jump to top level, check whether we are + still reading from the string (we might have run all the unwind- + protects) and turn off PST_CMDSUBST if we are not. Fixes fuzzing + bug reported by Jakub Wilk + + 8/4 + --- +subst.c + - process_substitute: set subshell_environment to include SUBSHELL_ASYNC + in the child process, since we passed FORK_ASYNC to make_child. Fixes + DEBUG trap problem reported by Jonathan Rascher + +subst.c + - unlink_all_fifos: new function, just unconditionally closes and + unlinks (if using FIFOs) each pipe used for process substitution. + There is an open to unblock any child processes sleeping on the + FIFO first. Inspired by a suggestion from "CHIGOT, CLEMENT" + + +shell.c + - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list() + +sig.c + - termsig_handler: call unlink_all_fifos() instead of + unlink_fifo_list() + + 8/5 + --- +arrayfunc.c + - quote_compound_array_list: turn empty strings into '' instead of + leaving them unmodified. Fixes bug in changes from 4/29 reported + by andy_bash + + 8/10 + ---- +bashline.c + - edit_and_execute_command,bash_execute_unix_command: restore the bash + signal handlers before running parse_and_execute() so bash will catch + and handle signals, instead of letting readline catch them without + any opportunity to run _rl_handle_signal(). Fixes bug reported by + Stan Marsh + + 8/11 + ---- +builtins/fc.def + - fc_gethnum: return HIST_INVALID for -0 if not in listing mode + - fc_builtin: throw an out-of-range error if histbeg or histend gets + set to HIST_INVALID + - fc_builtin: don't throw errors for other out-of-range history + specifications, clamp them at the beginning or end of the history + list, as appropriate, per POSIX. Report and fix from Martijn Dekker + + + 8/12 + ---- +builtins/fc.def + - fc_gethnum: return HIST_NOTFOUND (new error) if the string is not a + number and doesn't correspond to any command in the history list + - fc_builtin: print a "no command found" error message if fc_gethnum + returns HIST_NOTFOUND + + 8/14 + ---- +flags.c + - no_invisible_vars: removed undocumented `-I' flag + +{flags,variables}.c,flags.h,builtins/{declare,setattr.def} + - no_invisible_vars: remove all references + +command.h + - PF_ALLINDS: new flag, means to expand an array variable name without + a subscript as if it were subscripted by `@' instead of `0' + +subst.c + - parameter_brace_expand_word: if PFLAGS contains PF_ALLINDS, expand + an array variable name as if it were subscripted by "@" instead of + 0/"0": a string with the element values separated by " ". Little + nuance; we're just interested in whether or not there are any + values at all + - parameter_brace_expand: if we are expanding something like ${foo@a}, + pass PF_ALLINDS to parameter_brace_expand_word and + parameter_brace_expand_indir so we don't get tripped up on `nounset' + if foo has an assigned subscript other than 0/"0". Inspired by a + report from Andrew Neff + + 8/17 + ---- +bashhist.c + - bash_add_history,maybe_add_history: don't need to call shell_comment + if we are in the middle of adding a here-document, since it may + call the parser recursively on data that is not guaranteed to be + valid input. From a report by Hyunho Cho + + 8/24 + ---- +lib/readline/complete.c + - compare_match: compare TEXT from the line buffer and MATCH, a + possible completion for TEXT, after dequoting TEXT if necessary + - rl_complete_internal,rl_menu_complete : if show-all-if-unmodified is + set, use compare_match instead of a straight strcmp to determine if + the match has changed the text to complete, so we can use it for + filenames that require quoting. Report and pointer to fix from + Abon B + + 8/25 + ---- +eval.c + - execute_prompt_command: PROMPT_COMMAND can now be an array, subsuming + PROMPT_COMMANDS, which bash no longer looks for. Prompted by a + suggestion from Martijn Dekker + + 8/26 + ---- +builtins/fc.def + - fc_gethnum: now takes a flags word as the third argument, with two + current flag values: HN_LISTING, which means we are listing history + entries, and HN_FIRST, which means we are parsing the first in a + first,last range of history entries + - fc_gethnum: if we have a number >= 0, and it's out of range, return + different values (0 or last history) depending on whether we are + parsing the first or last in a range argument. Based on a report from + Martijn Dekker + + 8/31 + ---- +parse.y + - grammar: call handle_eof_input_unit from the eof-after-error + production only from interactive top-level shells, so a syntax error + in `eval' doesn't exit an interactive shell. Report and fix from + Koichi Murase + +bashline.c + - bash_execute_unix_command: if we call parse_and_execute with allocated + memory, make sure not to include SEVAL_NOFREE in the flags so it will + free that command string before returning. Report and fix from + Koichi Murase + +array.[ch] + - array_to_argv: now takes a second argument: COUNTP; returns the number + of elements stored in the strvec + - array_to_argv: don't store array elements with null values; it makes + it hard for callers to walk the whole array reliably + +pcomplete.c + - gen_shell_function_matches: change call to array_to_argv + +array.h + - execute_array_command: now takes the entire ARRAY * as the first + parameter + +eval.c + - execute_array_command: now takes the entire array, puts the elements + into a strvec, and executes each element of the strvevc as a command. + This protects against a command from PROMPT_COMMAND[n] unsetting the + corresponding element of PROMPT_COMMAND. + From a report from Koichi Murase + + 9/7 + --- +[bash-5.1-beta frozen] + + 9/8 + --- +lib/readline/display.c + - _rl_update_final: don't bother doing anything if the line structures + have not been initialized. Report and fix from gary@catalyst.net.nz + +variables.c + - get_histcmd: perform the same adjustment as in prompt_history_number; + make sure to subtract one if we're doing this while executing a + command that has already been saved to the history list. Inspired + by a report from L A Walsh + + 9/14 + ---- +aclocal.m4 + - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported + by Andreas K. Hüttel + +syntax.h + - slashify_in_here_document: restore previous value that doesn't + include double quote, since it's only special in certain cases + +subst.c + - expand_word_internal: when processing backslash-double quote inside + a ${...} construct inside a here documemt, treat it the same as if + it were double-quoted, as posix says. Fixes report from + Andreas Schwab + + 9/15 + ---- +support/signames.c + - added a number of more esoteric signal names from AIX and Solaris + +parse.y + - report_syntax_error: make sure that the exit status is only set to + one of the special builtin exit statuses if we are really executing + a builtin here, not just if parse_and_execute_level > 0. Reported by + Rob Landley + +execute_cmd.c + - EX_BADSYNTAX: make sure that gets translated into EX_BADUSAGE (2) + - execute_simple_command: if a function returns a value greater than + EX_SHERRBASE, use builtin_status to translate it, as if a builtin + were being executed + - builtin_status: make sure a status > EX_SHERRBASE gets translated to + EXECUTION_FAILURE + + 9/21 + ---- +subst.c + - process_substitute: set up input from /dev/null (standard for an + asynchronous process) only if the shell is interactive and reading + input from the terminal. This allows scripts to use process + substitution to filter stdin. From a report from + Andreas Schwab + + 9/23 + ---- +doc/{bash.1,bashref.texi} + - ENV: a couple of changes clarifying that it's only used when an + interactive shell is started in posix mode. Report from + Reuben Thomas + +examples/loadables/asort.c + - asort: loadable builtin to sort an array. Contributed by + Geir Hauge + + 10/1 + ---- + +[bash-5.1-rc1 frozen] + + 10/7 + ---- +subst.c + - process_substitute: try it without setting the stdin for a process + substitution started from an interactive shell to /dev/null. We will + have to see if this causes problems like those reported back in + 9/2019 by Grisha Levit. From a report by Hyunho Cho + +lib/readline/terminal.c + - _rl_init_terminal_io: if the terminal is unknown, disable bracketed + paste on the assumption it can't handle the enable/disable escape + sequences + + 10/8 + ---- +lib/readline/terminal.c + - _rl_init_terminal_io: if the terminal name is "dumb", disable + bracketed paste mode. Suggested by + Andreas Schwab + + 10/13 + ----- +trap.[ch] + - set_trap_state: new function to allow other signal handlers to set + the internal state that trap_handler would set to note that the + shell received a trapped signal. Used by sigint_sighandler(). + +sig.c + - sigint_sighandler: call set_trap_state to set the pending trap state + for SIGINT if trap_handler is not called. Needed because + throw_to_top_level now checks whether a signal is pending before + running the trap (change from 4/2020) + +builtins/trap.def + - trap_builtin: if the shell is interactive (interactive_shell != 0) + but running something like PROMPT_COMMAND that sets + parse_and_execute_level > 0 but interactive == 0, make sure to set + the signal handler to the default interactive shell SIGINT handler + (sigint_sighandler) instead of the default non-interactive one. + Fixes bug reported by Daniel Farina with a hint + from felix + + 10/26 + ----- + +lib/readline/{readline.c,rlprivate.h} + - _rl_enable_active_region: new variable, mirrors value of + _rl_enable_bracketed_paste + - BRACKETED_PASTE_DEFAULT: new define, default initial value of + _rl_enable_bracketed_paste and _rl_enable_active_region + +lib/readline/bind.c + - hack_special_boolean_var: make sure that _rl_enable_active_region + is set appropriately when "enable-bracketed-paste" is modified + +lib/readline/isearch.c + - _rl_isearch_dispatch: make sure that we activate the mark on finding + the search string only if _rl_enable_active_region is non-zero, even + if bracketed paste is enabled + +lib/readline/search.c + - noninc_dosearch: make sure that we activate the mark on finding + the search string only if _rl_enable_active_region is non-zero, even + if bracketed paste is enabled + +lib/readline/kill.c + - rl_bracketed_paste_begin: make sure we activate the mark only if + _rl_enable_active_region is enabled + +lib/readline/isearch.c + - _rl_isearch_dispatch: the requirement for number of available unread + characters (bytes) to trigger the bracketed paste test is now + BRACK_PASTE_SLEN-1, like for non-incremental searches + + 10/29 + ----- + +doc/bash.1,lib/readline/rluser.texi + - enable-bracketed-paste: change to note the the current default is `On' + + 10/30 + ----- +lib/glob/glob.c + - wdequote_pathname: if wcsrtombs fails, make sure to check whether it + leaves wpathname set to a non-NULL value before checking whether or + not *wpathname is a null character (indicating an incomplete + conversion). Fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972286 + with an assist from Bernhard Übelacker + + 11/1 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: when checking whether the current character is + one of the isearch `opcodes', only check the multibyte character + member of CXT if we're currently running in a multibyte locale. Don't + assume that other parts of the code will set mb[0] = c and mb[1] = 0. + Report from Detlef Vollmann + +[bash-5.1-rc2 frozen] + + 11/10 + ----- +lib/readline/isearch.c + - _rl_isearch_dispatch: if we are aborting the search, make sure to + call _rl_fix_point and to make sure the point and mark are less + than the new rl_end, in case they got out of sync. Report and fix + from Tillmann Osswald + +test.c + - unary_test: assume the argument has already been expanded (the code + paths for [[ and [ expand it) and add AV_NOEXPAND to the flags passed + to array_value if assoc_expand_once is enabled. Prompted by a report + from Greg Wooledge + +[bash-5.1-rc3 frozen] + + 11/18 + ----- +doc/{bash.1,bashref.texi} + - small tweaks to the ulimit description to make it more consistent with + the Posix standard's terminology diff --git a/builtins/enable.def b/builtins/enable.def index 425e2094..27d341a6 100644 --- a/builtins/enable.def +++ b/builtins/enable.def @@ -1,7 +1,7 @@ This file is enable.def, from which is created enable.c. It implements the builtin "enable" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -75,6 +75,7 @@ $END #define ENABLED 1 #define DISABLED 2 #define SPECIAL 4 +#define SILENT 8 /* affects dyn_load_builtin behavior */ #define AFLAG 0x01 #define DFLAG 0x02 @@ -110,6 +111,7 @@ enable_builtin (list) { int result, flags; int opt, filter; + WORD_LIST *next; #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) char *filename; #endif @@ -188,6 +190,8 @@ enable_builtin (list) filter |= SPECIAL; result = dyn_load_builtin (list, filter, filename); + if (result != EXECUTION_SUCCESS) + result = EXECUTION_FAILURE; /* normalize return value */ #if defined (PROGRAMMABLE_COMPLETION) set_itemlist_dirty (&it_builtins); #endif @@ -213,13 +217,37 @@ enable_builtin (list) while (list) { opt = enable_shell_command (list->word->word, flags & NFLAG); + next = list->next; - if (opt == EXECUTION_FAILURE) +#if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) + /* If we try to enable a non-existent builtin, and we have dynamic + loading, try the equivalent of `enable -f name name'. */ + if (opt == EX_NOTFOUND) + { + int dflags, r; + + dflags = ENABLED|SILENT|((flags & SFLAG) ? SPECIAL : 0); + + list->next = 0; + r = dyn_load_builtin (list, dflags, list->word->word); + list->next = next; + if (r == EXECUTION_SUCCESS) + opt = r; +#if defined (PROGRAMMABLE_COMPLETION) + set_itemlist_dirty (&it_builtins); +#endif + } +#endif + + if (opt == EX_NOTFOUND) { sh_notbuiltin (list->word->word); result = EXECUTION_FAILURE; } - list = list->next; + else if (opt != EXECUTION_SUCCESS) + result = EXECUTION_FAILURE; + + list = next; } } return (result); @@ -261,7 +289,7 @@ enable_shell_command (name, disable_p) b = builtin_address_internal (name, 1); if (b == 0) - return (EXECUTION_FAILURE); + return (EX_NOTFOUND); if (disable_p) b->flags &= ~BUILTIN_ENABLED; @@ -340,11 +368,16 @@ dyn_load_builtin (list, flags, filename) if (handle == 0) { - name = printable_filename (filename, 0); - builtin_error (_("cannot open shared object %s: %s"), name, dlerror ()); - if (name != filename) - free (name); - return (EXECUTION_FAILURE); + /* If we've been told to be quiet, don't complain about not finding the + specified shared object. */ + if ((flags & SILENT) == 0) + { + name = printable_filename (filename, 0); + builtin_error (_("cannot open shared object %s: %s"), name, dlerror ()); + if (name != filename) + free (name); + } + return (EX_NOTFOUND); } for (new = 0, l = list; l; l = l->next, new++) @@ -370,7 +403,7 @@ dyn_load_builtin (list, flags, filename) { name = printable_filename (filename, 0); builtin_error (_("cannot find %s in shared object %s: %s"), - struct_name, name, dlerror ()); + struct_name, name, dlerror ()); if (name != filename) free (name); free (struct_name); diff --git a/doc/bash.1 b/doc/bash.1 index 3f4461c4..3f47428c 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -5,12 +5,12 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Wed Jun 16 09:50:34 EDT 2021 +.\" Last Change: Fri Jul 30 15:05:43 EDT 2021 .\" .\" bash_builtins, strip all but Built-Ins section .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2021 June 16" "GNU Bash 5.1" +.TH BASH 1 "2021 July 30" "GNU Bash 5.1" .\" .\" There's some problem with having a `@' .\" in a tagged paragraph with the BSD man macros. @@ -8451,6 +8451,11 @@ If \fB\-a\fP is supplied, the list printed includes all builtins, with an indication of whether or not each is enabled. If \fB\-s\fP is supplied, the output is restricted to the POSIX \fIspecial\fP builtins. +If no options are supplied and a \fIname\fP is not a shell builtin, +\fBenable\fP will attempt to load \fIname\fP from a shared object named +\fIname\fP, as if the command were +.if t \f(CWenable \-f\fP \fIname name\fP . +.if n ``enable -f \fIname name\fP . The return value is 0 unless a .I name is not a shell builtin or there is an error loading a new builtin diff --git a/doc/bashref.texi b/doc/bashref.texi index aa77dda4..084f3a99 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -4532,6 +4532,11 @@ The @option{-s} option restricts @code{enable} to the @sc{posix} special builtins. If @option{-s} is used with @option{-f}, the new builtin becomes a special builtin (@pxref{Special Builtins}). +If no options are supplied and a @var{name} is not a shell builtin, +@code{enable} will attempt to load @var{name} from a shared object named +@var{name}, as if the command were +@samp{enable -f @var{name} @var{name}}. + The return status is zero unless a @var{name} is not a shell builtin or there is an error loading a new builtin from a shared object. diff --git a/doc/version.texi b/doc/version.texi index 064b9cd0..4dae9204 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -2,10 +2,10 @@ Copyright (C) 1988-2021 Free Software Foundation, Inc. @end ignore -@set LASTCHANGE Wed Jun 16 09:50:57 EDT 2021 +@set LASTCHANGE Fri Jul 30 15:04:53 EDT 2021 @set EDITION 5.1 @set VERSION 5.1 -@set UPDATED 16 June 2021 -@set UPDATED-MONTH June 2021 +@set UPDATED 30 July 2021 +@set UPDATED-MONTH July 2021 diff --git a/examples/loadables/sleep.c b/examples/loadables/sleep.c index fc2203d4..893cb8ed 100644 --- a/examples/loadables/sleep.c +++ b/examples/loadables/sleep.c @@ -74,12 +74,19 @@ WORD_LIST *list; r = uconvert(list->word->word, &sec, &usec, &ep); /* Maybe postprocess conversion failures here based on EP */ - if (r) { + if (r) { fsleep(sec, usec); QUIT; return(EXECUTION_SUCCESS); - } - + } + /* + * A heuristic: if the conversion failed, but the argument appears to + * contain a GNU-like interval specifier (e.g. "1m30s"), return the + * right exit code to tell execute_builtin to try and execute a disk + * command instead. + */ + if (strpbrk (list->word->word, "dhms")) + return(EX_DISKFALLBACK); builtin_error("%s: bad sleep interval", list->word->word); return (EXECUTION_FAILURE); } diff --git a/execute_cmd.c b/execute_cmd.c index 945e3d21..e65272fa 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -4740,7 +4740,10 @@ run_builtin: executing_builtin = old_builtin; executing_command_builtin = old_command_builtin; builtin = 0; - /* XXX - redirections will have to be performed again */ + + /* The redirections have already been `undone', so this + will have to do them again. But piping is forever. */ + pipe_in = pipe_out = -1; goto execute_from_filesystem; } result = builtin_status (result); diff --git a/tests/RUN-ONE-TEST b/tests/RUN-ONE-TEST index c8bef8dd..0b063810 100755 --- a/tests/RUN-ONE-TEST +++ b/tests/RUN-ONE-TEST @@ -1,4 +1,4 @@ -BUILD_DIR=/usr/local/build/bash/bash-current +BUILD_DIR=/usr/local/build/chet/bash/bash-current THIS_SH=$BUILD_DIR/bash PATH=$PATH:$BUILD_DIR