From: Chet Ramey Date: Mon, 25 Jun 2018 19:33:19 +0000 (-0400) Subject: commit bash-20180622 snapshot X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c181950a89c0f0ca4a3ae2480b783da2f7de9565;p=thirdparty%2Fbash.git commit bash-20180622 snapshot --- diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index ec7ef43fe..69a8ffce5 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -1,11701 +1,6 @@ - 2/14/2011 + 9/15/2016 --------- -[bash-4.2 released] - - 2/15 - ---- -lib/glob/gmisc.c - - fix wmatchlen and umatchlen to avoid going past the end of the - string on an incomplete bracket expression that ends with a - NUL. Partial fix for bug reported by Clark Wang - - 2/16 - ---- -subst.h - - new string extract flag value: SX_WORD. Used when calling - extract_dollar_brace_string to skip over the word in - ${param op word} from parameter_brace_expand - -subst.c - - change parameter_brace_expand to add SX_WORD to flags passed to - extract_dollar_brace_string - - change parameter_brace_expand to use SX_POSIXEXP for all non-posix - word expansion operators that treat single quotes as special, not - just % and # - - change extract_dollar_brace_string to initialize dolbrace_state to - DOLBRACE_WORD if SX_WORD flag supplied and we shouldn't use - DOLBRACE_QUOTE. Fixes bug reported by Juergen Daubert - -doc/{bash.1,bashref.texi} - - document the exact expansions here strings undergo - - 2/17 - ---- -lib/readline/vi_mode.c - - make sure that `dd', `cc', and `yy' call vidomove_dispatch from - rl_domove_read_callback. Fixes bug reported by Clark Wang - - -lib/readline/callback.c - - make sure _rl_internal_char_cleanup is called after the - vi-motion callbacks (rl_vi_domove_callback) in rl_callback_read_char. - Companion to above fix - -doc/{bash.1,bashref.texi} - - make sure that the text describing the rhs of the == and =~ - operators to [[ states that only the quoted portion of the pattern - is matched as a string - - 2/18 - ---- -lib/glob/gmisc.c - - better fix for umatchlen/wmatchlen: keep track of the number of - characters in a bracket expression as the value to increase - matchlen by if the bracket expression is not well-formed. Fixes - bug reported by Clark Wang - -subst.c - - change expand_string_for_rhs so that it sets the W_NOSPLIT2 flag - in the word flags. We will not perform word splitting or quote - removal on the result, so we do not want to add quoted nulls if - we see "" or ''. Fixes bug reported by Mike Frysinger - - - 2/19 - ---- -variables.c - - new function, int chkexport(name), checks whether variable NAME is - exported and remakes the export environment if necessary. Returns - 1 if NAME is exported and 0 if not - - call chkexport(name) to get tzset to look at the right variable in - the environment when modifying TZ in sv_tz. Don't call tzset if - chkexport doesn't indicate that the variable is exported - -variables.h - - new extern declaration for chkexport - - -{parse.y,builtins/printf.def} - - call sv_tz before calling localtime() when formatting time strings - in prompt strings or using printf. Fixes bug reported by - Dennis Williamson - -execute_cmd.c - - modify fix of 2/9 to add casts when those variables are passed to - functions; some compilers throw errors instead of warnings. Report - and fix from Joachim Schmitz - -support/shobj-conf - - add a stanza for nsk on the Tandem from Joachim Schmitz - - -{shell,lib/readline/shell}.c - - Tandem systems should use getpwnam (getlogin()); for some reason - they don't do well with using getuid(). Fix from Joachim Schmitz - - - 3/1 - --- -variables.c - - make sure that the return value from find_variable is non-null - before trying to use it in chkexport. Fixes bug reported by - Evangelos Foutras - - 3/3 - --- -parse.y - - when adding $$ to the current token buffer in read_token_word(), - don't xmalloc a buffer for two characters and then strcpy it, just - copy the characters directly into the token buffer. Fix from - Michael Whitten - -execute_cmd.c - - fix expand_word_unsplit to add the W_NOSPLIT2 flag to the word to - be expanded, so "" doesn't add CTLNUL. Similar to fix of 2/18 to - expand_string_for_rhs. Fixes bug reported by Nathanael D. Noblet - and Matthias Klose - -parse.y - - fix extended_glob case of read_token_word to allocate an extra - space in the buffer for the next character read after the extended - glob specification if it's a CTLESC or CTLNUL. Report and fix from - Michael Witten - - fix shell expansions case of read_token_word to allocate an extra - space in the buffer for the next character read after the shell - expansion if it's a CTLESC or CTLNUL. Report and fix from - Michael Witten - - TENTATIVE: fix read_token_word to reduce the amount of buffer space - required to hold the translated and double-quoted value of $"..." - strings. Report and fix from Michael Witten - - change code around got_character and got_escaped_character labels to - make sure that we call RESIZE_MALLOCED_BUFFER before adding the - CTLESC before a CTLESC or CTLNUL, and before adding the character if - we're not adding a CTLESC. Report and fix from - Michael Witten - -subst.c - - new param flags value, PF_ASSIGNRHS, mirrors W_ASSIGNRHS, noting that - parameter expansion is on rhs of assignment statement. That inhibits - word splitting - - change param_expand to call string_list_dollar_at with quoted == 1 - if PF_ASSIGNRHS is set, so it will quote IFS characters in the - positional parameter before separating them with the first char of - $IFS. This keeps the rhs from being split inappropriately. Fixes - bug reported by Andres Perera - - 3/4 - --- -lib/readline/bind.c - - add a missing free of `names' in rl_function_dumper. Bug report - and fix from Michael Snyder - - 3/5 - --- -lib/readline/rltty.c - - change rl_deprep_terminal so it uses fileno (stdin) for the tty fd - if rl_instream is not set, like rl_prep_terminal - - 3/6 - --- -lib/readline/display.c - - fix rl_message to use a dynamically-allocated buffer instead of a - fixed-size buffer of 128 chars for the `local message prompt'. Bug - report and fix from Micah Cowan - - 3/7 - --- -jobs.c - - add sentinel to wait_sigint_handler so it only sets wait_sigint_received - if waiting_for_child is non-zero; otherwise, it restores the old - SIGINT handler and sends itself the SIGINT - - set waiting_for_child around the calls to waitchld that use it to - synchronously wait for a process - - change logic that decides whether or not the child process blocked - or handled SIGINT based on whether or not waitpid returns -1/EINTR - and the shell receives a SIGINT and the child does not exit. If - the child later exits due to SIGINT, cancel the assumoption that it - was handled - - instead of testing whether or not the child exited due to SIGINT - when deciding whether the shell should act on a SIGINT it received - while waiting, test whether or not we think the child caught - SIGINT. If it did, we let it go (unless the shell has it trapped); - if it did not catch it, the shell acts on the SIGINT. Fix from - Linus Torvalds , bug report originally - from Oleg Nesterov - - 3/8 - --- -shell.c - - initialize no_line_editing to 1 if READLINE is not defined -- we - can't have line editing without readline - - 3/12 - ---- -lib/readline/signals.c - - add SIGHUP to the set of signals readline handles - -lib/readline/doc/rltech.texi - - document that SIGHUP is now part of the set of signals readline - handles - -lib/readline/input.c - - if _rl_caught_signal indicates that read() was interrupted by a - SIGHUP or SIGTERM, return READERR or EOF as appropriate - - call rl_event_hook, if it's set, if call to read in rl_getc - returns -1/EINTR. If rl_event_hook doesn't do anything, this - continues the loop as before. This handles the other fatal - signals - -execute_cmd.c - - add a couple of QUIT; calls to execute_disk_command and - execute_simple_command to improve responsiveness to interrupts - and fatal signals - -input.c - - rearrange getc_with_restart so that the return values from read() - are handled right - -parse.y - - don't need to set terminate_immediately in yy_stream_get, since - getc_with_restart checks for terminating signals itself - - since readline returns READERR on SIGHUP or SIGTERM, don't need - to set terminate_immediately. Still doesn't handle other - signals well -- will have to check that some more - -bashline.c - - new function, bash_event_hook, for rl_event_hook. Just checks for - terminating signals and acts on them using CHECK_TERMSIG. - - set rl_event_hook to bash_event_hook - -builtins/read.def - - take out setting terminate_immediately; add calls to CHECK_TERMSIG - after read calls - -doc/{bash.1,bashref.texi} - - move the text describing the effect of negative subscripts used to - reference indexed array elements to the paragraphs describing - ${parameter[subscript]}, since that's where they are implemented. - Pointed out by Christopher F. A. Johnson - -arrayfunc.[ch],subst.c - - array_expand_index now takes a new first argument: a SHELL_VAR * - of the array variable being subscripted. Can be used later to fully - implement negative subscripts - - 3/14 - ---- -lib/glob/glob.c - - fix mbskipname to not turn the directory entry name into a wide char - string if the conversion of the pattern to a wide char string fails - - fix mbskipname to call skipname if either the pattern or the filename - can't be converted into a wide-char string - -lib/glob/xmbsrtowcs.c - - fix xdupmbstowcs2 to handle return value of 0 from mbsnrtowcs and - short-circuit with failure in that case. Fixes bug reported by - Roman Rakus - - 3/15 - ---- -bashline.c - - new variable, bash_filename_quote_characters to store the value - assigned to rl_filename_quote_characters so it can be restored - if changed. - - change bashline_reset and attempt_shell_completion to restore - rl_filename_quote_characters if not set to default - - 3/22 - ---- -lib/glob/glob.c - - wdequote_pathname falls back to udequote_pathname if xdupmbstowcs - fails to convert the pathname to a wide-character string - -lib/glob/xmbsrtowcs.c - - xdupmbstowcs2: change to fix problem with leading '\\' (results in - nms == 0, which causes it to short-circuit with failure right - away). Fixes bug pointed out by Werner Fink - - xdupmbstowcs2: compensate for mbsnrtowcs returning 0 by taking the - next single-byte character and going on - - xdupmbstowcs2: change memory allocation to increase by WSBUF_INC - bytes; try to avoid calls to realloc (even if they don't actually - result in more memory being allocated) - - 3/24 - ---- -doc/{bash.1,bashref.texi} - - slightly modify BASH_SUBSHELL description based on complaint from - Sam Liddicott - - 3/25 - ---- -trap.c - - change free_trap_strings to not call free_trap_string for signals - that are being ignored, like reset_or_restore_signal_handlers. - Fixes bug reported by Satoshi Takahashi - - 3/26 - ---- -lib/readline/rltypedefs.h - - remove old Function/VFunction/CPFunction/CPPFunction typedefs as - suggested by Tom Tromey - -lib/readline/rlstdc.h - - move defines for USE_VARARGS/PREFER_STDARG/PREFER_VARARGS from - config.h.in to here because declaration of rl_message in - readline.h uses the defines. This makes it hard for another packages - to use after the header files are installed, since config.h is not - one of the installed files. Suggested by Tom Tromey - - - 3/27 - ---- -print_cmd.c - - change indirection_string from a static buffer to a dynamic one - managed by indirection_level_string(), so we don't end up truncating - PS4. Suggested by Dennis Williamson - -lib/readline/shell.c - - change sh_set_lines_and_columns to use static buffers instead of - allocating the buffers to pass to setenv/putenv - -lib/readline/terminal.c - - change _rl_get_screen_size to not call sh_set_lines_and_columns if - ignore_env == 0 - - _rl_sigwinch_resize_terminal: new function to just retrieve terminal - size, ignoring environment - -lib/readline/rlprivate.h - - new external declaration for _rl_sigwinch_resize_terminal() (currently - unused) - -lib/readline/signals.c - - rl_sigwinch_handler: set _rl_caught_signal to SIGWINCH - - rl_sigwinch_handler: don't immediately call rl_resize_terminal; just - leave _rl_caught_signal set for RL_CHECK_SIGNALS to handle - - _rl_signal_handler: call rl_resize_terminal if sig == SIGWINCH. - Should fix hang when sending multiple repeated SIGWINCH reported by - Henning Bekel - - 3/29 - ---- -lib/sh/snprintf.c - - include math.h for any defines for isinf/isnan - - use code from gnulib documentation to implement isinf/isnan if they - are not defined - -configure.in - - don't check for isinf or isnan; c99 says they're macros anyway - -config.h.in - - remove defines for ISINF_IN_LIBC and ISNAN_IN_LIBC, no longer used - by snprintf.c - - 4/2 - --- -braces.c - - brace_gobbler: fix to understand double-quoted command substitution, - since the shell understands unquoted comsubs. Fixes bug reported - by Michael Whitten - -lib/readline/display.c - - include on MDOS - - get and set screen size using DJGPP-specific calls on MSDOS - - move cursor up clear screen using DJGPP-specific calls - - don't call tputs on DJGPP; there is no good terminfo support - -lib/readline/terminal.c - - include on MDOS - - get and set screen size using DJGPP-specific calls on MSDOS - - use DJGPP-specific initialization on MSDOS, zeroing all the - _rl_term_* variables - - don't call tputs on DJGPP; there is no good terminfo support - DJGPP support from Eli Zaretskii - - 4/6 - --- - -config-top.h - - change DEFAULT_PATH_VALUE to something more useful and modern - - 4/8 - --- -tests/printf2.sub - - make sure LC_ALL and LC_CTYPE are set so LANG assignment takes effect. - Reported by Cedric Arbogast - - 4/11 - ---- -include/chartypes.h - - fix a couple of dicey defines (though ones that don't cause any - compiler warnings) in IN_CTYPE_DOMAIN - -doc/{bashref.texi,bash.1} - - add note referring to duplicating file descriptors in sections - describing redirecting stdout and stderr and appending to stdout - and stderr. Suggested by Matthew Dinger - -pcomplete.c - - it_init_helptopics: new function to support completing on help topics, - not just builtins - - it_helptopics: new programmable completion list of help topics - - build list of helptopic completions in gen_action_completions on - demand - -pcomplete.h - - new extern declaration for it_helptopics - -builtins/complete.def - - the `helptopic' action now maps to CA_HELPTOPIC intead of CA_BUILTIN, - since there are more help topics than just builtins. Suggested by - Clark Wang - - 4/12 - ---- -print_cmd.c - - fix print_arith_for_command to add a call to PRINT_DEFERRED_HEREDOCS - before ending the body of the command, so heredocs get attached to - the right command instead of to the loop. From gentoo bug 363371 - http://bugs.gentoo.org/show_bug.cgi?id=363371 - -execute_cmd.c - - change coproc_pidchk to unset the appropriate shell variables when - the (currently single) known coproc pid terminates - - cleanup and new functions to fully support multiple coprocesses when - and if I decide to go there - - 4/13 - ---- -print_cmd.c - - fix print_group_command to add a call to PRINT_DEFERRED_HEREDOCS - after call to make_command_string_internal before printing closing - `}' - - fix make_command_string_internal to add a call to - PRINT_DEFERRED_HEREDOCS after recursive call to - make_command_string_internal in case cm_subshell before printing - closing `)' - - 4/14 - ---- -print_cmd.c - - change overlapping strcpy in named_function_string to memmove - -sig.h - - UNBLOCK_SIGNAL: convenience define, same as UNBLOCK_CHILD, just - restores an old signal mask - -trap.c - - set_signal: instead of setting the signal handler to SIG_IGN while - installing the new trap handler, block the signal and unblock it - after the new handler is installed. Fixes bug reported by Roman - Rakus - - 4/15 - ---- -doc/{bash.1,bashref.texi} - - make it clear that enabling monitor mode means that all jobs run in - separate process groups - - 4/18 - ---- -builtins/fc.def - - update fix of 4/15/2010 to not take saved_command_line_count into - account when stepping down the history list to make sure that - last_hist indexes something that is valid. Fixes bug reported by - - - 4/19 - ---- -builtins/fc.def - - fc_gethnum: make sure the calculation to decide the last history - entry is exactly the same as fc_builtin. Fixes bug uncovered by - fix of 4/18 to stop seg fault - - 4/22 - ---- -lib/readline/terminal.c - - change _rl_enable_meta_key to set a flag indicating that it sent the - enable-meta sequence - - _rl_disable_meta_key: new function to turn off meta mode after we - turned it on with _rl_enable_meta_key - -lib/readline/rlprivate.h - - extern declaration for _rl_disable_meta_key - -configure.in - - if not cross-compiling, set CFLAGS_FOR_BUILD from any CFLAGS inherited - from the environment. Fixes HP/UX build problem reported by - "Daniel Richard G." - - 4/26 - ---- -config-top.h - - define MULTIPLE_COPROCS to 0 so the code is still disabled but easy - to enable via configure option or editing this file - - 4/29 - ---- -lib/sh/eaccess.c - - freebsd provides faccessat, with the same misfeature as their eaccess - and access implementations (X_OK returns true for uid==0 regardless - of the actual file permissions), so reorganize code to check the - file permissions as with eaccess. Report and fix from Johan Hattne - - - 5/2 - --- -doc/{bash.1,bashref.texi} - - add forward reference to `Pattern Matching' from `Pathname - Expansion', suggested by Greg Wooledge - - 5/5 - --- -pcomplib.c - - the bash_completion project now distributes over 200 completions - for various programs, with no end in sight, so increase the value - of COMPLETE_HASH_BUCKETS from 32 to 128 - -pathexp.c - - quote_string_for_globbing: make sure CTLESC quoting CTLESC is - translated into \ even if the flags include QGLOB_REGEXP. - We don't want to process the second CTLESC as a quote character. - Fixes bug reported by Shawn Bohrer - - 5/6 - --- -builtins/printf.def - - change PRETURN to not call fflush if ferror(stdout) is true - - if a call to one of the stdio functions or printstr leaves - ferror(stdout) true, and PRETURN is going to be called, let PRETURN - print the error message rather than doubling up the messages. Fixes - problem reported by Roman Rakus - - 5/9 - --- -doc/{bash.1,bashref.texi} - - add note to the effect that lists inside compound command can be - terminated by newlines as well as semicolons. Suggested by - Roman Byshko - - 5/10 - ---- -subst.c - - remove_quoted_nulls: fix problem that caused it to skip over the - character after a CTLNUL, which had the effect of skipping every - other of a series of CTLNULs. Fixes bug reported by - Marten Wikstrom - - 5/11 - ---- -subst.c - - extract_process_subst: add SX_COMMAND flag to call to - extract_delimited_string, since we're expanding the same sort of - command as command substitution. Fixes bug reported in Ubuntu - bug 779848 - - 5/12 - ---- -configure.in - - set the prefer_shared and prefer_static variables appropriately - depending on the value of $opt_static_link - -aclocal.m4 - - AC_LIB_LINKFLAGS_BODY: change to not prefer shared versions of the - libraries it's searching for if the prefer_shared variable is "no". - Fixes problem reported by Cedric Arbogast - - 5/13 - ---- -lib/readline/readline.c - - _rl_internal_teardown: add call to _rl_disable_meta_key to make the - meta key active only for the duration of the call to readline() - - _rl_internal_setup: move call to _rl_enable_meta_key here from - readline_initialize_everything so the meta key is active only for - the duration of the call to readline(). Suggestion from Miroslav - Lichvar - -builtins/help.def - - help_builtin: change strncmp to strcmp so that `help read' no longer - matches `readonly'. Suggested by Clark Wang - -config.h.in - - add define for GLIBC21, checked using jm_GLIBC21 as part of the tests - for libintl - -lib/malloc/malloc.c - - internal_free: don't use the cached value of memtop when deciding - whether or not to adjust the break and give memory back to the kernel - when using the GNU C library, since glibc uses sbrk for its own - internal purposes. From Debian bug 614815, reported by Samuel - Thibault - -aclocal.m4 - - BASH_STRUCT_WEXITSTATUS_OFFSET: change AC_RUN_IFELSE to AC_TRY_RUN - to avoid warning about not using AC_LANG_SOURCE - - 5/14 - ---- -bashline.[ch] - - two new functions, bashline_set_event_hook and bashline_reset_event_hook, - to set rl_event_hook to bash_event_hook and back to NULL, respectively - - don't set rl_event_hook unconditionally - -sig.c - - termsig_sighandler: if the shell is currently interactive and - readline is active, call bashline_set_event_hook to cause - termsig_handler to be called via bash_event_hook when the shell - returns from the signal handler - - 5/15 - ---- -lib/readline/display.c - - _rl_col_width: Mac OS X has a bug in wcwidth: it does not return 0 - for UTF-8 combining characters. Added workaround dependent on - MACOSX. Fixes problem pointed out by Thomas De Contes - - - 5/16 - ---- -lib/readline/rlmbutil.h - - WCWIDTH: wrapper for wcwidth that returns 0 for Unicode combining - characters on systems where wcwidth is broken (e.g., Mac OS X). - -lib/readline/{complete,display,mbutil}.c - - use WCWIDTH instead of wcwidth - - 5/17 - ---- -lib/readline/display.c - - update_line: after computing ofd and nfd, see whether the next - character in ofd is a zero-width combining character. If it is, - back ofd and nfd up one, so the base characters no longer compare - as equivalent. Fixes problem reported by Keith Winstein - - -lib/readline/nls.c - - _rl_utf8locale: new flag variable, set to non-zero if the current - locale is UTF-8 - - utf8locale(): new function, returns 1 if the passed lspec (or the - current locale) indicates that the locale is UTF-8. Called from - _rl_init_eightbit - -lib/readline/rlprivate.h - - extern declaration for _rl_utf8locale - -locale.c - - locale_utf8locale: new flag variable, set to non-zero if the current - locale is UTF-8 (currently unused) - - locale_isutf8(): new function, returns 1 if the passed lspec (or the - current locale) indicates that the locale is UTF-8. Should be called - whenever the locale or LC_CTYPE value is modified - -aclocal.m4 - - BASH_WCWIDTH_BROKEN: new test for whether or not wcwidth returns - zero-width characters like unicode combining characters as having - display length 1; define WCWIDTH_BROKEN in this case - -config.h.in - - WCWIDTH_BROKEN: new define - -lib/readline/rlmbutil.h - - change WCWIDTH macro to use _rl_utf8locale and the full range of - Unicode combining characters (U+0300-U+036F) - - 5/19 - ---- -lib/readline/rlprivate.h - - _rl_search_context: new member, prevc, will hold character read - prior to lastc - -lib/readline/isearch.c - - _rl_isearch_dispatch: if the character causes us to index into - another keymap, save that character in cxt->prevc - - _rl_isearch_dispatch: if we index into another keymap, but don't - find a function that's special to i-search, and the character that - caused us to index into that keymap would have terminated the - search, push back cxt->prevc and cxt->lastc to make it appear as - if `prevc' terminated the search, and execute lastc as a command. - We have to push prevc back so we index into the same keymap before - we read lastc. Fixes bug report from Davor Cubranic - - - 5/20 - ---- -expr.c - - expr_bind_variable: pay attention to the return value from - bind_variable and check whether or not we should error out due to - a readonly or noassign variable. Fixes bug reported by Eric - Blake - - 5/26 - ---- - -lib/readline/search.c - - include histlib.h for ANCHORED_SEARCH defines - - rl_history_search_flags: new variable, holds ANCHORED_SEARCH flag for - the duration of a history search - - rl_history_search_reinit: takes a new flags variable, defines whether - or not the search is anchored; assigned to rl_history_search_flags - - rl_history_serarch_reinit: if ANCHORED_SEARCH flag passed, add ^ to - beginning of search string; otherwise search string is unmodified - - rl_history_search_internal: set rl_point appropriately based on - whether or not rl_history_search_flags includes ANCHORED_SEARCH - - rl_history_substr_search_forward: new function, for non-anchored - substring search forward through history for string of characters - preceding rl_point - - rl_history_substr_search_backward: new function, for non-anchored - substring search backward through history for string of characters - preceding rl_point. Original code from Niraj Kulkarni - - -lib/readline/readline.h - - extern declarations for rl_history_substr_search_{for,back}ward - -lib/readline/funmap.c - - history-substring-search-forward: new bindable command, invokes - rl_history_substr_search_forward - - history-substring-search-backward: new bindable command, invokes - rl_history_substr_search_backward - -lib/readline/doc/{rluser.texi,readline.3} - - document history-substring-search-forward and - history-substring-search-backward - - 5/27 - ---- -{nojobs,jobs}.c - - add support for DONT_REPORT_SIGTERM so that the shell doesn't print - a message when a job exits due to SIGTERM since that's the default - signal sent by the kill builtin. Suggested by Marc Herbert - - -config-top.h - - DONT_REPORT_SIGTERM: new user-modifiable setting. Commented out - by default - - 5/28 - ---- -lib/readline/bind.c - - _rl_skip_to_delim: skip to a closing double quote or other delimiter, - allowing backslash to quote any character, including the delimiter - - rl_parse_and_bind: call _rl_skip_to_delim instead of using inline - code - - rl_parse_and_bind: allow quoted strings as the values of string - variables. Variable values without double quotes have trailing - whitespace removed (which still allows embedded whitespace, for - better or worse). Fixes problem with string variables not matching - in `set' command if values happen to have trailing spaces or tabs - (debian bash bug #602762), but introduces slight incompatibility. - - 5/29 - ---- -doc/{bash.1,bashref.texi} - - clarify unset description to specify that without options, a - variable, then a shell function if there is no variable by that - name, is unset. Fixes discrepancy reported by Mu Qiao - - - 6/4 - ---- -doc/{bash.1,bashref.texi} - - clarify description of LINES and COLUMNS (and checkwinsize shopt - option) to make it clear that only interactive shells set a - handler for SIGWINCH and update LINES and COLUMNS. Original - report submitted by Jonathan Nieder - -arrayfunc.c - - expand_compound_array_assignment: defer expansion of words between - parens when performing compound assignmnt to an associative array - variable - - assign_compound_array_list: perform the same expansions when doing - a compound array assignment to an associative array variable as - when doing a straight array index assignment. The idea is that - foo=( [ind1]=bar [ind2]=quux) - is the same as - foo[ind1]=bar ; foo[ind2]=quux - - This fixes problems with double-expansion and quote removal being - performed on the array indices - - 6/13 - ---- -doc/{bash.1,bashref.texi} - - Add a little text to make it clear that the locale determines how - range expressions in glob patterns are handled. - - - 6/21 - ---- -builtins/read.def - - display a message and return error status if -a is used with an - existing associative array. Fixes bug reported by Curtis Doty - - - 6/24 - ---- -{jobs,nojobs}.c - - non-interactive shells now react to the setting of checkwinsize - and set LINES and COLUMNS after a foreground job exits. From a - suggestion by Leslie Rhorer - -doc/{bash.1,bashref.texi} - - checkwinsize: remove language saying that only interactive shells - check the window size after each command - -lib/readline/histfile.c - - history_backupfile: new file, creates a backup history file name - given a filename (appending `-') - - history_do_write: when overwriting the history file, back it up - before writing. Restore backup file on a write error. Suggested - by chkno@chkno.net - -bashline.c - - find_cmd_name: two new arguments, return the start and end of the - actual text string used to find the command name, without taking - whitespace into account - - attempt_shell_completion: small changes to make sure that completion - attempted at the beginning of a non-empty line does not find a - programmable completion, even if the command name starts at point - - attempt_shell_completion: small change to make sure that completion - does not find a progcomp when in whitespace before the command - name - - attempt_shell_completion: small change to make sure that completion - does not find a progcomp when point is at the first character of a - command name, even when there is leading whitespace (similar to - above). Fixes problems noted by Ville Skytta - -subst.c - - brace_expand_word_list: since the individual strings in the strvec - returned by brace_expand are already allocated, don't copy them to - newly-allocated memory when building the WORD_LIST, just use them - intact - -locale.c - - locale_mb_cur_max: cache value of MB_CUR_MAX when we set or change - the locale to avoid a function call every time we need to read it - -shell.h - - new struct to save shell_input_line and associated variables: - shell_input_line_state_t - - add members of sh_parser_state_t to save and restore token and the - size of the token buffer - -parse.y - - {save,restore}_input_line_state: new functions to save and restore - shell_input_line and associated variables - - {save,restore}_parser_state: add code to save and restore the token - and token buffer size - - xparse_dolparen: call save_ and restore_input_line_state to avoid - problems with overwriting shell_input_line when we recursively - call the parser to parse a command substitution. Fixes bug - reported by Rui Santos - -include/shmbutil.h - - use locale_mb_cur_max instead of MB_CUR_MAX in ADVANCE_CHAR and - similar macros - -lib/glob/smatch.c - - rangecmp,rangecmp_wc: change to take an additional argument, which - forces the use of strcoll/wscoll when non-zero. If it's 0, a new - variable `glob_asciirange' controls whether or not we use strcoll/ - wscoll. If glob_asciirange is non-zero, we use straight - C-locale-like ordering. Suggested by Aharon Robbins - - - 6/30 - ---- -execute_cmd.c - - execute_pipeline: make sure the lastpipe code is protected by - #ifdef JOB_CONTROL. Fixes problem reported by Thomas Cort - - - 7/2 - --- -lib/readline/complete.c - - EXPERIMENTAL: remove setting of _rl_interrupt_immediately around - completion functions that touch the file system. Idea from Jan - Kratochvil and the GDB development - team - -lib/readline/signals.c - - rl_signal_handler: if we're in callback mode, don't interrupt - immediately on a SIGWINCH - - 7/3 - --- -bashline.c - - set_directory_hook: and its siblings are a new set of functions to - set, save, and restore the appropriate directory completion hook - - change callers to use {set,save,restore}_directory_hook instead of - manipulating rl_directory_rewrite_hook directly - - dircomplete_expand: new variable, defaults to 0, if non-zero causes - directory names to be word-expanded during word and filename - completion - - change {set,save,restore}_directory_hook to look at dircomplete_expand - and change rl_directory_completion_hook or rl_directory_rewrite_hook - appropriately - -bashline.h - - extern declaration for set_directory_hook so shopt code can use it - - 7/6 - --- -builtins/shopt.def - - globasciiranges: new settable shopt option, makes glob ranges act - as if in the C locale (so b no longer comes between A and B). - Suggested by Aharon Robbins - - 7/7 - --- -doc/{bash.1,bashref.texi} - - document new `globasciiranges' shopt option - - 7/8 - --- -builtins/shopt.def - - direxpand: new settable option, makes filename completion expand - variables in directory names like bash-4.1 did. - - shopt_set_complete_direxpand: new function, does the work for the - above by calling set_directory_hook - -doc/{bash.1,bashref.texi} - - document new `direxpand' shopt option - - 7/15 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: when adding character to search string, use - cxt->lastc (which we use in the switch statement) instead of c, - since lastc can be modified earlier in the function - - 7/18 - ---- -lib/readline/rlprivate.h - - _rl_search_context: add another member to save previous value of - (multibyte) lastc: pmb is to mb as prevc is to lastc - -lib/readline/isearch.c: - - _rl_isearch_dispatch: if a key sequence indexes into a new keymap, - but doesn't find any bound function (k[ind].function == 0) or is - bound to self-insert (k[ind].function == rl_insert), back up and - insert the previous character (the one that caused the index into a - new keymap) and arrange things so the current character is the next - one read, so both of them end up in the search string. Fixes bug - reported by Clark Wang - - _rl_isearch_dispatch: a couple of efficiency improvements when adding - characters to the isearch string - - 7/24 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: save and restore cxt->mb and cxt->pmb - appropriately when in a multibyte locale - -doc/{bash.1,bashref.texi} - - correct description of {x}>file (and other redirection operators - that allocate a file descriptor) to note the the fd range is - greater than or equal to 10. Fixes problem reported by - Christian Ullrich - -lib/readline/signals.c - - rl_signal_handler: don't interrupt immediately if in callback mode - -lib/readline/callback.c - - rl_callback_read_char: install signal handlers only when readline - has control in callback mode, so readline's signal handlers aren't - called when the application is active (e.g., between the calls to - rl_callback_handler_install and rl_callback_read_char). If the - readline signal handlers only set a flag, which the application - doesn't know about, the signals will effectively be ignored until - the next time the application calls into the readline callback - interface. Fixes problem of calling unsafe functions from signal - handlers when in callback mode reported by Jan Kratochvil - - -execute_cmd.c - - fix_assignment_words: when in Posix mode, the `command' builtin - doesn't change whether or not the command name it protects is an - assignment builtin. One or more instances of `command' - preceding `export', for instance, doesn't make `export' treat its - assignment statement arguments differently. Posix interpretation - #351 - -doc/{bash.1,bashref.texi} - - document new Posix-mode behavior of `command' when preceding builtins - that take assignment statements as arguments - -builtins/printf.def - - printstr: if fieldwidth or precision are < 0 or > INT_MAX when - supplied explicitly (since we take care of the `-' separately), - clamp at INT_MAX like when using getint(). Fixes issue reported - by Ralph Coredroy - - 7/25 - ---- -lib/readline/chardefs.h - - isxdigit: don't define if compiling with c++; declared as a c++ - template function. Fixes bug reported by Miroslav Lichvar - - -builtins/printf.def - - getint: if garglist == 0, return whatever getintmax returns (0). - Fixes bug reported by Ralph Coredroy - - 7/28 - ---- -doc/{bash.1,bashref.texi} - - minor changes to the descriptions of the cd and pushd builtins - -lib/sh/zread.c - - zsyncfd: change variable holding return value from lseek to - off_t. Bug report and fix from Gregory Margo - - 8/1 - --- -expr.c - - don't check for division by 0 when in a context where no evaluation - is taking place. Fixes bug reported by dnade.ext@orange-ftgroup.com - - 8/6 - --- -execute_cmd.c - - execute_command_internal: the parent branch of the subshell code - (where the child calls execute_in_subshell) should not close all - open FIFOs with unlink_fifo_list if it's part of a shell function - that's still executing. Fixes bug reported by Maarten Billemont - - - 8/9 - --- -builtins/common.c - - get_exitstat: return EX_BADUSAGE (2) on a non-numeric argument - -builtins/return.def - - return_builtin: just call get_exitstat to get the return status, - let it handle proper parsing and handling of arguments. Fixes - issue most recently raised by Linda Walsh . - Reverses change from 9/11/2008 (see above) - - 8/16 - ---- -doc/{bash.1,bashref.texi} - - clean up `set -e' language to make it clearer that any failure of - a compound command will cause the shell to exit, not just subshells - and brace commands - - 8/17 - ---- -configure.in - - make the various XXX_FOR_BUILD variables `precious' to autoconf to - avoid stale data - - change how CC_FOR_BUILD is initialized when cross-compiling and not, - but do not change behavior - - initialize CFLAGS_FOR_BUILD to -g when cross-compiling - - initialize LIBS_FOR_BUILD to $(LIBS) when not cross-compiling, empty - when cross-compiling - - create AUTO_CFLAGS variable to hold basic CFLAGS defaults; used when - CFLAGS not inherited from environment (like effect of old - auto_cflags variable) - - substitute LIBS_FOR_BUILD into output Makefiles - [changes inspired by bug report from Nathan Phillip Brink - -- gentoo bug 378941] - -builtins/Makefile.in - - substitute LIBS_FOR_BUILD from configure, not strictly initialized - to $(LIBS) - - 8/27 - ---- -doc/{bash.1,bashref.texi} - - minor changes to the here string description to clarify the - expansions performed on the word - -support/shobj-conf - - handle compilation on Lion (Mac OS X 10.7/darwin11) with changes - to darwin stanzas. Fixes readline bug reported by Vincent - Sheffer - -lib/sh/strtrans.c - - ansic_wshouldquote: check a string with multi-byte characters for - characters that needs to be backslash-octal escaped for $'...' - - ansic_shouldquote: if is_basic fails for one character, let - ansic_wshouldquote examine the rest of the string and return what - it returns. From a patch sent by Roman Rakus - - 8/30 - ---- -lib/sh/strtrans.c - - ansic_quote: changes to quote (or not) multibyte characters. New - code converts them to wide characters and uses iswprint to check - valid wide chars. From a patch sent by Roman Rakus - - - 9/7 - --- -lib/sh/shquote.c - - sh_backslash_quote: change to be table-driven so we can use a - different table if we want to - - sh_backslash_quote: takes a second char table[256] argument; - -externs.h - - sh_backslash_quote: add second argument to function prototype - -bashline.c,braces.c,parse.y,builtins/printf.def - - change callers of sh_backslash_quote to add second argument - -bashline.c - - filename_bstab: table of characters to pass to sh_backslash_quote; - characters with value 1 will be backslash-quoted - - set_filename_bstab: turn on characters in filename backslash-quote - table according to passed string argument - - call set_filename_bstab every time rl_filename_quote_characters is - assigned a value - - bash_quote_filename: call sh_backslash_quote with filename_bstab - as second argument. This allows other characters in filenames to - be quoted without quoting, for instance, a dollar sign in a shell - variable reference - - 9/8 - --- -bashline.c - - complete_fullquote: new variable, controls table passed to - sh_backslash_quote. If non-zero (the default), the standard set - of shell metacharacters -- as in bash versions up to and including - bash-4.2 -- gets backslash-quoted by the completion code. If zero, - sh_backslash_quote gets the table with the characters in the - variable reference removed, which means they are removed from the - set of characters to be quoted in filenames - - 9/10 - ---- -bashline.c - - bash_filename_stat_hook: new function, designed to expand variable - references in filenames before readline passes them to stat(2) - to determine whether or not they are a directory - - 9/15 - ---- -builtins/declare.def - - if assign_array_element fails due to a bad (or empty) subscript, mark - it as an assignment error and don't attempt any further processing - of that declaration. Fixes segfault bug reported by Diego Augusto - Molina - - 9/19 - ---- -expr.c - - exppower: replace the simple exponentiation algorithm with an - implementation of exponentiation by squaring. Inspired by report - from Nicolas ARGYROU - -bashline.c - - bash_quote_filename: check for rtext being non-null before - dereferencing it - - set_saved_history: operate_and_get_next assumes that the previous - line was added to the history, even when the history is stifled and - at the max number of entries. If it wasn't, make sure the history - number is incremented properly. Partial fix for bug reported by - gregrwm - -doc/{bash.1,bashref.texi},lib/readline/doc/{hsuser,rluser}.texi - - minor editorial changes inspired by suggestions from - Roger Zauner - - 9/20 - ---- -lib/intl/localealias.c - - read_alias_file: close resource leak (fp) when returning on error - - 9/22 - ---- -execute_command.c - - execute_intern_function: implement Posix interpretation 383 by making - it an error to define a function with the same name as a special - builtin when in Posix mode. - http://austingroupbugs.net/view.php?id=383#c692 - - 9/25 - ---- -doc/{bash.1,bashref.texi} - - formatting and some content changes from Benno Schulenberg - - - document new posix-mode behavior from interp 383 change of 9/22 - - 9/30 - ---- -execute_cmd.c - - shell_execve: add strerror to error message about executable file - that shell can't execute as a shell script. From suggestion by - daysleeper - - 10/1 - ---- -bashhist.c - - maybe_add_history: act as if literal_history is set when parser_state - includes PST_HEREDOC, so we save the bodies of here-documents just - as they were entered. Fixes bug reported by Jonathan Wakely - - - bash_add_history: make sure that the second and subsequent lines of - a here document don't have extra newlines or other delimiting - chars added, since they have the trailing newline preserved, when - `lithist' is set and history_delimiting_chars isn't called - -execute_cmd.c - - execute_command_internal: avoid fd exhaustion caused by using - process substitution in loops inside shell functions by using - copy_fifo_list and close_new_fifos (). Fixes debian bash bug - 642504 - -lib/readline/complete.c - - new variable, rl_filename_stat_hook, used by append_to_match. If - filename completion is desired, and rl_filename_stat_hook points - to a function, call that function to expand the filename in an - application-specific way before calling stat. - -bashline.c - - bash_default_completion: if variable completion returns a single - match, use bash_filename_stat_hook and file_isdir to determine - whether or not the variable name expands to a directory. If it - does, set the filename_append_character to `/'. This is not - perfect, so we will see how it works out. Adds functionality - requested by Peter Toft and Patrick Pfeifer - - - rl_filename_stat_hook: assigned bash_filename_stat_hook, so things - like $HOME/Downloads (after completion) have a slash appended. - In general, this causes the stat hook to be called whenever - filename completion is appended. Adds functionality requested by - Patrick Pfeifer - -lib/readline/readline.h - - new extern declaration for rl_filename_stat_hook - -lib/readline/doc/rltech.texi - - rl_directory_rewrite_hook: now documented - - rl_filename_stat_hook: document - -pcomplete.c - - gen_action_completions: in the CA_DIRECTORY case, turn off - rl_filename_completion_desired if it was off before we called - rl_filename_completion_function and we didn't get any matches. - Having it on causes readline to quote the matches as if they - were filenames. Adds functionality requested by many, - including Clark Wang - -assoc.[ch] - - assoc_replace: new function, takes the same arguments as - assoc_insert, but returns the old data instead of freeing it - - assoc_insert: if the object returned by hash_insert doesn't have - the same value for its key as the key passed as an argument, we - are overwriting an existing value. In this case, we can free the - key. Fixes bug reported by David Parks - - 10/5 - ---- -print_cmd.c - - indirection_level_string: small change to only re-enable `x' - option after calling decode_prompt_string if it was on before. In - normal mode, it will be, but John Reiser - has a novel use for that code in conjunction with a pre-loaded - shared library that traces system call usage in shell scripts - - 10/10 - ----- -Makefile.in - - Fix from Mike Frysinger to avoid trying to - build y.tab.c and y.tab.h with two separate runs of yacc if - parse.y changes. Problem with parallel makes - - Fix from Mike Frysinger to avoid subdirectory - builds each trying to make version.h (and all its dependencies) - -lib/sh/Makefile.in - - remove some dependencies on version.h where it doesn't make sense - -variables.c - - initialize_shell_variables: while reading the environment, a shell - running in posix mode now checks for SHELLOPTS being readonly (it - gets set early on in main()) before trying to assign to it. It - saves an error message and the variable gets parsed as it should. - Fixes bug reported by Len Giambrone - - 10/14 - ----- -doc/{bash.1,bashref.texi} - - add to the "duplicating file descriptors" description that >&word - doesn't redirect stdout and stderr if word expands to `-' - - add to the "appending standard output and standard error" - description a note that >&word, where word is a number or `-', - causes other redirection operators to apply for sh and Posix - compatibility reasons. Suggested by Greg Wooledge - - - 10/15 - ----- -pcomplete.c - - change pcomp_filename_completion_function to only run the filename - dequoting function in the cases (as best as it can figure) where - readline won't do it via rl_filename_completion_function. Based - on reports from - - 10/19 - ----- -bashline.c - - attempt_shell_completion: add call to set_directory_hook() to make - sure the rewrite functions are correct. It's cheap and doesn't - hurt - - command_word_completion_function: if completing a command name that - starts with `.' or `..', temporarily suppress the effects of the - `direxpand' option and restore the correct value after calling - rl_filename_completion_function. If it's enabled, the directory - name will be rewritten and no longer match `./' or `../'. Fixes - problem reported by Michael Kalisz - - 10/22 - ----- -builtins/history.def - - push_history: make sure remember_on_history is enabled before we - try to delete the last history entry -- the `history -s' command - might not have been saved. Fixes bug reported by - lester@vmw-les.eng.vmware.com - -lib/readline/complete.c - - rl_callback_read_char: add calls to a macro CALLBACK_READ_RETURN - instead of straight return; add same call at end of function. - Placeholder for future work in deinstalling signal handlers when - readline is not active - - 10/25 - ----- -expr.c - - exp2: catch arithmetic overflow when val1 == INTMAX_MIN and val2 == -1 - for DIV and MOD and avoid SIGFPE. Bug report and pointer to fix - from Jaak Ristioja - - expassign: same changes for arithmetic overflow for DIV and MOD - - 10/28 - ----- -subst.c - - parameter_brace_expand: allow pattern substitution when there is an - expansion of the form ${var/} as a no-op: replacing nothing with - nothing - - parameter_brace_patsub: don't need to check for PATSUB being NULL; - it never is - -flags.c - - if STRICT_POSIX is defined, initialize history_expansion to 0, since - history expansion (and its treatment of ! within double quotes) is - not a conforming posix environment. From austin-group issue 500 - -lib/readline/histexpand.c - - history_expand: when processing a string within double quotes - (DQUOTE == 1), make the closing double quote inhibit history - expansion, as if the word were outside double quotes. In effect, - we assume that the double quote is followed by a character in - history_no_expand_chars. tcsh and csh seem to do this. This - answers a persistent complaint about history expansion - - 10/29 - ----- -make_cmd.c - - make_arith_for_command: use skip_to_delim to find the next `;' - when breaking the string between the double parens into three - separate components instead of a simple character loop. Fixes - bug reported by Dan Douglas - - 11/2 - ---- -Makefile.in - - make libbuiltins.a depend on builtext.h to serialize its creation - and avoid conflict between multiple invocations of mkbuiltins. - Fix from Mike Frysinger - - 11/5 - ---- -findcmd.c - - user_command_matches: if stat(".", ...) returns -1, set st_dev - and st_ino fields in dotinfo to 0 to avoid same_file matches - - find_user_command_in_path: check stat(2) return the same way - -lib/glob/glob.c - - glob_vector: don't call strlen(pat) without checking pat == 0 - - glob_dir_to_array: make sure to free `result' and all allocated - members before returning error due to malloc failure - - glob_vector: make sure to free `nextname' and `npat' on errors - (mostly when setting lose = 1) - - glob_vector: if flags & GX_MATCHDIRS but not GX_ALLDIRS, make - sure we free `subdir' - - glob_filename: when expanding ** (GX_ALLDIRS), make sure we - free temp_results (return value from glob_vector) - -lib/glob/xmbsrtowcs.c - - xdupmbstowcs: fix call to realloc to use sizeof (char *) instead - of sizeof (char **) when assigning idxtmp - -execute_cmd.c - - print_index_and_element: return 0 right away if L == 0 - - is_dirname: fix memory leak by freeing `temp' - - time_command: don't try to deref NULL `command' when assigning - to `posix_time' - - shell_execve: null-terminate `sample' after READ_SAMPLE_BUF so it's - terminated for functions that expect that - -builtins/read.def - - read_builtin: don't call bind_read_variable with a potentially-null - string - -pcomplete.c - - gen_command_matches: don't call dispose_word_desc with a NULL arg - - gen_compspec_completions: fix memory leak by freeing `ret' before - calling gen_action_completions (tcs, ...). happens when - performing directory completion as default and no completions - have been generated - - gen_progcomp_completions: make sure to set foundp to 0 whenever - returning NULL - - it_init_aliases: fix memory leak by freeing alias_list before - returning - -bashline.c - - command_word_completion_function: don't call restore_tilde with a - NULL directory_part argument - - bash_directory_expansion: bugfix: don't throw away results of - rl_directory_rewrite_hook if it's set and returns non-zero - - bind_keyseq_to_unix_command: free `kseq' before returning error - -arrayfunc.c - - assign_array_element_internal: make sure `akey' is freed if non-null - before returning error - - assign_compound_array_list: free `akey' before returning error - - array_value_internal: free `akey' before returning error - - unbind_array_element: free `akey' before returning error - -subst.c - - array_length_reference: free `akey' before returning error in case - of expand_assignment_string_to_string error - - array_length_reference: free `akey' after call to assoc_reference - - skip_to_delim: if skipping process and command substitution, free - return value from extract_process_subst - - parameter_brace_substring: free `val' (vtype == VT_VARIABLE) before - returning if verify_substring_values fails - - parameter_brace_expand: remove two duplicate lines that allocate - ret in parameter_brace_substring case - - parameter_brace_expand: convert `free (name); name = xmalloc (...)' - to use `xrealloc (name, ...)' - - parameter_brace_expand: free `name' before returning when handling - ${!PREFIX*} expansion - - split_at_delims: fix memory leak by freeing `d2' before returning - -redir.c - - redirection_error: free `filename' if the redirection operator is - REDIR_VARASSIGN by assigning allocname - -eval.c - - send_pwd_to_eterm: fix memory leak by freeing value returned by - get_working_directory() - -builtins/cd.def - - change_to_directory: fix memory leak by freeing return value from - resetpwd() - - cd_builtin: fix memory leak by freeing value returned by dirspell() - - cd_builtin: fix memory leak by freeing `directory' if appropriate - before overwriting with return value from resetpwd() - -builtins/type.def - - describe_command: free `full_path' before overwriting it with return - value from sh_makepath - -builtins/complete.def - - compgen_builtin: fix memory leak by calling strlist_dispose (sl) - before overwriting sl with return value from completions_to_stringlist - -builtins/hash.def - - list_hashed_filename_targets: fix memory leak by freeing `target' - -make_cmd.c - - make_arith_for_command: free `init', `test', and `step' before - returning error on parse error - -jobs.c - - initialize_job_control: don't call move_to_high_fd if shell_tty == -1 - -general.c - - check_dev_tty: don't call close with an fd < 0 - - legal_number: deal with NULL `string' argument, return invalid - -lib/sh/fmtulong.c - - fmtulong: if the `base' argument is invalid, make sure we index - buf by `len-1' at maximum - -print_cmd.c - - print_deferred_heredocs: don't try to dereference a NULL `cstring' - - cprintf: make sure to call va_end (args) - -variables.c - - push_dollar_vars: fix call to xrealloc to use sizeof (WORD_LIST *) - instead of sizeof (WORD_LIST **) - -lib/sh/zmapfd.c - - zmapfd: if read returns error, free result and return -1 immediately - instead of trying to reallocate it - - 11/6 - ---- -execute_cmd.c - - cpl_reap: rewrote to avoid using pointer after freeing it; now builds - new coproc list on the fly while traversing the old one and sets the - right values for coproc_list when done - - 11/12 - ----- -builtins/set.def - - if neither -f nor -v supplied, don't allow a readonly function to - be implicitly unset. Fixes bug reported by Jens Schmidt - - -lib/readline/callback.c - - change CALLBACK_READ_RETURN to clear signal handlers before returning - from rl_callback_read_char so readline's signal handlers aren't - installed when readline doesn't have control. Idea from Jan - Kratochvil and the GDB development - team - -pcomplete.h - - COPT_NOQUOTE: new complete/compgen option value - -builtins/complete.def - - noquote: new complete/compgen option; will be used to disable - filename completion quoting - -pcomplete.c - - pcomp_set_readline_variables: pay attention to COPT_NOQUOTE; turns - of rl_filename_quoting_desired if set; turns it on if unset (value - is inverted, since default is on) - -doc/bash.1,lib/readline/doc/rluser.texi - - document new -o noquote option to complete/compgen/compopt - -pathexp.c - - quote_string_for_globbing: if QGLOB_REGEXP, make sure characters - between brackets in an ERE bracket expression are not inappropriately - quoted with backslashes. This is a pretty substantial change, - should be stressed when opening bash up for alpha and beta tests. - Fixes bug pointed out by Stephane Chazleas - - -doc/{bash.1,bashref.texi} - - document that regexp matches can be inconsistent when quoting - characters in bracket expressions, since usual quoting characters - lose their meaning within brackets - - note that regular expression matching when the pattern is stored - in a shell variable which is quoted for expansion causes string - matching - -redir.h - - RX_SAVEFD: new flag value; notes that a redirection denotes an - fd used to save another even if it's not >= SHELL_FD_BASE - -redir.c - - do_redirection_internal: when deciding whether or not to reset the - close-on-exec flag on a restored file descriptor, trust the value - of redirect->flags & RX_SAVCLEXEC even if the fd is < SHELL_FD_BASE - if the RX_SAVEFD flag is set - - add_undo_redirect: set the RX_SAVEFD flag if the file descriptor - limit is such that the shell can't duplicate to a file descriptor - >= 10. Fixes a limitation that tripped a coreutils test reported - by Paul Eggert - - 11/19 - ----- -doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi - - make it clear that bash runs HISTFILESIZE=$HISTSIZE after reading - the startup files - - make it clear that bash runs HISTSIZE=500 after reading the - startup files - - make it clear that setting HISTSIZE=0 causes commands to not be - saved in the history list - - make it clear that setting HISTFILESIZE=0 causes the history file - to be truncated to zero size - -variables.c - - sv_histsize: change so setting HISTSIZE to a value less than 0 - causes the history to be `unstifled' - - sv_histsize: change so setting HISTFILESIZE to a value less than 0 - results in no file truncation - - make it clear that numeric values less than 0 for HISTFILESIZE or - HISTSIZE inhibit the usual functions - - 11/23 - ----- -parse.y - - save_input_line_state: add missing `return ls' at the end, since the - function is supposed to return its argument. Pointed out by - Andreas Schwab - -builtins/read.def - - skip over NUL bytes in input, as most modern shells seem to. Bug - report by Matthew Story - -lib/readline/vi_mode.c - - rl_vi_replace: set _rl_vi_last_key_before_insert to invoking key - - 11/25 - ----- -builtins/read.def - - read_builtin: if xrealloc returns same pointer as first argument, - don't bother with the remove_unwind_protect/add_unwind_protect pair - - read_builtin: set a flag (`reading') around calls to zread/zreadc - and readline() - - sigalrm: change to set flag (`sigalrm_seen') and only longjmp if - currently in read(2) (reading != 0) - - CHECK_ALRM: new macro, checks sigalrm_seen and longjmps if non-zero, - behavior of old SIGALRM catching function - - read_builtin: call CHECK_ALRM in appropriate places while reading - line of input. Fixes bug reported by Pierre Gaston - - -lib/readline/vi_mode.c - - rl_vi_replace: initialize characters before printing characters in - vi_replace_keymap to their default values in vi_insertion_keymap, - since we're supposed to be in insert mode replacing characters - - rl_vi_replace: call rl_vi_start_inserting to set last command to - `R' for undo - - rl_vi_replace: set _rl_vi_last_key_before_insert to `R' for future - use by _rl_vi_done_inserting - - vi_save_insert_buffer: new function, broke out code that copies text - into vi_insert_buffer from _rl_vi_save_insert - - _rl_vi_save_replace: new function, saves text modified by - rl_vi_replace (using current point and vi_replace_count to figure - it out) to vi_replace_buffer - - _rl_vi_save_insert: call vi_save_insert_buffer - - _rl_vi_done_inserting: if _rl_vi_last_key_before_insert == 'R', call - _rl_vi_save_replace to save text modified in replace mode (uses - vi_save_insert_buffer) - - _rl_vi_replace_insert: new function, replaces the number of chars - in vi_insert_buffer after rl_point with contents ov vi_insert_buffer - - rl_vi_redo: call _rl_vi_replace_insert if last command == 'R' and - there's something in vi_insert_buffer. Fixes bug with `.' not - redoing the most recent `R' command, reported by Geoff Clare - in readline area on savannah - - 11/26 - ----- -lib/readline/rlprivate.h - - RL_SIG_RECEIVED(): evaluate to non-zero if there is a pending signal - to be handled - - RL_SIGINT_RECEIVED(): evaluate to non-zero if there is a pending - SIGINT to be handled - -lib/readline/complete.c - - remove all mention of _rl_interrupt_immediately - - rl_completion_matches: check RL_SIG_RECEIVED after each call to - the entry function, call RL_CHECK_SIGNALS if true to handle the - signal - - rl_completion_matches: if RL_SIG_RECEIVED evaluates to true, free - and zero out the match_list this function allocated - - rl_completion_matches: if the completion entry function is - rl_filename_completion_function, free the contents of match_list, - because that function does not keep state and will not free the - entries; avoids possible memory leak pointed out by - Garrett Cooper - - gen_completion_matches: if RL_SIG_RECEIVED evalutes to true after - calling rl_attempted_completion_function, free the returned match - list and handle the signal with RL_CHECK_SIGNALS; avoids - possible memory leak pointed out by Garrett Cooper - - - gen_completion_matches: if RL_SIG_RECEIVED evaluates to true after - calling rl_completion_matches, free the returned match list and - handle the signal with RL_CHECK_SIGNALS - -lib/readline/util.c - - rl_settracefp: new utility function to set the tracing FILE * - -lib/readline/signals.c - - _rl_sigcleanup: pointer to a function that will be called with the - signal and a void * argument from _rl_handle_signal - - _rl_sigcleanarg: void * that the rest of the code can set to have - passed to the signal cleanup function - - _rl_handle_signal: if _rl_sigcleanup set, call as - (*_rl_sigcleanup) (sig, _rl_sigcleanarg) - -lib/readline/rlprivate.h - - extern declarations for _rl_sigcleanup and _rl_sigcleanarg - -lib/readline/complete.c - - _rl_complete_sigcleanup: signal cleanup function for completion code; - calls _rl_free_match_list on _rl_sigcleanarg if signal == SIGINT - - rl_complete_internal: before calling display_matches if what_to_do - == `?', set _rl_sigcleanup to _rl_complete_sigcleanup so the match - list gets freed on SIGINT; avoids possible memory leak pointed out - by Garrett Cooper - - rl_complete_internal: in default switch case, call _rl_free_match_list - before returning to avoid memory leak - -doc/bashref.texi - - start at a set of examples for the =~ regular expression matching - operator, touching on keeping the pattern in a shell variable and - quoting portions of the pattern to remove their special meaning - - 12/1 - ---- -lib/glob/gmisc.c - - extglob_pattern: new function, returns 1 if pattern passed as an - argument looks like an extended globbing pattern - -lib/glob/glob.c - - skipname: return 0 immediately if extglob_pattern returns non-zero, - let the extended globbing code do the right thing with skipping - names beginning with a `.' - - mbskipname: return 0 immediately if extglob_pattern returns non-zero, - let the extended globbing code do the right thing with skipping - names beginning with a `.'. Fixes bug reported by Yongzhi Pan - - - 12/2 - ---- -lib/glob/smatch.c - - patscan, patscan_wc: no longer static so other parts of the glob - library can use them, renamed to glob_patscan, glob_patscan_wc - -lib/glob/glob.c - - extern declarations for glob_patscan, glob_patscan_wc - - wchkname: new function, does skipname on wchar_t pattern and dname, - old body of mbskipname after converting to wide chars - - extglob_skipname: new function, checks all subpatterns in an extglob - pattern to determine whether or not a filename should be skipped. - Calls skipname for each subpattern. Dname is only skipped if all - subpatterns indicate it should be. Better fix for bug reported by - Yongzhi Pan - - wextglob_skipname: wide-char version of extglob_skipname, calls - wchkname instead of calling back into mbskipname for each - subpattern to avoid problems with char/wchar_t mismatch - - skipname: call extglob_skipname if extglob_pattern returns non-zero - - mbskipname: call wextglob_skipname if extglob_pattern returns non-zero - - mbskipname: short-circuit immediately if no multibyte chars in - pattern or filename - -execute_cmd.c - - execute_cond_node: added parens to patmatch assignment statement to - make intent clearer - - 12/3 - ---- -configure.in,config.h.in - - check for imaxdiv, define HAVE_IMAXDIV if present - -expr.c - - expassign, exp2: use imaxdiv if available. Doesn't help with checks - for overflow from 10/25 - - 12/6 - ---- -lib/readline/complete.c - - compute_lcd_of_matches: if we're ignoring case in the matches, only - use what the user typed as the lcd if it matches the first match - (after sorting) up to the length of what was typed (if what the - user typed is longer than the shortest of the possible matches, use - the shortest common length of the matches instead). If it doesn't - match, use the first of the list of matches, as if case were not - being ignored. Fixes bug reported by Clark Wang - - - 12/7 - ---- -builtins/cd.def - - cd_builtin: add code to return error in case cd has more than one - non-option argument, conditional on CD_COMPLAINS define (which is - not defined anywhere) - -doc/{bash.1,bashref.texi} - - note that additional arguments to cd following the directory name - are ignored. Suggested by Vaclav Hanzl - - 12/10 - ----- -lib/readline/input.c - - rl_read_key: don't need to increment key sequence length here; doing - it leads to an off-by-one error - -lib/readline/macro.c - - rl_end_kbd_macro: after off-by-one error with rl_key_sequence_length - fixed, can decrement current_macro_index by rl_key_sequence_length - (length of key sequence that closes keyboard macro) - -lib/readline/readline.c - - _rl_dispatch_subseq: fix extra increment of rl_key_sequence_length - when ESC maps to a new keymap and we're converting meta characters - to ESC+key - - _rl_dispatch_subseq: better increment of rl_key_sequence_length - before we dispatch to a function in the ISFUNC case (where the - second increment above should have happened) - - rl_executing_keyseq: the full key sequence that ended up executing - a readline command. Available to the calling application, maintained - by _rl_dispatch_subseq, indexed by rl_key_sequence_length - - rl_executing_key: the key that was bound to the currently-executing - readline command. Same as the `key' argument to the function - -lib/readline/readline.h - - rl_executing_keyseq: extern declaration - - rl_executing_key: extern declaration - - rl_key_sequence_length: declaration moved here from rlprivate.h, - now part of public interface - -lib/readline/rlprivate.h - - new extern declaration for _rl_executing_keyseq_size, buffer size - for rl_executing_keyseq - -lib/readline/doc/rltech.texi - - documented new variables: rl_executing_key, rl_executing_keyseq, - rl_key_sequence_length - - 12/13 - ----- -bashline.c - - bash_execute_unix_command: replace ad-hoc code that searches - cmd_xmap for correct command with call to rl_function_of_keyseq - using rl_executing_keyseq; now supports key sequences longer - than two characters. Fixes bug reported by Michael Kazior - - - 12/15 - ----- -make_cmd.c - - make_function_def: don't null out source_file before calling - make_command so it can be used later on when the function definition - is executed - -execute_cmd.c - - execute_intern_function: second argument is now FUNCTION_DEF * - instead of COMMAND * - - execute_command_internal: call execute_intern_function with the - new second argument (the entire FUNCTION_DEF instead of just the - command member) - - execute_intern_function: if DEBUGGER is defined, call - bind_function_def before calling bind_function, just like - make_function_def does (might be able to take out the call in - make_function_def depending on what the debugger does with it). - Fixes bug reported by - -expr.c - - more minor changes to cases of INTMAX_MIN % -1 and INTMAX_MIN / 1; - fix typos and logic errors - - 12/16 - ----- -bashline.c - - find_cmd_start: change flags to remove SD_NOSKIPCMD so it skips over - command substitutions and doesn't treat them as command separators - - attempt_shell_completion: instead of taking first return from - find_cmd_name as command name to use for programmable completion, - use loop to skip over assignment statements. Fixes problem reported - by Raphael Droz - - attempt_shell_completion: if we don't find a command name but the - command line is non-empty, assume the other words are all assignment - statements and flag that point is in a command position so we can - do command name completion - - attempt_shell_completion: if the word being completed is the first - word following a series of assignment statements, and the - command line is non-empty, flag that point is in a command position - so we can do command name completion - -lib/readline/history.c - - history_get_time: atol -> strtol - - 12/18 - ----- -parse.y - - parser_in_command_position: external interface to the - command_token_position macro for use by other parts of the shell, - like the completion mechanism - -externs.h - - extern declaration for parser_in_command_position - - 12/19 - ----- - -builtins/read.def - - read_builtin: make sure all calls to bind_read_variable are passed - a non-null string. Fixes bug reported by Dan Douglas - - -bashline.c - - attempt_shell_completion: mark that we're in a command position if - we're at the start of the line and the parser is ready to accept - a reserved word or command name. Feature most recently suggested - by Peng Yu - - 12/21 - ----- -lib/readline/bind.c - - _rl_escchar: return the character that would be backslash-escaped - to denote the control character passed as an argument ('\n' -> 'n') - - _rl_isescape: return 1 if character passed is one that has a - backslash escape - - _rl_untranslate_macro_value: new second argument: use_escapes, if - non-zero translate to backslash escapes where possible instead of - using straight \C-x for control character `x'. Change callers - - _rl_untranslate_macro_value: now global - -lib/readline/rlprivate.h - - _rl_untranslate_macro_value: extern declaration - -lib/readline/{macro.c,readline.h} - - rl_print_last_kbd_macro: new bindable function, inspired by patch - from Mitchel Humpherys - -lib/readline/funmap.c - - print-last-kbd-macro: new bindable command, bound to - rl_print_last_kbd_macro - -lib/readline/doc/{rluser.texi,readline.3},doc/bash.1 - - print-last-kbd-macro: document. - -lib/readline/text.c - - _rl_insert_next: if we're defining a macro, make sure the key gets - added to the macro text (should really audit calls to rl_read_key() - and make sure the right thing is happening for all of them) - -bashline.[ch] - - print_unix_command_map: new function, prints all bound commands in - cmd_xmap using rl_macro_dumper in a reusable format - -builtins/bind.def - - new -X option: print all keysequences bound to Unix commands using - print_unix_command_map. Feature suggested by Dennis Williamson - (2/2011) - -doc/{bash.1,bashref.texi} - - document new `bind -X' option - - 12/24 - ----- - -doc/{bash.1,bashref.texi} - - add a couple of sentences to the description of the case modification - operators making it clearer that each character of parameter is - tested against the pattern, and that the pattern should only attempt - to match a single character. Suggested by Bill Gradwohl - - - 12/28 - ----- -shell.c - - init_noninteractive: instead of calling set_job_control(0) to - unconditionally turn off job control, turn on job control if - forced_interactive or jobs_m_flag is set - - shell_initialize: call initialize_job_control with jobs_m_flag as - argument so `bash -m script' enables job control while running the - script - -jobs.c - - initialize_job_control: if the `force' argument is non-zero, turn on - job control even if the shell is not currently interactive - (interactive == 0) - - 12/29 - ----- - -flags.h - - new extern declaration for jobs_m_flag - -builtins/{cd,set}.def,doc/{bash.1,bashref.texi} - - added text clarifying the descriptions of cd -L and -P, suggested by - Padraig Brady - - slight change to the description of `set -P' about resolving symbolic - links - -lib/readline/doc/rluser.texi - - Added an example to the programmable completion section: _comp_cd, - a completion function for cd, with additional verbiage. Text - includes a reference to the bash_completion project - - 1/1/2012 - -------- -jobs.c - - set_job_status_and_cleanup: note that a job is stopped due to - SIGTSTP (any_tstped) if job_control is set; there's no need to - test interactive - - 1/5 - --- -quit.h - - LASTSIG(): new macro, expands to signal number of last terminating - signal received (terminating_signal or SIGINT) - -trap.c - - first_pending_trap: returns lowest signal number with a trap pending - - trapped_signal_received: set to the last trapped signal the shell - received in trap_handler(); reset to 0 in run_pending_traps - -builtins/read.def - - read_builtin: changes to posix-mode (posixly_correct != 0) to make - `read' interruptible by a trapped signal. After the trap runs, - read returns 128+sig and does not assign the partially-read line - to the named variable(s). From an austin-group discussion started - by David Korn - - 1/11 - ---- -doc/{bash.1,bashref.texi} - - slight changes to the descriptions of the compat32 and compat40 shell - options to clarify their meaning - - 1/12 - ---- -lib/readline/{colors.[ch],parse-colors.[ch]} - - new files, part of color infrastructure support - -Makefile.in,lib/readline/Makefile.in - - arrange to have colors.o and parse-colors.o added to readline - library - -{configure,config.h}.in - - check for stdbool.h, define HAVE_STDBOOL_H if found - - 1/14 - ---- -lib/readline/bind.c - - colored_stats: new bindable variable, enables using colors to - indicate file type when listing completions - -lib/readline/complete.c - - _rl_colored_stats: new variable, controlled by colored-stats bindable - variable - - colored_stat_start, colored_stat_end: new functions to set and reset - the terminal color appropriately depending on the type of the - filename to be printed - - print_filename: changes to print colors if `colored-stats' variable - set. Changes contributed by Raphael Droz - - -lib/readline/readline.c - - rl_initialize_everything: add call to _rl_parse_colors to parse - color values out of $LS_COLORS. May have to add to rl_initialize - to make more dynamic if LS_COLORS changes (which doesn't happen - very often, if at all) - -lib/readline/rlprivate.h - - _rl_colored_stats: new extern declaration - -lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 - - colored-stats: document new bindable readline variable - -lib/readline/colors.c - - _rl_print_color_indicator: call rl_filename_stat_hook before calling - lstat/stat so we can get color indicators for stuff like - $HOME/Applications - -lib/readline/complete.c - - stat_char: call rl_filename_stat_hook before calling lstat/stat - -findcmd.[ch],execute_cmd.c - - search_for_command: now takes a second `flags' argument; changed - header function prototype and callers - - search_for_command: if (flags & 1), put the command found in $PATH - into the command hash table (previous default behavior) - -execute_cmd.c - - is_dirname: call search_for_command with flags argument of 0 so it - doesn't try to put something in the command hash table - -bashline.c - - bash_command_name_stat_hook: a hook function for readline's - filename_stat_hook that does $PATH searching the same way that - execute_cmd.c:execute_disk_command() does it, and rewrites the - passed filename if found. Does not put names into command hash - table. This allows command name completion to take advantage - of `visible-stats' and `colored-stats' settings. - - executable_completion: new function, calls the directory completion - hook to expand the filename before calling executable_file or - executable_or_directory; change command_word_completion_function to - call executable_completion. This allows $HOME/bin/[TAB] to do - command completion and display alternatives - - 1/17 - ---- -pcomplete.c - - gen_command_matches: now takes a new second argument: the command - name as deciphered by the programmable completion code and used - to look up the compspec; changed callers (gen_compspec_completions) - - gen_shell_function_matches: now takes a new second argument: the - command that originally caused the completion function to be - invoked; changed callers (gen_compspec_completions)) - - build_arg_list: now takes a new second argument: the command name - corresponding to the current compspec; changed callers - (gen_command_matches, gen_shell_function_matches) - - build_arg_list: now uses `cmd' argument to create $1 passed to - invoked command or shell function - - gen_compspec_completions: if we skipped a null command at the - beginning of the line (e.g., for completing `>'), add a new word for - it at the beginning of the word list and increment nw and cw - appropriately. This is all a partial fix for the shortcoming - pointed out by Sung Pae - - 1/18 - ---- - -{configure,config.h}.in - - new check: check for AUDIT_USER_TTY defined in , - define HAVE_DECL_AUDIT_USER_TTY if both are found - -lib/readline/rlconf.h - - ENABLE_TTY_AUDIT_SUPPORT: new define, allows use of the Linux kernel - tty auditing system if it's available and enabled - -lib/readline/util.c - - _rl_audit_tty: new function, send a string to the kernel tty audit - system - -lib/readline/rlprivate.h - - _rl_audit_tty: new extern declaration - -lib/readline/readline.c - - readline: call _rl_audit_tty with line to be returned before returning - it if the Linux tty audit system is available and it's been enabled - in rlconf.h Original patch from Miroslav Trmac; recent request - from Miroslav Lichvar - - 1/21 - ---- - -lib/readline/readline.c: - - _rl_dispatch_subseq: add an inter-character timeout for multi-char - key sequences. Suggested by . Still needs - work to make a user-settable variable - -parse.y - - shell_getc: make code that uses the pop_alias dependent on ALIAS - define - -variables.h - - sv_tz: extern define should only depend on HAVE_TZSET - -expr.c - - expr_streval: if ARRAY_VARS is not defined, set lvalue->ind to -1; - move assignment to `ind' inside define - - expr_bind_array_element: declaration and uses need to be #ifdef - ARRAY_VARS - -arrayfunc.h - - AV_ALLOWALL, AV_QUOTED, AV_USEIND: define to 0 if ARRAY_VARS not - defined; used in subst.c unconditionally - -sig.h - - make the signal blocking functions not dependent on JOB_CONTROL - -sig.c - - sigprocmask: make the replacement definition not dependent on - JOB_CONTROL - -trap.c - - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on - HAVE_POSIX_SIGNALS and BSD signals - - 1/24 - ---- - -print_cmd.c - - print_redirection_list: change the conditions under which - r_duplicating_output_word is mapped to r_err_and_out to more or - less match those used in redir.c. Fixes bug pointed out by - Dan Douglas - - - 1/29 - ---- -lib/readline/signals.c - - _rl_block_sigwinch,_rl_release_sigwinch: don't compile in bodies - unless SIGWINCH is defined. Fixes bug reported by Pierre Muller - - -doc/{bash.1,bashref.texi} - - small modifications to the introduction to the REDIRECTION section - to describe how redirections can modify file handles - - small modification to the section describing base#n to make it - clearer that n can be denoted using non-numerics. From a posting - by Linda Walsh - - 2/2 - --- -builtins/printf.def - - printf_builtin: make sure vbuf is intialized and non-null when -v - is supplied, since other parts of the code assume that it's not - null (e.g., bind_printf_variable()). Fixes bug reported by Jim - Avera - - 2/4 - --- -lib/readline/undo.c - - _rl_free_undo_list: new function, old body of rl_free_undo_list, - frees undo entries in UNDO_LIST * passed as argument - - rl_free_undo_list: call _rl_free_undo_list - -lib/readline/rlprivate.h - - _rl_free_undo_list: new extern declaration - - _rl_keyseq_timeout: new extern declaration (see below) - -lib/readline/misc.c - - rl_clear_history: new function. Clears the history list and frees - all associated data similar to history.c:clear_history(), but - takes rl_undo_list into account and frees and UNDO_LISTs saved as - `data' members of a history list entry - -lib/readline/doc/rltech.texi - - rl_clear_history: documented - -lib/readline/readline.c - - _rl_keyseq_timeout: new variable to hold intra-key timeout value - from 1/21 fix; specified in milliseconds. Default value is 500 - - _rl_dispatch_subseq: change to use _rl_keyseq_timeout as intra-key - timeout if it's greater than 0; no timeout if <= 0 - - _rl_dispatch_subseq: don't check for queued keyboard input if we have - pushed or pending input, or if we're reading input from a macro - -lib/readline/bind.c - - keyseq-timeout: new bindable variable, shadows _rl_keyseq_timeout - - string_varlist: add keyseq-timeout - - sv_seqtimeout: new function to modify value of _rl_keyseq_timeout; - clamps negative values at 0 for now - - _rl_get_string_variable_value: return value for keyseq-timeout - -doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} - - keyseq-timeout: documented - -lib/readline/isearch.c - - _rl_isearch_dispatch: modification to fix from 7/18 to not use - cxt->keymap and cxt->okeymap, since by the time this code is - executed, they are equal. Use `f' to check for rl_insert or - unbound func - - _rl_isearch_dispatch: if we're switching keymaps, not in - callback mode, and don't have pending or pushed input, use - _rl_input_queued to resolve a potentially ambiguous key sequence. - Suggested by Roger Zauner - - _rl_isearch_dispatch: if we have changed keymaps and resolved to - an editing function (not self-insert), make sure we stuff the - right characters back onto the input after changing the keymap - back so the right editing function is executed after the search - is terminated. Rest of fix for bug reported by Roger Zauner - - - 2/5 - --- -builtins/gen-helpfiles.c - - new file: reads struct builtin and writes the long docs to files - in the `helpdirs' subdirectory. The filename is given in the - previously-unused `handle' member of the struct builtin. Links - with `tmpbuiltins.o', which is created by Makefile to have the - right long documentation. When not cross-compiling, gets the - right #defines based on configuration options from config.h instead - of trying to parse conditional parts of def files. Fixes - shortcoming pointed out by Andreas Schwab - -builtins/Makefile.in - - tmpbuiltins.c: new generated file, created to enable creation of - separate helpfiles based on correct #defines instead of trying to - parse conditional parts of def files - - gen-helpfiles: new program to generate helpfiles, links with - tmpbuiltins.o - - HELPFILES_TARGET: new target, substituted by configure to `helpdoc' - if separate helpfiles requested - - targets: new target, libbuiltins.a and $(HELPFILES_TARGET) - - CREATED_OBJECTS: new variable, holds created object files for - make clean; changed make clean to remove created objects - - helpdoc: changed to call gen-helpfiles instead of mkbuiltins - -Makefile.in - - when building libbuiltins.a, recursively call make with `targets' - argument to make sure separate helpfiles get built - -configure.in - - substitute `helpdoc' as value of HELPFILES_TARGET if - --enable-separate-helpfiles supplied as configure argument - -builtins/mkbuiltins.c - - `-nofunctions': new argument, causes mkbuiltins to not write value - for function implementing a particular builtin to struct builtin - and to write document file name to `handle' member of struct builtin - - no longer writes separate helpfiles; that is left to gen-helpfiles - - 2/8 - --- -subst.c - - make sure last_command_exit_value is set to a non-zero value before - any calls to report_error, since `-e' set will short-circuit - report_error. Fixes bug reported by Ewan Mellor - - -variables.c - - make_local_array_variable: added second argument; if non-zero, - function will return an existing local associative array variable - instead of insisting on an indexed array - -variable.h,subst.c - - make_local_array_variable: changed prototype and caller - -builtins/declare.def - - declare_internal: add second arg to call to make_local_array_variable; - making_array_special, which indicates we're processing an - assignment like declare a[b]=c. Fixes seg fault resulting from - a being an already-declared local associative array variable in a - function. Ubuntu bash bug 928900. - - 2/14 - ---- - -execute_cmd.c - - execute_command_internal: if redirections into or out of a loop fail, - don't try to free ofifo_list unless saved_fifo is non-zero. It's - only valid if saved_fifo is set - - 2/15 - ---- -{arrayfunc,braces,variables}.c - - last_command_exit_value: make sure it's set before any calls to - report_error, since -e will cause that to exit the shell - -builtins/common.c - - get_job_by_name: call internal_error instead of report_error so this - doesn't exit the shell - - 2/18 - ---- -builtins/evalstring.c - - parse_and_execute: make sure the file descriptor to be redirected to - is 1 before calling cat_file. One fix for bug reported by Dan Douglas - - -parse.y - - read_token_word: don't return NUMBER if a string of all digits - resolves to a number that overflows the bounds of an intmax_t. - Other fix for bug reported by Dan Douglas - - 2/19 - ---- -lib/sh/strtrans.c - - ansicstr: use 0x7f as the boundary for characters that translate - directly from ASCII to unicode (\u and \U escapes) instead of - UCHAR_MAX, since everything >= 0x80 requires more than one byte. - Bug and fix from John Kearney - -builtins/printf.def - - tescape: ditto for printf \u and \U escape sequences - - 2/20 - ---- -lib/sh/unicode.c - - u32toutf8: fix to handle encodings up to six bytes long correctly - (though technically UTF-8 only has characters up to 4 bytes long). - Report and fix from John Kearney - - u32toutf8: first argument is now an unsigned 32-bit quantity, - changed callers (u32cconv) to pass c instead of wc - - u32reset: new function, resets local static state to uninitialized - (locale information, currently) - -locale.c - - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the - cached locale information used by u32cconv. From a report from - John Kearney - - 2/21 - ---- -doc/{bash,builtins}.1 - - minor changes from Bjarni Ingi Gislason - -lib/sh/unicode.c - - u32cconv: only assume you can directly call wctomb on the passed - value if __STDC_ISO_10646__ is defined and the value is <= - 0x7fffffff - - stub_charset: return locale as default instead of "ASCII", let - rest of code decide what to do with it - -lib/readline/parens.c - - _rl_enable_paren_matching: make paren matching work in vi insert - mode. Bug report from - - 2/22 - ---- -lib/sh/shquote.c - - sh_backslash_quote: quote tilde in places where it would be - expanded. From a report from John Kearney - - 2/23 - ---- -execute_cmd.c - - execute_pipeline: wrap the discard_unwind_frame call in #ifdef - JOB_CONTROL, since the frame is only created if JOB_CONTROL is - defined. Bug and fix from Doug Kehn - - 2/25 - ---- -error.c - - report_error: make sure last_command_exit_value is non-zero before - we call exit_shell, since the exit trap may reference it. Call - exit_shell with last_command_exit_value to allow exit statuses - other than 1 - -unicode.c - - stub_charset: use local static buffer to hold charset, don't change - value returned by get_locale_var. Based on idea and code from - John Kearney - - u32toutf16: function to convert unsigned 32-bit value (unicode) to - UTF-16. From John Kearney - - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t - is two bytes, send result to wcstombs, return if not encoding error. - From John Kearney - - u32cconv: return UTF-8 conversion if iconv conversion to local - charset is unsupported - - 3/2 - --- -lib/readline/complete.c - - print_filename: if there is no directory hook, but there is a stat - hook, and we want to append a slash to directories, call the stat - hook before calling path_isdir on the expanded directory name. - Report and pointer to fix from Steve Rago - - 3/3 - --- -builtins/evalstring.c - - parse_and_execute: fix to change of 2/18: make sure the file - descriptor being redirected to is 0 before calling cat_file when - we see something like $(< file). Real fix for bug reported by - Dan Douglas - -subst.c - - parameter_brace_patsub: run the replacement string through quote - removal even if the expansion is within double quotes, because - the parser and string extract functions treat the quotes and - backslashes as special. If they're treated as special, quote - removal should remove them (this is the Posix position and - compatible with ksh93). THIS IS NOT BACKWARDS COMPATIBLE. - - 3/4 - --- -lib/readline/complete.c - - rl_menu_complete: fix to make show-all-if-ambiguous and - menu-complete-display-prefix work together if both are set. Fix - from Sami Pietila - - 3/5 - --- -bashline.c - - dircomplete_expand_relpath: new variable, if non-zero, means that - `shopt -s direxpand' should expand relative pathnames. Zero by - default, not user-settable yet - - bash_directory_completion_hook: if we have a relative pathname that - isn't changed by canonicalization or spell checking after being - appended to $PWD, then don't change what the user typed. Controlled - by dircomplete_expand_relpath - - 3/7 - --- -m4/timespec.m4 - - new macros, cribbed from gnulib and coreutils: find out whether we - have `struct timespec' and what file includes it - -m4/stat-time.m4 - - new macros, cribbed from gnulib and coreutils: find out whether the - mtime/atime/ctime/etctime fields of struct stat are of type - struct timespec, and what the name is - -include/stat-time.h - - new file, cribbed from gnulib, with additions from coreutils: include - the right file to get the struct timespec define, or provide our own - replacement. Provides a bunch of inline functions to turn the - appropriate members of struct stat into `struct timespec' values, - zeroing out the tv_nsec field if necessary - -test.c - - include "stat-time.h" for the nanosecond timestamp resolution stuff - - stat_mtime: new function, returns struct stat and the mod time - normalized into a `struct timespec' for the filename passed as the - first argument - - filecomp: call stat_mtime instead of sh_stat for each filename - argument to get the mtime as a struct timespec - - filecomp: call timespec_cmp instead of using a straight arithmetic - comparison for the -nt and -ot operators, using timespec returned by - stat_mtime. Added functionality requested by by Werner Fink - for systems that can support it - - 3/10 - ---- -include/posixdir.h - - REAL_DIR_ENTRY: remove dependency on _POSIX_SOURCE, only use feature - test macros to decide whether dirent.d_ino is present and usable; - define D_INO_AVAILABLE. Report and fix from Fabrizion Gennari - - - D_FILENO_AVAILABLE: define if we can use dirent.d_fileno - -lib/sh/getcwd.c - - use D_FILENO_AVAILABLE to decide whether or not to compile in - _path_checkino and whether or not to call it. Report and initial - fix from Fabrizion Gennari - -lib/readline/signals.c - - make sure all occurrences of SIGWINCH are protected by #ifdef - -sig.c - - make sure all occurrences of SIGCHLD are protected by #ifdef - -nojobs.c - - make sure SA_RESTART is defined to 0 if the OS doesn't define it - -version.c - - show_shell_version: don't use string literals in printf, use %s. - Has added benefit of removing newline from string to be translated - -trap.c - - queue_sigchld_trap: new function, increments the number of pending - SIGCHLD signals by the argument, which is by convention the number - of children reaped in a call to waitchld() - -trap.h - - queue_sigchld_trap: new extern declaration - -jobs.c - - waitchld: if called from the SIGCHLD signal handler (sigchld > 0), - then call queue_sigchld_trap to avoid running the trap in a signal - handler context. Report and original fix from Siddhesh Poyarekar - - -lib/sh/unicode.c - - u32tocesc: take an unsigned 32-bit quantity and encode it using - ISO C99 string notation (\u/\U) - - u32cconv: call u32tocesc as a fallback instead of u32cchar - - u32cconv: call u32tocesc if iconv cannot convert the character. - Maybe do the same thing if iconv_open fails - - u32reset: call iconv_close on localconv if u32init == 1 - - 3/11 - ---- -config-top.h - - CHECKWINSIZE_DEFAULT: new define, set to initial value of - check_window_size (shopt checkwinsize): 0 for off, 1 for on. - Default is 0 - -{jobs,nojobs}.c - - check_window_size: default initial value to CHECKWINSIZE_DEFAULT - - 3/13 - ---- -doc/bashref.texi - - change text referring to the copying restrictions to that - recommended by the FSF (no Front-Cover Texts and no Back-Cover - Texts) - -lib/readline/doc/{history,rlman,rluserman}.texi - - change text referring to the copying restrictions to that - recommended by the FSF (no Front-Cover Texts and no Back-Cover - Texts) - - 3/15 - ---- -array.c - - LASTREF_START: new macro to set the starting position for an array - traversal to `lastref' if that's valid, and to the start of the array - if not. Used in array_reference, array_insert, array_remove - - array_remove: try to be a little smarter with lastref instead of - unconditionally invalidating it - - 3/16 - ---- -array.c - - array_insert: fix memory leak by deleting element to be added in the - case of an error - - 3/18 - ---- -lib/sh/mbschr.c - - mbschr: don't call mbrlen unless is_basic is false; devolves to a - straight character-by-character run through the string - - 3/19 - ---- -stringlib.c - - substring: use memcpy instead of strncpy, since we know the length - and are going to add our own NUL terminator - - 3/20 - ---- -subst.c - - parameter_brace_expand_rhs: if expand_string_for_rhs returns a quoted - null string (a list with one element for which - QUOTED_NULL(list->word->word) returns true), return the quoted null - and set the flags in the returned word to indicate it. Fixes bug - reported by Mark Edgar - -lib/sh/tmpfile.c - - use random(3) instead of get_random_number to avoid perturbing the - random sequence you get using $RANDOM. Bug report and fix from - Jurij Mihelic - - 3/21 - ---- -config-top.h - - OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT: define to 1 to optimize - sequential indexed array assignment patterns. Defined to 1 by - default - -array.c - - array_insert: if OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT is defined, - start the search at lastref (see change from 3/15) - - 3/27 - ---- -print_cmd.c - - debug_print_word_list: new debugging function, prints a word list - preceded by an optional string and using a caller-specified - separator - - 4/1 - --- -command.h - - W_ASSNGLOBAL: new flag, set to indicate declare -g - -execute_cmd.c - - fix_assignment_words: note that we have a -g argument to an assignment - builtin and set the W_ASSNGLOBAL flag in the variable word - -subst.c - - dump_word_flags: print out W_ASSNGLOBAL if present - - do_assignment_internal: only set ASS_MKLOCAL if W_ASSIGNARG is set - and W_ASSNGLOBAL is not. Don't want to create a local variable even - if variable_context is non-zero if ASSNGLOBAL is set. Fixes bug - reported by Bill Gradwohl - - 4/7 - --- -lib/readline/readline.c - - _rl_dispatch_subseq: make the `keyseq-timeout' variable apply to - ESC processing when in vi mode. After hitting ESC, readline will - wait up to _rl_keyseq_timeout*1000 microseconds (if set) for - additional input before dispatching on the ESC and switching to - command/movement mode. Completes timeout work suggested by - ; this prompted by report from Barry Downes - - -lib/sh/shmbchar.c - - sh_mbsnlen: new function, returns the number of (possibly multibyte) - characters in a passed string with a passed length, examining at most - maxlen (third argument) bytes - -externs.h - - sh_mbsnlen: extern declaration for new function - -shell.c - - exit_shell: call maybe_save_shell_history if remember_on_history is - set, not just in interactive shells. That means the history is - saved if history is enabled, regardless of whether or not the shell - is interactive - -doc/{bash.1,bashref.texi} - - TMOUT: fix description to make it explicit that TMOUT is the timeout - period for a complete line of input, not just any input. Fixes - problem reported in Ubuntu bug 957303: - https://bugs.launchpad.net/ubuntu/+source/bash/+bug/957303 - - HISTFILE: document change to write history list to history file in - any shell with history enabled, not just interactive shells. This - seems to be more logical behavior. Suggested by Greg Wooledge - - - 4/12 - ---- -lib/readline/colors.h - - only include stdbool.h if HAVE_STDBOOL_H is defined - - if HAVE_STDBOOL_H is not defined, provide enough definition for the - library to use `bool', `true', and `false' - -lib/readline/parse-colors.[ch] - - don't try to include at all; rely on colors.h to do it - -lib/sh/snprintf.c - - vsnprintf_internal: only treat '0' as a flag to indicate zero padding - if `.' hasn't been encountered ((flags&PF_DOT) == 0); otherwise treat - it as the first digit of a precision specifier. Fixes bug reported - by Petr Sumbera - - 4/15 - ---- -lib/sh/snprintf.c - - vsnprintf_internal: if the '0' and '-' flags both occur, the '0' - flag is ignored -- Posix. Start of a series of fixes based on - tests and patches from Petr Sumbera - - PUT_PLUS: make sure PF_PLUS flag is specified before putting the `+' - - vsnprintf_internal: when '+' is read as a flag, don't set right- - justify flag if the LADJUST (`-') flag has already been supplied - - floating: make sure to output space padding before the `+', zero - padding after - - exponent: make sure to output space padding before the `+', zero - padding after - - exponent: only subtract one from the width for the decimal point - if we're really going to print one - - floating: use presence of PF_PLUS flag to decide whether to account - for the `+' in the padded field width. Ditto for exponent() - - 4/16 - ---- -lib/sh/snprintf.c - - vsnprint_internal: only reduce precision by 1 when processing the `g' - format if it's > 0. A precision of 0 should stay 0; otherwise it - gets set to -1 (NOT_FOUND) and converted to the default - - number, lnumber: if an explicit precision is supplied, turn off the - zero-padding flag and set the pad character back to space - - number, lnumber: only account for a `+' when performing the field - width calculation if the coversion is base 10; we don't add a `+' - for other bases - - 4/18 - ---- -tests/printf3.sub - - try using "perl -e 'print time'" to get the current time in seconds - since the epoch if "date +%s" is not available (solaris 8-10) - - 4/19 - ---- -tests/run-printf - - use cat -v instead of relying on diff -a being available to convert - control characters to ascii and avoid the dreaded "Binary files - /tmp/xx and printf.right differ" - - 4/20 - ---- -lib/sh/strftime.c - - incoporated new version from Aharon Robbins - - 4/22 - ---- -doc/{bash.1,bashref.texi} - - slight change to the description of /dev/tcp and /dev/udp - -subst.c - - match_wpattern: logic fix to the calculation of `simple' (was |=, - needs to be &=). Bug report from Mike Frysinger , - fix from Andreas Schwab - -bashline.c - - bash_filename_stat_hook: add code from bash_directory_completion_hook - that performs pathname canonicalization in the same way that cd and - other builtins will do - - 4/25 - ---- -execute_cmd.c - - execute_pipeline: change the call to move_to_high_fd to make it use - getdtablesize() and to not stomp on existing open file descriptors, - like the fd the shell is using to read a script. Bug report from - Greg Wooledge - - 5/6 - --- -subst.c - - expand_word_internal: case '$': after calling param_expand and - setting had_quoted_null, set TEMP to null. The code that builds the - returned string at the end of the function will take care of making - and returning a quoted null string if there's nothing else in - ISTRING. If there is, the quoted null should just go away. Part of - fix for bug reported by Ruediger Kuhlmann - - expand_word_internal: when processing ISTRING to build return value, - only set W_HASQUOTEDNULL in the returned word flags if the word is - a quoted null string AND had_quoted_null is set. Rest of fix - - 5/9 - --- -variables.c - - bind_variable_internal: if we get an array variable here (implicit - assignment to index 0), call make_array_variable_value, which - dummies up a fake SHELL_VAR * from array[0]. This matters when - we're appending and have to use the current value - - bind_variable_internal: after computing the new value, treat assoc - variables with higher precedence than simple array variables; it - might be that a variable has both attributes set - -arrayfunc.c - - bind_array_var_internal: break code out that handles creating the - new value to be assigned to an array variable index into a new - function, make_array_variable_value. This handles creating a - dummy SHELL_VAR * for implicit array[0] assignment. Fixes bug - reported by Dan Douglas - -arrayfunc.h - - make_array_variable_value: new extern declaration - - 5/19 - ---- -variables.c - - bind_int_variable: if an assignment statement like x=y comes in - from the expression evaluator, and x is an array, handle it like - x[0]=y. Fixes bug reported by Dan Douglas - - 5/24 - ---- - -braces.c - - mkseq: handle possible overflow and break the sequence generating - loop if it occurs. Fixes OpenSUSE bug 763591: - https://bugzilla.novell.com/show_bug.cgi?id=763591 - - 5/25 - ---- -Makefile.in - - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools - buildversion, mksignames, mksyntax - - LDFLAGS_FOR_BUILD: add to compilation recipes for test tools - recho, zecho, printenv, xcase - -builtins/Makefile.in - - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools - gen-helpfiles, psize.aux - -variables.c - - bind_int_variable: if LHS is a simple variable name without an array - reference, but resolves to an array variable, call - bind_array_variable with index 0 to make x=1 equivalent to x[0]=1. - Fixes bug reported by Dan Douglas - - 5/27 - ---- -subst.c - - expand_word_internal: make sure has_dollar_at doesn't get reset before - recursive calls to param_expand or expand_word_internal, since it has - to save state of what came before. Use temp variable and make sure - has_dollar_at is incremented if recursive call processes "$@". - Fixes bug reported by gregrwm and - supplemented by Dan Douglas - -doc/{bash.1,bashref.texi} - - changes to the description of substring expansion inspired by - suggestions from Bill Gradwohl - -doc/bashref.texi - - added substring expansion examples inspired by suggestions from - Bill Gradwohl - -variables.c - - find_shell_variable: search for a variable in the list of shell - contexts, ignore the temporary environment - - find_variable_tempenv: search for a variable in the list of shell - contexts, force search of the temporary environment - - find_variable_notempenv: search for a variable in the list of shell - contexts, don't force search of the temporary environment - -variables.h - - find_shell_variable: extern declaration - - find_variable_tempenv: extern declaration - - find_variable_notempenv: extern declaration - -arrayfunc.c - - bind_array_variable: call find_shell_variable instead of calling - var_lookup directly - -findcmd.c - - search_for_command: call find_variable_tempenv instead of - find_variable_internal directly - - _find_user_command_internal: call find_variable_tempenv instead of - find_variable_internal directly - -builtins/setattr.def - - set_var_attribute: call find_variable_notempenv instead of - find_variable_internal directly - - show_name_attributes: call find_variable_tempenv instead of - find_variable_internal directly - - 6/1 - --- -sig.c - - termsig_handler: don't try to save the shell history on a terminating - signal any more, since it just causes too many problems on Linux - systems using glibc and glibc malloc - -lib/readline/vi_mode.c - - rl_vi_change_to: change to correctly redo `cc', since `c' is not a vi - motion character. From Red Hat bug 813289 - - rl_vi_delete_to: change to correctly redo `dd', since `d' is not a vi - motion character - - rl_vi_yank_to: change to correctly redo `yy', since `y' is not a vi - motion character - - 6/4 - --- -lib/sh/mktime.c - - current versions of VMS do not need to include . Fix from - John E. Malmberg - - 6/5 - --- -lib/sh/eaccess.c - - sh_stat: instead of using a static buffer to do the DEV_FD_PREFIX - translation, use a dynamically-allocated buffer that we keep - resizing. Fixes potential security hole reported by David Leverton - - - 6/5 - --- -braces.c - - expand_seqterm: check errno == ERANGE after calling strtoimax for - rhs and incr. Part of a set of fixes from Scott McMillan - - - expand_seqterm: incr now of type `intmax_t', which changes - arguments to mkseq - - mkseq: a better fix for detecting overflow and underflow since it's - undefined in C and compilers `optimize' out overflow checks. Uses - ADDOVERFLOW and SUBOVERFLOW macros - - mkseq: use sh_imaxabs (new macro) instead of abs() for intmax_t - variables - - mkseq: don't allow incr to be converted to -INTMAX_MIN - - mkseq: make sure that strvec_create isn't called with a size argument - greater than INT_MAX, since it only takes an int - - 6/6 - --- -braces.c - - mkseq: try and be smarter about not overallocating elements in - the return array if the increment is not 1 or -1 - - 6/7 - --- -parse.y - - history_delimiting_chars: if the parser says we're in the middle of - a compound assignment (PST_COMPASSIGN), just return a space to avoid - adding a stray semicolon to the history entry. Fixes bug reported - by "Davide Brini" - - 6/8 - --- -bashline.c - - bash_directory_completion_hook: don't attempt spelling correction - on the directory name unless the direxpand option is set and we are - going to replace the directory name with the corrected one in the - readline line. Suggested by Linda Walsh - -lib/sh/shquote.c - - sh_backslash_quote: now takes a third argument: flags. If non-zero, - tildes are not backslash-escaped. Have to handle both printf %q, - where they should be escaped, and filename completion, where they - should not when used as usernames - -externs.h - - sh_backslash_quote: declaration now takes a third argument - -builtins/printf.def - - printf_builtin: call sh_backslash_quote with 1 as third argument - so tildes get escaped - -{bashline,bracecomp}.c - - call sh_backslash_quote with 0 as third argument so tildes are not - escaped in completed words - -doc/bash.1 - - add `coproc' to the list of reserved words. From a report by - Jens Schweikhardt - - 6/10 - ---- -execute_cmd.c - - line_number_for_err_trap: now global, so parse_and_execute can save - and restore it with unwind-protect - -builtins/evalstring.c - - parse_prologue: save and restore line_number_for_err_trap along - with line_number - - restore_lastcom: new function, unwind-protect to restore - the_printed_command_except_trap - - parse_prologue: use restore_lastcom to save and restore the value - of the_printed_command_except_trap around calls to parse_and_execute - (eval/source/.) - - 6/15 - ---- -lib/readline/complete.c - - complete_fncmp: change filename comparison code to understand - multibyte characters, even when doing case-sensitive or case-mapping - comparisons. Fixes problem reported by Nikolay Shirokovskiy - - - 6/20 - ---- -builtins/mapfile.def - - mapfile: move the line count increment and check for having read - the specified number of lines to the end of the loop to avoid - reading an additional line with zgetline. Fixes bug reported by - Dan Douglas - - 6/21 - ---- - -execute_cmd.c - - execute_pipeline: make sure `lastpipe_flag' is initialized to 0 on - all systems, since it's tested later in the function. Fixes bug - reported by John E. Malmberg - - 6/22 - ---- -mailcheck.c - - file_mod_date_changed: return 0 right away if mailstat() does not - return success. Fixes bug with using uninitialized values reported - by szymon.kalasz@uj.edu.pl - -builtins/set.def - - the `monitor' option is not available when the shell is compiled - without job control, since the underlying `m' flag is not available - -nojobs.c - - job_control: now declared as int variable, initialized to 0, never - modified - -jobs.h - - job_control: extern declaration no longer dependent on JOB_CONTROL - -execute_cmd.c - - execute_pipeline: made necessary changes so `lastpipe' shell option - is now available in all shells, even those compiled without - JOB_CONTROL defined - - 6/23 - ---- -lib/glob/glob.c - - glob_filename: check for interrupts before returning if glob_vector - returns NULL or an error. Bug reported by Serge van den Boom - , fix from Andreas Schwab - - call run_pending_traps after each call to QUIT or test of - interrupt_state, like we do in mainline shell code - - glob_vector: don't call QUIT; in `if (lose)' code block; just free - memory, return NULL, and let callers deal with interrupt_state or - other signals and traps - - 6/25 - ---- -lib/readline/input.c - - rl_read_key: restructure the loop that calls the event hook a little, - so that the hook is called only after rl_gather_tyi returns no input, - and any pending input is returned first. This results in better - efficiency for processing pending input without calling the hook - on every input character as bash-4.1 did. From a report from - Max Horn - - 6/26 - ---- -trap.c - - signal_is_pending: return TRUE if SIG argument has been received and - a trap is waiting to execute - -trap.h - - signal_is_pending: extern declaration - -lib/glob/glob.c - - glob_vector: check for pending SIGINT trap each time through the loop, - just like we check for interrupt_state or terminating_signal, and - set `lose = 1' so we clean up after ourselves and interrupt the - operation before running the trap. This may require a change later, - maybe call run_pending_traps and do that if run_pending_traps returns? - -variables.c - - sv_histtimefmt: set history_comment_character to default (`#') if - it's 0 when we're turning on history timestamps. The history code - uses the history comment character to prefix timestamps, and - leaving it at 0 effectively removes them from the history. From a - report to help-bash by Dennis Williamson - - 6/27 - ---- -lib/readline/signals.c - - rl_maybe_restore_sighandler: new function, sets handler for SIG to - HANDLER->sa_handler only if it's not SIG_IGN. Needs to be called - on same signals set using rl_maybe_set_sighandler, which does not - override an existing SIG_IGN handler (SIGALRM is ok since it does - the check inline; doesn't mess with SIGWINCH) - - 6/30 - ---- -variables.h - - additional defines for the new `nameref' variable attribute - (att_nameref): nameref_p, nameref_cell, var_setref - -variables.c - - find_variable_nameref: resolve SHELL_VAR V through chain of namerefs - - find_variable_last_nameref: resolve variable NAME until last in a - chain of possibly more than one nameref starting at shell_variables - - find_global_variable_last_nameref: resolve variable NAME until last - in a chain of possibly more than one nameref starting at - global_variables - - find_nameref_at_context: resolve SHELL_VAR V through chain of namerefs - in a specific variable context (usually a local variable hash table) - - find_variable_nameref_context: resolve SHELL_VAR V through chain of - namerefs following a chain of varible contexts - - find_variable_last_nameref_context: resolve SHELL_VAR V as in - find_variable_last_context, but return the final nameref instead of - what the final nameref resolves to - - find_variable_tempenv, find_variable_notempenv, find_global_variable, - find_shell_variable, find_variable: modified to follow namerefs - - find_global_variable_noref: look up a global variable without following - any namerefs - - find_variable_noref: look up a shell variable without following any - namerefs - - bind_variable_internal: modify to follow a chain of namerefs in the - global variables table; change to handle assignments to a nameref by - following nameref chain - - bind_variable: modify to follow chain of namerefs when binding to a - local variable - - unbind_variable: changes to unset nameref variables (unsets both - nameref and variable it resolves to) - -subst.c - - parameter_brace_expand_word: change to handle expanding nameref whose - value is x[n] - - parameter_brace_expand_indir: change to expand in ksh93-compatible - way if variable to be indirected is nameref and a simple (non-array) - expansion - - param_expand: change to expand $foo where foo is a nameref whose value - is x[n] - -execute_cmd.c - - execute_for_command: changes to implement ksh93 semantics when index - variable is a nameref - -builtins/setattr.def - - show_var_attributes: change to add `n' to flags list if att_nameref - is set - -builtins/set.def - - unset_builtin: changes to error messages to follow nameref variables - -builtins/declare.def - - document new -n option - - declare_internal: new `-n' and `+n' options - - declare_internal: handle declare -n var[=value] and - declare +n var[=value] for existing and non-existant variables. - Enforce restriction that nameref variables cannot be arrays. - Implement semi-peculiar ksh93 semantics for typeset +n ref=value - - 7/5 - --- -variables.c - - unbind_variable: unset whatever a nameref resolves to, leaving the - nameref variable itself alone - - unbind_nameref: new function, unsets a nameref variable, not the - variable it references - -variables.h - - unbind_nameref: extern declaration - -builtins/set.def - - unset_builtin: modify to add -n option, which calls unbind_nameref - leaving unbind_variable for the usual case. This required slight - changes and additions to the test suite - -doc/{bash.1,bashref.texi} - - document namerefs and typeset/declare/local/unset -n - - 7/13 - ---- -lib/sh/casemod.c - - include shmbchar.h for is_basic and supporting pieces - - sh_casemod: use _to_wupper and _to_wlower to convert wide character - case instead of TOUPPER and TOLOWER. Fixes bug reported by - Dennis Williamson , fix from - Andreas Schwab - - cval: short-circuit and return ascii value if is_basic tests true - - sh_casemod: short-circuit and use non-multibyte case modification - and toggling code if is_basic tests true - -lib/readline/signals.c - - _rl_{block,release}_sigint: remove the code that actually blocks and - releases the signals, since we defer signal handling until calls to - RL_CHECK_SIGNALS() - -lib/readline/{callback,readline,util}.c - - if HAVE_POSIX_SIGSETJMP is defined, use sigsetjmp/siglongjmp without - saving and restoring the signal mask instead of setjmp/longjmp - -lib/readline/rltty.c - - prepare_terminal_settings: don't mess with IXOFF setting if - USE_XON_XOFF defined - -doc/{bash.1,bashref.texi} - - add some text to the description of set -e clarifying its effect - on shell functions and shell function execution. Suggested by - Rainer Blome - -bashline.c - - edit_and_execute_command: increment current_command_line_count before - adding partial line to command history (for command-oriented-history - because of rl_newline at beginning of function), then reset it to 0 - before adding the dummy history entry to make sure the dummy entry - doesn't get added to previous incomplete command. Partial fix for - problem reported by Peng Yu - - 7/24 - ---- -configure.in - - interix: define RECYCLES_PIDS. Based on a report from Michael - Haubenwallner - - 7/26 - ---- -jobs.c - - make_child: call bgp_delete on the newly-created pid unconditionally. - Some systems reuse pids before cycling through an entire set of - CHILD_MAX/_SC_CHILD_MAX unique pids. This is no longer dependent - on RECYCLES_PIDS. Based on a report from Michael Haubenwallner - - -support/shobj-conf - - Mac OS X: drop MACOSX_DEPLOYMENT_TARGET=10.3 from the LDFLAGS. We - can finally kill Panther - - 7/28 - ---- -subst.c - - command_substitute: make sure last_made_pid gets reset if make_child - fails - -execute_cmd.c - - execute_command_internal: case cm_simple: decide whether or not to - wait_for a child if already_making_children is non-zero, indicates - that there is an unwaited-for child. More of fix for bug report - from Michael Haubenwallner - -jobs.c - - make_child: call delete_old_job (new_pid) unconditionally, don't - bother to check whether or not pid wrap occurred. Rest of fix for - bug report from Michael Haubenwallner - - - 7/29 - ---- -shell.c - - subshell_exit: new function, exits the shell (via call to sh_exit()) - after calling any defined exit trap - -externs.h - - subshell_exit: new extern declaration - -execute_cmd.c - - execute_command_internal: make sure to call subshell_exit for - {} group commands executed asynchronously (&). Part of fix for - EXIT trap bug reported by Maarten Billemont - -sig.c - - reset_terminating_signals: make sure to set termsigs_initialized back - to 0, so a subsequent call to initialize_terminating_signals works - right. Rest of fix for bug reported by Maarten Billemont - - -{execute_cmd,general,jobs,mailcheck,mksyntax,test}.c -builtins/{cd,fc,pushd,ulimit}.def -lib/malloc/getpagesize.h -lib/sh/{clktck,fpurge,inet_aton,mailstat,oslib,pathcanon,pathphys,spell,strerror}.c - - make inclusion of dependent on HAVE_SYS_PARAM_H - consistently - - 8/6 - --- -lib/readline/histexpand.c - - history_expand_internal: now takes an additional argument saying - whether the history expansion occurs within a quoted string, set to - the open quote character - - history_expand_internal: use new argument instead of checking prev - char and initializing quoted_search_delimiter, pass qc directly to - get_history_event, where it allows a matching quote to terminate a - string defining an event - - history_expand: change single-quote handling code so that if - history_quotes_inhibit_expansion is 0, single quotes are treated - like double quotes - - history_expand: change call to history_expand_internal to pass new - argument of `"' if double-quoted string, `'' if single-quoted string; - this lets history_expand decide what is a quoted string and what - is not - - 8/7 - --- -configure.in - - AC_CANONICAL_BUILD: invoke for later use - -lib/readline/macro.c - - _rl_prev_macro_key: new function, inverse of _rl_next_macro_key: - backs up the index into the current macro by 1 - -lib/readline/rlprivate.h - - _rl_prev_macro_key: extern declaration - - -lib/readline/readline.c - - _rl_dispatch_subseq, _rl_subseq_result: don't call _rl_unget_char - if we're currently reading from a macro; call _rl_prev_macro_key - instead. Fixes bug reported by Clark Wang - - 8/13 - ---- -builtins/evalstring.c - - evalstring(): new function, wrapper around parse_and_execute. - make sure we handle cases where parse_and_execute can call `return' - and short-circuit without cleaning up properly. We call - parse_and_execute_cleanup() then jump to the previous-saved return - location - -builtins/common.h - - extern declaration for evalstring() - -builtins/eval.def - - eval_builtin: make sure we handle `eval " ... return"' in contexts - where `return' is valid by calling evalstring(). Fixes bug with - `eval return' in sourced files reported by Clark Wang - - -trap.c - - run_pending_traps: call evalstring instead of parse_and_execute. - XXX - still needs to handle saving and restoring token state in the - presence of `return'; could use unwind_protects for that - -builtins/mapfile.def - - run_callback: call evalstring instead of parse_and_execute - - 8/15 - ---- -bashline.c - - bash_filename_stat_hook: make sure we don't free local_dirname - before using it to canonicalize any expanded filename. Make sure - it always points to *dirname and only free it if we're replacing - it. - -lib/readline/complete.c - - append_to_match: make sure we call rl_filename_stat_hook with - newly-allocated memory to avoid problems with freeing it twice - - 8/17 - ---- -variables.c,config-top.h - - if ARRAY_EXPORT is defined to 1 when variables.c is compiled, the - code that allows indexed arrays to be exported is enabled and - included - - 8/19 - ---- -shell.c - - call start_debugger from main() only if dollar_vars[1] != 0 (close - enough to a non-interactive shell, since we can be interactive with - -i while running a shell script). Fixes oddity reported by - Techlive Zheng - - 8/20 - ---- -arrayfunc.c - - quote_array_assignment_chars: don't bother quoting if the word has - not been marked as an assignment (W_ASSIGNMENT) - - quote_array_assignment_chars: turn on W_NOGLOB in the word flags - so assignment statements don't undergo globbing. Partial fix for - problems reported by Dan Douglas - - 8/21 - ---- -command.h - - W_NOBRACE: new word flag that means to inhibit brace expansion - -subst.c - - brace_expand_word_list: suppress brace expansion for words with - W_NOBRACE flag - - 8/22 - ---- -builtins/read.def - - read_builtin: don't call dequote_string on what we've read, even if - we saw an escape character, unless (input_string && *input_string). - We may have escaped an IFS whitespace character. Fixes seg fault - reported by - -execute_cmd.c - - execute_command_internal: set the_printed_command_except trap when - about to execute a ( ... ) user subshell. For now, set it only if - ERR is trapped; can relax that later. Fixes bug reported by - Mike Frysinger - - 8/23 - ---- -jobs.c - - remove references to first_pid and pid_wrap, since we're not using - them for anything anymore - - 8/24 - ---- -subst.c - - changes for W_NOBRACE everywhere appropriate: so it can be displayed - for debugging, and passed out of expand_word_internal - -doc/{bash.1,bashref.texi} - - small changes to make it clearer that the = and == operators are - equivalent, and will cause pattern matching when used with [[. - From a question from Michal Soltys - -doc/bashref.texi - - some small formatting changes from Karl Berry - - 8/27 - ---- -lib/readline/doc/{history,rlman,rluserman}.texi - - some small formatting changes from Karl Berry - -arrayfunc.c - - assign_array_element_internal, assign_compound_array_list, - unbind_array_element, array_value_internal: changes to make - assignment statements to negative indices (a[-1]=2) and unsetting - array elements using negative indices (unset 'a[-1]') work. - From suggestions by Dennis Williamson - and Chris F. A. Johnson - -subst.c - - array_length_reference: changes to make length references to array - elements using negative indices (${#a[-1]}) work - - 8/28 - ---- -doc/{bash.1,bashref.texi} - - document new treatment of negative indices to indexed arrays when - assigning, referencing, calculating length, and unsetting - - 8/29 - ---- -shell.c - - show_shell_usage: add -l to list of shell invocation options (short - for --login). From Red Hat bug 852469 - -configure.ac - - renamed from configure.in, as latest autoconf versions want. Patches - Stefano Lattarini - -MANIFEST,Makefile.in,doc/bashref.texi,support/mkconffiles - - configure.in -> configure.ac - - 9/1 - --- - -parse.y - - read_token_word: allow words like {array[ind]} to be valid redirection - words for constructs like {x} - -lib/readline/display.c - - update_line: if the first difference between the old and new lines - is completely before any invisible characters in the prompt, we - should not adjust _rl_last_c_pos, since it's before any invisible - characters. Fixed in two places - - prompt_modechar: return a character indicating the editing mode: - emacs (@), vi command (:), or vi insert (+) - - _rl_reset_prompt: new function, just calls rl_expand_prompt. Will be - inlined, placeholder for more changes - - expand_prompt: if show-mode-in-prompt is enabled, add a character to - the front of the prompt indicating the editing mode, adjusting the - various variables as appropriate to keep track of the number of - visible characters and number of screen positions - -lib/readline/bind.c - - show-mode-in-prompt: new bindable boolean variable, shadowed by - _rl_show_mode_in_prompt variable - - hack_special_boolean_var: call _rl_reset_prompt when toggling or - setting show-mode-in-prompt - -lib/readline/readline.c - - readline_internal_setup: make sure the correct vi mode keymap is set - before expanding the prompt string for the first time - -lib/readline/misc.c - - rl_emacs_editing_mode: make sure to call _rl_reset_prompt if we're - showing the editing mode in the prompt - -lib/readline/rlprivate.h - - _rl_reset_prompt, _rl_show_mode_in_prompt: extern declarations - -lib/readline/vi_mode.c - - rl_vi_insertion_mode: call _rl_reset_prompt - - rl_vi_movement_mode: call _rl_reset_prompt. Finishes changes for - showing mode in prompt string, originally requested by Miroslav - Koskar and most recently by Jordan Michael - Ziegler - -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - document new show-mode-in-prompt variable, off by default - - 9/3 - --- - -jobs.c - - set_childmax: new function, external mechanism for other parts of - the shell to set js.c_childmax, the number of saved exited child - statuses to remember -jobs.h - - set_childmax: extern declaration - -variables.c - - CHILD_MAX: new special variable, with sv_childmax function to - run when it changes. Setting CHILD_MAX to a value greater than - zero but less than some maximum (currently 8192) sets the number of - exited child statuses to remember. set_childmax (jobs.c) ensures - that the number does not drop below the posix-mandated minimum - (CHILD_MAX) - -doc/{bash.1,bashref.texi} - - CHILD_MAX: document new meaning and action when variable is set - - 9/5 - --- -redir.c - - redir_varassign: call stupidly_hack_special_variables after - assigning fd number to specified variable, so we can use constructs - like {BASH_XTRACEFD}>foo. Suggested by Pierre Gaston - - - 9/8 - --- -expr.c - - readtok: invalidate previous contents of `curlval' before freeing - and reallocating tokstr (which, chances are, will get the same - pointer as before and render curlval inconsistent). Fixes other - bug reported by Dan Douglas - - 9/9 - --- -lib/readline/complete.c - - rl_username_completion_function: protect call to setpwent() with - #ifdef (HAVE_GETPWENT)/#endif. Fixes bug reported by - Gerd Hofmann - -lib/readline/display.c - - rl_message: second and subsequent calls to rl_message can result in - local_prompt being overwritten with new values (e.g., from the - successive calls displaying the incremental search string). Need - to free before overwriting if it's not the same as the value saved - in saved_local_prompt. Fixes memory leak reported by - Wouter Vermaelen - -lib/readline/{terminal.c,rlprivate.h} - - move CUSTOM_REDISPLAY_FUNC and CUSTOM_INPUT_FUNC defines from - terminal.c to rlprivate.h so other files can use them - -expr.c - - expr_streval: if noeval is non-zero, just return 0 right away, - short-circuiting evaluation completely. readtok will leave curtok - set correctly without re-entering the evaluator at all. Rest of - fix for bug reported by Dan Douglas - - 9/11 - ---- - -parse.y - - parse_comsub: make sure the `reserved word ok in this context' flag - is preserved after we read `do' followed by whitespace. Fixes bug - reported by Benoit Vaugon - - 9/13 - ---- -configure.ac,config.h.in - - enable-direxpand-default: new configure option, turns the `direxpand' - shell option on by default - -bashline.c - - dircomplete_expand, dircomplete_expand_relpath: initialize to 1 if - DIRCOMPLETE_EXPAND_DEFAULT is defined and non-zero - -doc/bashref.texi - - enable-direxpand-default: document new configure option - - 9/14 - ---- -shell.c - - --protected: make option valid only when wordexp is compiled into - the shell. Fix from Roman Rakus - -configure.ac - - HP NonStop (*-nsk*): compile --without-bash-malloc. Change from - Joachim Schmitz - - 9/16 - ---- -subst.c,execute_cmd.c,lib/glob/sm_loop.c,lib/sh/shquote.c - - minor code cleanups from Joachim Schmitz - -lib/readline/colors.h - - workaround for HP NonStop compiler issue with from - Joachim Schmitz - - 9/17 - ---- -builtins/printf.def - - printf_builtin: handle localtime returning NULL, as can happen when - encountering overflow. Bug report and initial fix from - Eduardo A. Bustamante López - -doc/{bash.1,bashref.texi} - - emphasize that brace expansion using character ranges ({a..c}) acts - as if the C locale were in use. Prompted by message from - Marcel Giannelia - - 9/20 - ---- -lib/sh/wcsnwidth.c - - wcsnwidth: new function, variant of wcwidth, returns the number of - wide characters from a string that will be displayed to not exceed - a specified max column position - - 9/21 - ---- -builtins/help.def - - show_builtin_command_help: break code that displays the short-doc - for each builtin in two columns into a new function: dispcolumn - - wdispcolumn: multibyte-char version of dispcolumn; uses wide - chars and printf "%ls" format. Fixes problem reported by - Nguyá»n Thái Ngá»c Duy - - 9/22 - ---- -execute_cmd.c - - execute_disk_command: before running the command-not-found hook, - call kill_current_pipeline() to make sure we don't add processes - to an existing pipeline or wait for processes erroneously - - 9/23 - ---- -lib/readline/input.c - - rl_input_available_hook: new hook function, called from - _rl_input_available (or _rl_input_queued) to return whether or not - input is available wherever the input source is - -lib/readline/doc/rltech.texi - - rl_input_available_hook: document - - 9/27 - ---- -lib/glob/sm_loop.c: - - GMATCH: after one or more `*', an instance of ?(x) can match zero or - 1 times (unlike ?, which has to match one character). The old code - failed if it didn't match at least once. Fixes `a*?(x)' bug. - - GMATCH: if we hit the end of the search string, but not the end of - the pattern, and the rest of the pattern is something that can - match the NUL at the end of the search string, we should successfully - match. Fixes `a*!(x)' bug reported by - - 10/2 - ---- -command.h - - add c_lock member to coproc structure for future use to tell who is - manipulating it - -execute_cmd.c - - execute_coproc: block SIGCHLD while parent is forking coproc - process and adding pid to sh_coproc struct to avoid race condition - where child is reaped before the pid is assigned and the coproc is - never marked as having died. Fixes race condition identified by - Davide Baldini - - add assignments to c_lock member of struct coproc in various - functions that manipulate it; was used to identify race condition - - coproc_pidchk: don't call coproc_dispose to avoid using malloc and - other functions in a signal handler context - - coproc_dispose: call BLOCK_SIGNAL/UNBLOCK_SIGNAL for SIGCHLD while - manipulating the sh_coproc struct - - 10/6 - ---- -lib/readline/complete.c - - rl_display_match_list: if printing completions horizontally, don't - bother with spacing calculations if limit == 1, which means we are - printing one completion per line no matter what. Fixes bug - reported by David Kaasen - - 10/7 - ---- -builtins/declare.def - - declare_internal: add error checking for nameref attribute and - variable assignments: self-references, attempts to make an array - variable a nameref - -subst.c - - parameter_brace_expand: handle parameter_brace_expand_word returning - &expand_param_fatal or &expand_param_error and return the appropriate - error value - - parameter_brace_expand_word: if a nameref variable's value is not a - valid identifier, return an error - - param_expand: if a nameref variable's value is not a valid identifier, - return an error - -test.c - - unary_operator: add new -R variable, returns true if variable is set - and has the nameref attribute. From ksh93 - -builtins/test.def - - add -R to description of conditional commands for help test - -doc/{bash.1,bashref.texi} - - document new -R unary conditional operator - - 10/13 - ----- -trap.c - - check_signals_and_traps: new function, convenience function for the - rest of the shell to check for pending terminating and interrupt - signals, and to check for and process any pending traps - - any_signals_trapped: new function, returns non-zero if any signals - are trapped and -1 if not - -trap.h - - extern declaration for check_signals_and_traps - -bashline.c - - bashline_reset: make sure we reset the event hook - - bash_event_hook: call check_signals_and_traps instead of just - checking for terminating signals so we can run pending traps and - react to interrupts, and reset the event hook when we're done - - - 10/14 - ----- -trap.c - - trap_handler: if executing in a readline signal handler context, - call bashline_set_event_hook to install bash_event_hook to process - the signal (if bash cares about it) - -sig.c - - sigint_sighandler: call bashline_set_event_hook to set the event - hook if we're executing in a readline signal handler context - -lib/readline/input.c - - rl_getc: call RL_CHECK_SIGNALS if read returns -1/EINTR and the caught - signal is SIGINT or SIGQUIT rather than waiting until the next time - around the loop - - rl_getc: call rl_event_hook after calling RL_CHECK_SIGNALS to allow - an application signal handler to set the event hook in its own - signal handler (e.g., like bash trap_handler or sigint_sighandler) - - -parse.y - - yy_readline_get: don't set interrupt_immediately before we call - readline(). Inspired by report from lanshun zhou - - -input.c - - getc_with_restart: add call to run_pending_traps after call to - CHECK_TERMSIG - -lib/sh/zread.c - - zread: call check_signals_and_traps if read() returns -1/EINTR - instead of just ignoring the EINTR and deferring handling any - signal that generated it - -builtins/mapfile.def - - mapfile: don't set interrupt_immediately before calling zgetline() - (which uses zread internally) - -builtins/read.def - - read_builtin: don't set interrupt_immediately before calling zread - (moved code around so that it was only being set right around calls - to zread to avoid signal handler conflicts). Inspired by report - from lanshun zhou - - edit_line: don't set interrupt_immediately around call to readline() - - include shmbutil.h - - read_builtin: don't call read_mbchar unless is_basic(c) returns - false for the character we just read - - 10/15 - ----- -sig.c - - throw_to_top_level: if interrupt_state is non-zero, make sure that - last_command_exit_value reflects 128+SIGINT if it's not already - greater than 128 - - 10/20 - ----- -builtins/wait.def - - WAIT_RETURN: set wait_signal_received back to 0 for the potential - next call to wait - -quit.h - - CHECK_WAIT_INTR: macro to check whether trap_handler handled a - signal and set wait_signal_received; longjmp to wait_intr_buf in - that case - -jobs.c - - wait_for, waitchld: call CHECK_WAIT_INTR at the same places we call - CHECK_TERMSIG to check for terminating signals - - wait_sigint_handler: don't longjmp out of the wait builtin unless - interrupt_immediately is set; otherwise just SIGRETURN from the - handler - - wait_sigint_handler: if interrupt_immediately not set, but we are - executing in the wait builtin and SIGINT is not trapped, treat it - as a `normally received' SIGINT: restore the signal handler and - send SIGINT to ourselves - - waitchld: when in posix mode and running SIGCHLD traps, don't longjmp - to wait_intr_buf (and let wait be interrupted) if we're running from - a signal handler. Wait for CHECK_WAIT_INTR to do the longjmp. - run_pending_traps will run the SIGCHLD trap later - -nojobs.c - - reap_zombie_children, wait_for_single_pid, wait_for: call - CHECK_WAIT_INTR where we call CHECK_TERMSIG - - wait_sigint_handler: don't longjmp out of the wait builtin unless - interrupt_immediately is set; otherwise just SIGRETURN from the - handler - -trap.c - - trap_handler: make sure wait_signal_received is set if the wait - builtin is executing, and only longjmp if interrupt_immediately is - set. This whole set of fixes was prompted by report from - lanshun zhou - - 10/24 - ----- -lib/glob/glob.c - - glob_filename: only check directory_name for globbing chars if - it's of non-zero length - -lib/sh/strchrnul.c - - new simpler implementation - -subst.c - - command_substitute: call set_shellopts after turning off errexit - in subshells so it's reflected in $SHELLOPTS - - 11/7 - ---- -builtins/evalstring.c - - parse_and_execute: treat ERREXIT case like reader_loop does: set - variable_context to 0 before longjmping back to top_level. Don't - run the unwind-protect context to avoid side effects from popping - function contexts. Part of fix for problem reported by Nikolai - Kondrashov - -execute_cmd.c - - execute_simple_command: call unlink_fifo_list only if this is the - last element of a pipeline (or not in a pipeline), rather than for - every child. Fixes difference in behavior between /dev/fd and - FIFOs reported by Zev Weiss - - execute_null_command: do the same thing in the parent branch after - make_child - - 11/14 - ----- -subst.c - - parameter_brace_expand: a variable is null if it's special ($@, $*), - the expansion occurs within double quotes, and the expansion turns - into a quoted null. Fixes debian bug 692447 reported by - Matrosov Dmitriy - -jobs.c - - run_sigchld_trap: make sure `running_trap' sentinel is set - appropriately - - waitchld: only run the sigchld trap if we're not in a signal - handler, not running a trap, and executing the wait builtin. - Otherwise, queue for later handling. We still run one instance - of the trap handler per exited child. Bulk of fix for bug - reported by Elliott Forney - -trap.c - - queue_sigchld_trap: set catch_flag so run_pending_traps notices, - and set trapped_signal_received for completeness. Rest of fix - for bug reported by Elliott Forney - -lib/malloc/malloc.c - - block_signals: renamed to _malloc_block_signals, made public - - unblock_signals: renamed to _malloc_unblock_signals, made public - -lib/malloc/imalloc.h - - extern declarations for _malloc_{un,}block_signals - -lib/malloc/table.c - - mregister_alloc, mregister_free: block signals around table - manipulation - - 11/15 - ----- -trap.c - - run_pending_traps: set SIG_INPROGRESS flag around calls to - run_sigchld_handler so other parts of the shell know that the - SIGCHLD trap handler is executing - - run_pending_traps: if we get a situation where we are looking at - running a SIGCHLD trap but the trap string is IMPOSSIBLE_TRAP_HANDLER - and the SIG_INPROGRESS flag is set, just skip it. This is possible - if run_pending_traps is called from a SIGCHLD trap handler run by - run_sigchld_trap - -doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} - - corrected description of the effect of `set history-size 0'. Report - from Vesa-Matti J Kari - -include/stdc.h - - CPP_STRING: new define, replaces __STRING - -lib/malloc/{malloc.c,imalloc.h} - - replace __STRING with CPP_STRING - - 11/16 - ----- -lib/readline/bind.c - - sv_histsize: if argument evaluates to a value < 0, unstifle the - history - - 11/22 - ----- -redir.c - - do_redirection_internal: if we have REDIR_VARASSIGN set in the - redirection flags and we set up `redirector' using fcntl or dup2, - don't add a redirect to make sure it stays open. Let the - script programmer manage the file handle. Fixes bug reported by - Sam Liddicott - - 11/24 - ----- -jobs.c - - wait_for_any_job: new function, waits for an unspecified background - job to exit and returns its exit status. Returns -1 on no background - jobs or no children or other errors. Calls wait_for with new - sentinel value ANY_PID - - wait_for: changes to handle argument of ANY_PID: don't look up or - try to modify the child struct, only go through the wait loop once. - Return -1 if waitpid returns no children - -jobs.h - - ANY_PID: new define - -builtins/wait.def - - new option: -n. Means to wait for the next job and return its exit - status. Returns 127 if there are no background jobs (or no - children). Feature most recently requested by Elliott Forney - - -doc/{bash.1,bashref.texi} - - document new `wait -n' option - -execute_cmd.c - - execute_command_internal: save make_command_string () result in a - temp variable before calling savestring() on it; avoids evaluating - make_command_string() result twice. Fix from John E. Malmberg - - - 11/28 - ----- - -builtins/declare.def - - declare_internal: if an array variable is declared using `declare -a' - or `declare -A', but not assigned a value, set the `invisible' - attribute so the variable does not show up as set. Fix for bug - about variable initialization reported by Tim Friske - -builtins/{mapfile,read}.def - - after calling find_or_make_array_variable, make sure the invisible - flag is turned off, in case the variable was declared previously - using `declare -a' or `declare -A'. Side effect of above change to - declare_internal - -subst.c - - shell_expand_word_list: handle the W_ASSNGLOBAL flag and put -g into - the list of options passed to make_internal_declare as appropriate. - Fix for bug reported by Tim Friske - - 11/30 - ----- -test.c - - unary_op: make sure -v and -n check that the variable is not marked - as invisible before calling var_isset. Fix for bug reported by Tim - Friske - - 12/2 - ---- -subst.c - - process_substitute: turn off the `expanding_redir' flag, which - controls whether or not variables.c:find_variable_internal uses the - temporary environment to find variables. We want to use the - temp environment, since we don't have to worry about order of - evaluation in a subshell. Fixes bug reported by Andrey Borzenkov - - - 12/4 - ---- -lib/glob/glob.c - - glob_filename: changes to avoid null filenames and multiple entries - returned for patterns like **/** (globstar enabled). Fixes bug - reported by Ulf Magnusson - - 12/10 - ----- -lib/glob/glob.c - - glob_filename: finish up a series of changes to make globstar-style - globbing more efficient, avoid more duplicate filenames, and be more - compatible with other shells that implement it - o collapse a sequence of **/**/** to one ** - o note when the directory name is all ** or ends in ** so we - can treat it specially when the filename is ** - All inspired by report from Andrey Borzenkov - -lib/sh/zread.c - - zreadn: new function, like zread, but takes an additional argument - saying how many bytes to read into the local buffer. Can be used to - implement `read -N' without so many one-byte calls to zreadc. Code - from Mike Frysinger - - 12/12 - ----- -lib/glob/sm_loop.c - - PATSCAN (glob_patscan): if passed string already points to end of - pattern, return NULL immediately. Fixes problem with - extglob_skipname reported by Raphaël Droz - - 12/13 - ----- -execute_cmd.c - - execute_coproc: handle the command's exit status being inverted - (an oversight). Fixes bug reported by DJ Mills - and Andreas Schwab - - 12/14 - ----- -lib/readline/readline.c - - bind_arrow_keys_internal: add MINGW key bindings for Home, End, - Delete, and Insert keys. Fix from Pierre Muller - - -builtins/printf.def - - printf_builtin: '%()T' conversion: if there is no argument supplied, - behave as if -1 had been supplied (current time). ksh93-like feature - suggested by Clark Wang - -doc/{bash.1,bashref.texi} - - document new printf %()T default argument behavior - - 12/15 - ----- -lib/readline/display.c - - displaying_prompt_first_line: new variable, indicates whether or - not the first line of output is displaying the prompt. Always true - in normal mode, sometimes false in horizontal scrolling mode - - rl_redisplay: set displaying_prompt_first_line to true unless we - are in horizontal mode; set to false in horizontal mode if the left - margin of the displayed line is greater than the end of the prompt - string - - rl_redisplay: when in horizontal scroll mode, don't adjust - _rl_last_c_pos by the wrap offset unless the line is displaying - a prompt containing invisible chars - - update line: don't adjust _rl_last_c_pos by the wrap offset unless - the line is displaying a prompt containing invisible chars - - update_line: if shrinking the line by reducing the number of - displayed characters, but we have already moved the cursor to the - beginning of the line where the first difference starts, don't - try to delete characters - -builtins/read.def - - unbuffered_read: set to 2 if invoked as `read -N' - - if unbuffered_read is set to 2, compute the number of chars we - need to read and read that many with zreadn. Posix mode still - uses zreadintr. Code from Mike Frysinger - -doc/{bash.1,bashref.texi} - - read: make it clear that if read times out, it saves any input - read to that point into the variable arguments. Report from - Fiedler Roman - -subst.c - - command_substitute: change direct assignment of exit_immediately_on_error - to use change_flag ('e', FLAG_OFF) instead - -flags.c - - use errexit_flag as the variable modified by changes to the -e - option, reflect those changes to exit_immediately_on_error - -execute_cmd.c - - execute_builtin: new global variable, builtin_ignoring_errexit, set - to 0 by default and set to 1 if eval/source/command executing in a - context where -e should be ignored - - execute_builtin: set exit_immediately_on_error to errextit_flag - after executing eval/source/command in a context where -e should - be ignored - -flags.c - - if builtin_ignoring_errexit is set, changes to errexit_flag are - not reflected in the setting of exit_immediately_on_error. Fixes - bug reported by Robert Schiele - - 12/23 - ----- -include/posixjmp.h - - setjmp_nosigs: new define, call setjmp in such a way that it will - not manipulate the signal mask - -{expr,test,trap}.c - - setjmp_nosigs: call instead of setjmp; don't need to manipulate - signal mask - -builtins/read.def - - read_builtin: setjmp_nosigs: call instead of setjmp; don't need - to manipulate signal mask - -builtins/evalstring.c: - - parse_and_execute: setjmp_nosigs: call instead of setjmp; don't need - to manipulate signal mask - - parse_string: setjmp_nosigs: call instead of setjmp; don't need - to manipulate signal mask - - parse_and_execute: save and restore the signal mask if we get a - longjmp that doesn't cause us to return or exit (case DISCARD) - - 12/24 - ----- -general.c - - bash_tilde_expand: only set interrupt_immediately if there are no - signals trapped; we want to jump to top level if interrupted but - not run any trap commands - - 12/25 - ----- -jobs.c - - run_sigchld_trap: no longer set interrupt_immediately before calling - parse_and_execute, even if this is no longer run in a signal handler - context - -input.c - - getc_with_restart: add call to QUIT instead of CHECK_TERMSIG - -parse.y - - yy_stream_get: now that getc_with_restart calls QUIT, don't need to - set interrupt_immediately (already had call to run_pending_traps) - -execute_cmd.c - - execute_subshell_builtin_or_function,execute_function,execute_in_subshell: - setjmp_nosigs: call instead of setjmp when saving return_catch; don't - need to manipulate signal mask - - execute_subshell_builtin_or_function,execute_in_subshell: - setjmp_nosigs: call instead of setjmp where appropriate when saving - top_level; don't need to manipulate signal mask if we're going to - exit right away - -subst.c - - command_substitute: setjmp_nosigs: call instead of setjmp when saving - return_catch; don't need to manipulate signal mask - - command_substitute: setjmp_nosigs: call instead of setjmp where - appropriate when saving top_level; don't need to manipulate signal - mask if we're going to exit right away - -trap.c - - run_exit_trap: setjmp_nosigs: call instead of setjmp when saving - return_catch; don't need to manipulate signal mask - - run_exit_trap: setjmp_nosigs: call instead of setjmp where - appropriate when saving top_level; don't need to manipulate signal - mask if we're going to exit right away - - _run_trap_internal: setjmp_nosigs: call instead of setjmp when saving - return_catch; don't need to manipulate signal mask - -builtins/evalfile.c - - _evalfile: setjmp_nosigs: call instead of setjmp when saving - return_catch; don't need to manipulate signal mask - -builtins/evalstring.c - - evalstring: setjmp_nosigs: call instead of setjmp when saving - return_catch; don't need to manipulate signal mask - -shell.c - - main: setjmp_nosigs: call instead of setjmp where appropriate when - saving top_level; don't need to manipulate signal mask if we're - going to exit right away - - run_one_command: setjmp_nosigs: call instead of setjmp where - appropriate when saving top_level; don't need to manipulate signal - mask if we're going to exit right away - - run_wordexp: setjmp_nosigs: call instead of setjmp where - appropriate when saving top_level; don't need to manipulate signal - mask if we're going to exit right away - -eval.c - - reader_loop: save and restore the signal mask if we get a longjmp - that doesn't cause us to return or exit (case DISCARD) - - 12/26 - ----- -parse.y - - shell_input_line_{index,size,len}: now of type size_t; in some cases - the unsigned property makes a difference - - STRING_SAVER: saved_line_{size,index} now of type size_t - - shell_getc: don't allow shell_input_line to grow larger than SIZE_MAX; - lines longer than that are truncated until read sees a newline; - addresses theoretical buffer overflow described by Paul Eggert - - - set_line_mbstate: size_t changes like shell_getc - - shell_getc: if shell_input_line is larger than 32K, free it and - start over to avoid large memory allocations sticking around - -variables.c - - bind_global_variable: new function, binds value to a variable in - the global shell_variables table - -variables.h - - bind_global_variable: new extern declaration - -builtins/declare.def - - declare_internal: if -g given with name=value, but variable is not - found in the global variable table, make sure to call - bind_global_variable so the variable is created and modified at - global scope. Fixes a bug where declare -g x=y could modify `x' - at a previous function scope - -command.h - - W_ASSIGNARRAY: new word flag, compound indexed array assignment - -subst.h - - ASS_MKGLOBAL: new assignment flag, forcing global assignment even in - a function context, used by declare -g - -execute_cmd.c - - fix_assignment_words: set W_ASSIGNARRAY flag if -a option given to - declaration builtin - -subst.c - - do_assignment_internal: explicitly handle case where we are - executing in a function and we want to create a global array or - assoc variable - - shell_expand_word_list: call make_internal_declare if -a option - given to declaration builtin (W_ASSIGNARRAY); handle -g option with - it (W_ASSNGLOBAL). Fixes inconsistency noticed by Vicente Couce - Diaz , where declare -ag foo=(bar) could modify - array variable foo at previous function scope, not global scope - - 12/27 - ----- -bashline.c - - Minix needs the third argument to tputs to be a void funtion taking - an int argument, not an int-returning function. Fix from - John E. Malmberg as part of VMS bash port - - 12/29 - ----- -configure.ac,version.c,patchlevel.h - - bash-4.3-devel: new version, new shell compatibility level (43) - -subst.c - - parameter_brace_patsub: put the bash-4.2 code back in from the - change of 3/3 that runs the replacement string through quote - removal, make it dependent on shell_compatibility_level <= 42 - -builtins/shopt.def - - compat42: new shopt option - - set_compatibility_level: change logic to set and unset various - compat variables and shell_compatibility_level - -COMPAT - - new documentation for bash-4.3 compatibility changes - -doc/{bash.1,bashref.texi} - - compat42: document new shopt option - -builtins/shopt.def - - set_compatibility_opts: new function, sets the various shopt - compat variables based on the value of shell_compatibility_level - -builtins/common.h - - set_compatibility_opts: new extern declaration - -variables.c - - BASH_COMPAT: new special variable; sets the shell compatibility - level. Accepts values in decimal (4.2) or integer (42) form; - Unsetting variable, setting it to empty string, or setting it to - out-of-range value sets the shell's compatibility level to the - default for the current version. Valid values are 3.1/31 through - the current version - - sv_shcompat: new function implementing logic for BASH_COMPAT - -variables.h - - sv_shcompat: new extern declaration - -doc/{bash.1,bashref.texi} - - BASH_COMPAT: description of new variable - -lib/readline/complete.c - - _rl_colored_stats: default back to 0 for 4.3 release branch - - 1/5/2013 - -------- -quit.h - - remove spurious call to itrace in CHECK_WAIT_INTR - -bashline.c - - bash_event_hook: if we're going to jump to top_level, make sure we - clean up after readline() by calling rl_cleanup_after_signal(). - Fixes bug reported against devel branch by Raphaël Droz - - - bash_event_hook: reset the event hook before checking for signals - or traps in case we longjmp - -doc/{bash.1,bashref.texi} - - small additions to the set -e section to make it more clear that - contexts where -e is ignored extend to compound commands as well - as shell functions - -lib/readline/readline.h - - rl_signal_event_hook: new extern declaration - -lib/readline/input.c - - rl_signal_event_hook: new variable, hook function to call when a - function (currently just read(2)) is interrupted by a signal and - not restarted - - rl_getc: call rl_signal_event_hook instead of rl_event_hook - -lib/readline/doc/rltech.texi - - rl_signal_event_hook: document new function - -bashline.c - - changes to set rl_signal_event_hook instead of rl_event_hook - -lib/readline/readline.h - - change readline version numbers to 6.3 - - 1/6 - --- -doc/{bash.1,bashref.texi} - - a couple of changes to the descriptions of the ERR trap and its - effects based on a message from Rob Nagler - - 1/9 - --- -expr.c - - expassign: invalidate curlval before freeing and NULLing tokstr to - avoid aliasing issues. Fixes bug reported by Eduardo A. Bustamante - López and Dan Douglas - -braces.c - - array_concat: don't be so aggressive in trying to short-circuit. We - can only short-circuit if we have a single-element array where the - element is an empty string (array[0] == "" array[1] = 0x0). Existing - practice requires us to replicate arrays and prefix or append empty - strings. Fixes bug reported by Eduardo A. Bustamante López - - - 1/11 - ---- -execute_cmd.c - - execute_builtin: since mapfile uses evalstring() to run its callbacks - internally, just like eval, so it needs to handle the case where the - temp environment given to mapfile persists throughout the entire - set of callback commands. This might be a problem with trap also, but - trap isn't run in the same way. Fixes bug reported by Dan Douglas - - - 1/13 - ---- -redir.c - - redirection_error: before expanding the redirection word (if - expandable_redirection_filename returns true), disable command - substitution during expansion. Fixes bug reported by Dan Douglas - - -subst.c - - expand_word_internal: case '\\': if the next character is an IFS - character, and the expansion occurs within double quotes, and the - character is not one for which backslash retains its meaning, add - the (escaped) '\' and the (escaped) character. Fixes bug reported - by Dan Douglas - - 1/15 - ---- -builtins/cd.def - - cd_builtin: make sure call to internal_getopt handles -e option. - Fixes bug reported by - - 1/17 - ---- -subst.c - - expand_word_list_internal: make sure tempenv_assign_error is - initialized to 0 - -execute_cmd.c - - execute_simple_command: make sure tempenv_assign_error is reset to 0 - after it's tested to see if an error should force the shell to exit. - Fixes problem where a the failure of a tempenv assignment preceding - a non-special builtin `sticks' and causes the next special builtin - to exit the shell. From a discussion on bug-bash started by - douxin - - 1/20 - ---- -subst.c - - parameter_brace_expand_rhs: call stupidly_hack_special_variables - after assigning with ${param[:]=word} even if IFS is changing. - Suggested by Dan Douglas [TENTATIVE, needs work - on IFS side effects] - -command.h - - W_GLOBEXP (which was unused) is now W_SPLITSPACE (which isn't used - yet) - -{execute_cmd,subst,variables}.c - - removed all code that mentioned W_GLOBEXP - - removed mention of gnu_argv_flags and code that set it - - 1/22 - ---- -subst.c - - param_expand: set W_SPLITSPACE if we expand (unquoted) $* and - IFS is unset or null so we can be sure to split this on spaces - no matter what happens with IFS later - - expand_word_internal: note that param_expand returns W_SPLITSPACE - in the returned word flags and keep track of that state with - `split_on_spaces' - - 1/23 - ---- -subst.c - - expand_word_internal: if split_on_spaces is non-zero, make sure - we split `istring' on spaces and return the resultant word. The - previous expansions should have quoted spaces in the positional - parameters where necessary. Suggested by Dan Douglas - - -execute_cmd.c - - execute_command_internal: make sure any subshell forked to run a - group command or user subshell at the end of a pipeline runs any - EXIT trap it sets. Fixes debian bash bug 698411 - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411 - -subst.c - - shell_expand_word_list: fix code that creates args for and calls - make_internal_declare to avoid calling it twice (missing `else' - in 12/26 change) - - do_assignment_internal: fix code from 12/26 change to fix problem - where an existing assoc variable could be converted to an array - without checking `mkassoc' - - 1/24 - ---- -builtins/evalfile.c - - _evalfile: add missing `close (fd)' calls before returning to - avoid fd leaks. Bug and fix from Roman Rakus - - 1/25 - ---- -builtins/read.def - - read_builtin: don't try to play tricks with the top of the unwind- - protect stack after read gets a SIGALRM; save input_string to new - memory, run the stack, then restore input_string and assign the - variables. Part of fix for bug reported by konsolebox - ; the rest of the fix is with the changes in - trap and signal handling and doing away with interrupt_immediately - - 1/26 - ---- -redir.c - - redirection_expand, write_here_string, write_here_document: before - calling any of the word expansion functions, after setting - expanding_redir to 1 (which bypasses the temp environment in the - variable lookup functions), call sv_ifs to reset the cached IFS- - related variables set by subst.c:setifs(). This ensures that - redirections will not get any IFS values that are set in the - temporary environment, as Posix specifies. Then, after the word - expansions, after resetting expanding_redir to 0, call sv_ifs - again to make sure the cached IFS values are set from any - assignments in the temporary environment. We force executing_builtin - to 1 to `fool' the variable lookup functions into using any temp - environment, then reset it to its old value after sv_ifs returns. - This is what allows read() to use the (cached) IFS variables set - in the temp environment. Fixes inconsistency reported by Dan Douglas - - - 1/29 - ---- -lib/readline/display.c - - update_line: fix off-by-one error when updating vis_lbreaks array - in a multibyte locale that occurs when moving multibyte chars from - one line down to another. Bug report and fix from Egmont - Koblinger - - 1/30 - ---- -configure.ac - - changed version to 4.3-alpha - -redir.c - - redir_open: handle open returning -1/EINTR, which seems to happen - a lot with FIFOs and SIGCHLD, and call QUIT to handle other - signals that can interrupt open(2). Bug report and initial fix - from Mike Frysinger - - 1/31 - ---- -subst.c - - parameter_brace_expand: make sure to propagate the PF_ASSIGNRHS flag - to parameter_brace_expand_word - - parameter_brace_expand_word: make sure that if the PF_ASSIGNRHS flag - is set and we are expanding ${a[@]} or ${a[*]} we set quoted to - include Q_DOUBLE_QUOTES before calling array_value_internal, mirroring - what we do for $@ and $*. Fixes inconsistency reported by Dan - Douglas - -configure.ac - - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it - will find $host-prefixed versions of utilities. Report and fix from - Mike Frysinger - -builtins/setattr.def - - set_var_attribute: check whether bind_variable (called when the - variable whose attributes are being modified is found in the temp - environment) just modified a read-only global variable, and don't - bother marking the temporary variable for propagation if so. The - propagation is superfluous and will result in a strange error - message - - 2/2 - --- -variables.c - - initialize_shell_variables: don't try to import function definitions - with invalid names from the environment if already in posix mode, - but create them as (invisible) exported variables so they pass - through the environment. Print an error message so user knows - what's wrong. Fixes bug reported by Tomas Trnka - - 2/9 - --- - -builtins/read.def - - sigalrm_seen, alrmbuf: now global so the rest of the shell (trap.c) - can use them - - sigalrm: just sets flag, no longer longjmps to alrmbuf; problem was - longjmp without manipulating signal mask, leaving SIGALRM blocked - -quit.h - - move CHECK_ALRM macro here from builtins/read.def so trap.c: - check_signals() can call it - -trap.c - - check_signals: add call to CHECK_ALRM before QUIT - - check_signals_and_traps: call check_signals() instead of including - CHECK_ALRM and QUIT inline. Integrating check for read builtin's - SIGALRM (where zread call to check_signals_and_traps can see it) - fixes problem reported by Mike Frysinger - - 2/12 - ---- -lib/glob/xmbsrtowcs.c - - xdupmbstowcs2: fixed but where end of string was not handled - correctly, causing loop to go past end of string in a bunch of cases. - Fixes bug reported by "Dashing" - - - 2/13 - ---- -builtins/pushd.def - - popd_builtin: treat any argument that isn't -n or of the form - [-+][[:digit:]]* as an error. Fixes problem reported by Bruce - Korb - - 2/14 - ---- -configure.ac - - add check for sig_atomic_t; already a placeholder for it in - config.h.in - - 2/15 - ---- -subst.c - - do_compound_assignment: don't call assign_compound_array_list with - a NULL variable in case make_local_xxx_variable returns NULL - (it will if you try to shadow a readonly or noassign variable). - Fixes bug reported by Richard Tollerton - - 2/16 - ---- -variables.c - - make_local_variable: print error messager if an attempt is made to - create a local variable shadowing a `noassign' variable. Previously - we just silently refused to do it - -trap.[ch] - - get_original_signal: now global so rest of the shell can use it - -sig.c - - initialize_shell_signals: install a signal handler for SIGTERM - that does nothing except set a sigterm_received flag instead of - ignoring it with SIG_IGN, as long as SIGTERM is not ignored when - the shell is started. Use get_original_signal early to get the - original handler, since we will do that later anyway - - set_signal_handler: if installing sigterm_sighandler as the SIGTERM - handler, make sure to add SA_RESTART flag to make it as close to - SIG_IGN as possible - -sig.h - - sigterm_sighandler: new extern declaration - -quit.h - - RESET_SIGTERM: set sigterm_receved to 0 - - CHECK_SIGTERM: check sigterm_received; if it's non-zero, treat it - as a fatal signal and call termsig_handler to exit the shell - -jobs.c - - make_child: call RESET_SIGTERM just before fork() so we can detect - if the child process received a SIGTERM before it's able to change - the signal handler back to what it was when the shell started - (presumably SIG_DFL). Only has effect if the shell installed - sigterm_sighandler for SIGTERM, interactive shells that were not - started with SIG_IGN as the SIGTERM handler - - make_child: call RESET_SIGTERM in the parent after fork() so the - rest of the shell won't react to it - -execute_cmd.c - - execute_simple_command: call CHECK_SIGTERM after make_child in child - to catch SIGTERM received after fork() and before restoring old - signal handlers - - execute_disk_command: call CHECK_SIGTERM after make_child in child - process after restoring old signal handlers and again just before - calling shell_execve. Fixes race condition observed by - Padraig Brady when testing with his `timeout' - program - -lib/readline/display.c - - open_some_spaces: new function, subset of insert_some_chars that just - opens up a specified number of spaces to be overwritten - - insert_some_spaces: now just calls to open_some_spaces followed by - _rl_output_some_chars - - update_line: use col_temp instead of recalculating it using - _rl_col_width in the case where we use more columns with fewer bytes - - update_line: use open_some_spaces and then output the right number - of chars instead of trying to print new characters then overwrite - existing characters in two separate calls. This includes removing - some dodgy code and making things simpler. Fix from Egmont - Koblinger - - use new variable `bytes_to_insert' instead of overloading temp in - some code blocks (nls - nfd, bytes that comprise the characters - different in the new line from the old) - - 2/18 - ---- -redir.c - - do_redirection_internal: add undoable redirection for the implicit - close performed by the <&n- and >&n- redirections. Fixes bug - reported by Stephane Chazelas - - 2/19 - ---- -sig.c - - termsig_handler: an interactive shell killed by SIGHUP and keeping - command history will try to save the shell history before exiting. - This is an attempt to preserve the save-history-when-the-terminal- - window-is-closed behavior - - 2/21 - ---- -braces.c - - brace_expand: if a sequence expansion fails (e.g. because the - integers overflow), treat that expansion as a simple string, including - the braces, and try to process any remainder of the string. The - remainder may include brace expansions. Derived from SuSE bug - 804551 example (https://bugzilla.novell.com/show_bug.cgi?id=804551) - - 2/23 - ---- -{quit,sig}.h,sig.c - - sigterm_received declaration now in sig.h; type is sig_atomic_t - - sigwinch_received type now sig_atomic_t - - sig.h includes bashtypes.h and if SIG_DFL not defined - (same logic as trap.h) to pick up sig_atomic_t - -unwind_prot.c - - include sig.h before quit.h (reverse order) - - 2/27 - ---- -builtins/shopt.def - - reset_shopt_options: make sure check_window_size is reset to the - default from config.h, not unconditionally to 0 - -jobs.[ch] - - last_made_pid, last_asynchronous_pid: now volatile. Change from SuSE - -jobs.c - - wait_for: if we're using sigaction to install a handler for SIGCHLD, - make sure we specify SA_RESTART - -lib/{tilde,readline}/shell.c - - get_home_dir: instead of looking in the password file every time, - look once and cache the result - -sig.[ch] - - sigwinch_received, sigterm_received: now `volatile' qualified - -sig.c,quit.h - - interrupt_state,terminating_signal: now sig_atomic_t - - 3/1 - --- -MANIFEST,examples/* - - removed around 120 files without FSF copyrights; requested by - Karl Berry in early January - - 3/2 - --- -lib/malloc/malloc.c - - morecore: only check whether SIGCHLD is trapped if SIGCHLD is defined - -doc/bashref.texi - - Fixed most of the examples in the GNU Parallel section to use better - shell idioms following complaints on bug-bash; added a couple of - examples and smoothed out the text - -quit.h - - include "sig.h" for sig_atomic_t - -lib/readline/display.c - - update_line: when inserting one or more characters at the end of - the display line in a non-multibyte environment, just write from the - first difference to the end of the line and return. We don't have - to adjust _rl_last_c_pos. This is needed to adjust from the old - two-part copy to a single call to _rl_output_some_chars (change of - 2/16) - - 3/4 - --- -Makefile.in,doc/Makefile.in - - PACKAGE_TARNAME, docdir: new variables substituted by autoconf - - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary - documentation files to be installed into $(docdir) - - install: add new rule to install $(OTHER_DOCS) - - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS) - -doc/bash.1 - - add URL to `POSIX' file in `SEE ALSO' section; put pointer to that - section in --posix and set -o posix descriptions - -examples/ - - removed around 110 examples at the request of the FSF due to copyright - issues - - 3/5 - --- -builtins/setattr.def - - readonly: modified help text slightly to make it clearer that - functions aren't changed or displayed unless the -f option is given. - Report from - - 3/9 - --- -include/typemax.h - - SIZE_MAX: define to 65535 (Posix minimum maximum) if not defined - -parse.y - - include "typemax.h" for possible SIZE_MAX definition, make sure we - include it after shell.h - -{braces,expr}.c - - include "typemax.h" for possible INTMAX_MIN and INTMAX_MAX definitions - - 3/10 - ---- -bashline.c - - bash_default_completion: make sure completion type of `!' (same as - TAB but with show-all-if-ambiguous set) and glob-word-completion - sets rl_filename_completion_desired to 0 so extra backslashes don't - get inserted by `quoting' the completion. We can't kill all the - matches because show-all-if-ambiguous needs them. Bug report from - Marcel (Felix) Giannelia - -[bash-4.3-alpha frozen] - - 3/14 - ---- -general.c - - trim_pathname: use memmove instead of memcpy since the source and - destination pathnames may overlap. Report and fix from Matthew - Riley - - 3/18 - ---- -configure.ac - - socklen_t is defined as `unsigned int' if configure can't find it - - 3/20 - ---- -lib/readline/complete.c - - S_ISVTX: since it's not defined on all platforms (Minix), make sure - its use is protected with #ifdef - - 3/21 - ---- -doc/{bash.1,bashref.texi} - - Added mention of ${!name[@]} and ${!name[*]} expansions to get all - indices of an array. Suggested by Jonathan Leffler - - - 3/24 - ---- -subst.h - - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that - single quotes (for now) will be treated as ordinary characters - -subst.c - - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now - - 3/25 - ---- -support/config.{guess,sub} - - updated to versions from autoconf-2.69 - - 3/31 - ---- -lib/sh/shquote.c - - sh_single_quote: short-circuit quoting a single "'" instead of - creating a long string with empty single-quoted strings - -parser.h - - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single- - quote results of $'...' expansion because quote removal will be - done later. Right now this is only done for ${word/pat/rep} - -parse.y - - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern - substitution word expansion so we don't treat single quote specially - in the pattern or replacement string - - parse_matched_pair: if we're parsing a dollar-brace word expansion - (${...}) and we're not treating single quote specially within - double quotes, single-quote the translation of $'...' ansi-c - escaped strings. Original report and fix from Eduardo A. - Bustamante López - -subst.c - - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the - DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat - single quotes specially within a double-quoted string - -execute_cmd.c - - fix_assignment_words: skip over assignment statements preceding a - command word before trying to figure out whether or not assignment - statements following a possible declaration command should be - treated specially. Fixes bug reported by Dan Douglas - - - 4/4 - --- -lib/readline/readline.c - - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether - the key is a text modification command) if the key sequence length - is 1. That keeps the arrow keys from setting the last command - when called in vi command mode. Fixes bug reported by Ian A. - Watson - - 4/6 - --- -lib/readline/bind.c - - rl_parse_and_bind: when parsing a double-quoted string as the value - of a variable, make sure we skip past the leading double quote. - Fix from Andreas Schwab - -variables.c - - hash_lookup: set new local variable last_table_searched to the table - a successful lookup appears in; tested in make_local_variable to - solve the problem below - - make_local_variable: if we find a variable with the tempenv flag - set at the same `level' as variable_context', but not found in the - temporary_env (temp environment preceding the builtin), return it. - The temp environment preceding the function call has already been - merged (in execute_function) into the list of variable contexts the - function sees as shell_variables by the time this is called. Fixes - inconsistency pointed out by Dan Douglas - -subst.c - - expand_arith_string: expanded out contents of expand_string, - expand_string_internal, expand_string_if_necessary to create a - WORD_DESC and call call_expand_word_internal() on it directly. - We don't want process substitution to be performed ( 1<(2) ) should - mean something different in an arithmetic expression context. - It doesn't work to just turn on the DQUOTE flag, since that means - that things like ${x["expression"]} are not expanded correctly. - Fixes problem pointed out by Dan Douglas - - 4/13 - ---- -subst.c - - process_substitute: run the EXIT trap before exiting, as other - shells seem to. Fixes problem pointed out by Dan Douglas - - -lib/readline/readline.c - - readline_internal_setup: call rl_vi_insertion_mode to enter vi - mode instead of rl_vi_insert_mode to avoid resetting the saved last - command information. Posix says that `.' can repeat a command - that was entered on a previous line so we need to save the info. - Fixes bug reported by Ian A. Watson - - 4/14 - ---- -lib/readline/complete.c - - rl_completion_matches: make sure xrealloc returns something non-null - (can happen when interrupted by a signal) before trying to add - matches to match_list - -subst.c - - array_remove_pattern: return NULL right away if array_variable_part - returns an invisible variable - - array_length_reference: handle array_variable_part returning an - invisible variable - - get_var_and_type: handle array_variable_part returning an invisible - variable - - 4/15 - ---- -execute_cmd.c - - execute_command_internal: make sure to run the EXIT trap for group - commands anywhere in pipelines, not just at the end. From a point - raised by Andreas Schwab - -variables.c - - bind_int_variable: make sure invisible flag is unset. Fixes problems - like "declare -ai a; : $(( a[4]=4 ));" - -arrayfunc.c - - array_variable_part: return variable even if invisible flag set, - callers must handle invisible vars - - 4/18 - ---- -builtins/set.def - - unset_builtin: if -n flag given, call unset_nameref instead of - unset_variable - -variables.c - - find_variable_nameref: print warning message if nameref circular - reference detected, return NULL and let caller deal with it - -builtins/declare.def - - declare_builtin: only disallow global references at this point if - we are at the global scope - - 5/16 - ---- -configure.ac - - update release status to beta - - 5/23 - ---- -trap.c - - run_pending_traps: save and restore pipeline around calls to - evalstring() in case we get a trap while running a trap. Have to - figure out the recursive running traps issue elsewhere. Fixes - bug reported by Roman Rakus - - run_pending_traps: make sure to set running_trap to the appropriate - signal value when running a trap command - - run_pending_traps: short-circuit immediately if running_trap set - when invoked. Could change this later to only skip if it would - run the same trap as currently being run (running_trap == sig + 1) - -configure.ac - - add warning if bison not found - -lib/readline/doc/rltech.texi - - new section with an example program illustrating the callback - interface. Suggested by Peng Yu - -examples/loadables/Makefile.in - - remove references to `cut' and `getconf', which were removed in - early March - - 5/28 - ---- -lib/sh/pathphys.c - - sh_realpath: correct inverted two arguments to call to sh_makepath. - Report and fix from Julien Thomas - - 6/7 - --- -execute_cmd.c - - executing_line_number: the else clauses that are conditional on - various options being defined can simply be if clauses -- they are - mutually exclusive and all have `return' in the body. Fixes bug - reported by Flavio Medeiros - - 6/25 - ---- -lib/readline/readline.c - - readline_internal_setup: only sent the meta-key enable string to the - terminal if we've been told to use one and the terminal has been - successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0). - Suggested by Dan Mick - -lib/readline/signals.c - - _rl_signal_handler: call any defined signal hook after calling - rl_resize_terminal when handling a SIGWINCH. We already have called - the original SIGWINCH handler but will not be resending the signal - to ourselves - - 6/27 - ---- -lib/readline/doc/history.3, doc/bash.1 - - fix description of the `$' modifier to note that it expands to the - last *word*, which is not always the last argument. Report from - ariyetz@gmail.com via gnu.org RT - - 6/29 - ---- -lib/glob/smatch.c - - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead - of 0 (0 if not defined) - -configure.ac,config.h.in - - --enable-glob-asciiranges-default: new option, controls the value of - GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on - by default - -doc/bashref.texi - - document new --enable-glob-asciiranges-default configure option - -variables.c - - assign_in_env: implement += value appending semantics for assignments - preceding command names - - 7/4 - --- -expr.c - - set lasttok = NUM in all of the functions that result in a number, - even if it's a boolean, to avoid errors with constructs like - 1 * x = 1, which should be an asignment error. Fixes problem - pointed out by Dan Douglas - -parse.y - - decode_prompt_string: don't bother to call strcpy if - polite_directory_format returns its argument unchanged. It's not - necessary and Mac OS X 10.9 aborts because of a supposed overlapping - string copy. Bug and fix from simon@hitzemann.org - -subst.c - - parameter_brace_find_indir: new function, code from - parameter_brace_expand_indir that looks up the indirectly-referenced - variable, but does not expand it - - parameter_brace_expand_indir: call parameter_brace_find_indir to - look up indirected variable reference - - get_var_and_type: call parameter_brace_find_indir if it looks like we - are trying to manipulate an indirect variable reference like - ${!b%%foo}. This makes a difference if !b references an array - variable. Bug report from Dan Douglas - - 7/6 - --- -lib/sh/casemod.c - - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX, - since cval can convert something to a wchar_t greater than UCHAR_MAX. - Fixes bug reported by Tomasz Tomasik - - 7/8 - --- -lib/readline/history.c - - add_history_time: if history_length == 0, referencing history_length - - 1 will result in an array bounds error, so make history_length be - at least 1 before going on. Fixes bug reported by Geng Sheng Liu - - -builtins/setattr.def - - show_func_attributes: display definition (if NODEFS argument is 0) and - attributes for a particular function; used by `declare -fp name' - -builtins/declare.def - - declare_internal: call show_func_attributes if -f supplied with -p. - Fixes inconsistency observed by Linda Walsh - -builtins/common.h - - new extern declaration for show_func_attributes - -builtins/read.def - - read_builtin: check the first supplied variable name for validity - before attempting to read any input, since we know we will have to - at least use that one. Don't check any other names yet. Suggested - by jidanni@jidanni.org - - 7/10 - ---- -redir.c - - do_redirection_internal: when closing a file descriptor with - r_close_this ([n]<&-) count close errors as redirection errors if - errno ends up as EIO or ENOSPC. Originally reported back in April - 2012 by Andrey Zaitsev - - 7/11 - ---- -redir.c - - do_redirection_internal: before calling check_bash_input, make sure - that we don't call check_bash_input for an asynchronous process that - is replacing stdin with something else. The seek backwards affects - the parent process as well, since parents and children share the - file pointer. Fixes problem originally reported in March 2013 by - Martin Jackson - - 7/13 - ---- -doc/{bash.1,bashref.texi} - - slight change to add a description of `shopt -o' suggested by Bruce - Korb - - 7/19 - ---- -lib/readline/histfile.c - - history_do_write: if close returns < 0, make sure we restore the - backup history file and return a non-zero value - - history_truncate_file: if write or close return < 0, make sure we - return a non-zero value - -[bash-4.3-beta frozen] - - 7/21 - ---- -lib/readline/isearch.c - - rl_display_search: now takes an entire search context flags word as - the second argument, instead of just reverse flag; changed callers - - rl_display_search: if the search has failed, add `failed ' to the - beginning of the search prompt - - _rl_isearch_dispatch: if the search has failed, display the entire - search string with an indication that the search failed but with the - last matching line. Suggested by jidanni@jidanni.org - -command.h - - W_ASSIGNINT: new word flag; used internally for make_internal_declare - and set by fix_assignment_words - -execute_cmd.c - - fix_assignment_words: set W_ASSIGNINT if compound assignment and -i - given as option. We don't do anything with the value yet - -subst.c - - shell_expand_word_list: rework the way the option list that is - passed to make_internal_declare is created - - 8/1 - --- -doc/{bash.1,bashref.texi} - - minor changes to description of $! based on a report from Chris - Down - -arrayfunc.c - - assign_array_element_internal: before trying to get an array's max - index to process a negative subscript, make sure the array exists. - Bug report from Geir Hauge - - 8/2 - --- -arrayfunc.c - - assign_array_element_internal: before using array_max_index() when - processing a negative subscript, make sure the variable is an array. - if it's not, use 0 as array_max_index assuming it's a string. - Fixes bug report from Geir Hauge - - 8/3 - --- -Makefile.in - - pcomplete.o: add dependency on $(DEFDIR)/builtext.h. Suggested by - Curtis Doty - - 8/5 - --- -lib/glob/sm_loop.c - - strcompare: short-circuit and return FNM_NOMATCH if the lengths of the - pattern and string (pe - p and se - s, respectively) are not equal - - strcompare: don't bother trying to set *pe or *se to '\0' if that's - what they already are. Fixes bug reported by Geir Hauge - - - 8/6 - --- -doc/{bash.1,bashref.texi},builtins/hash.def,lib/readline/doc/rluser.texi - - minor typo changes from Geir Hauge - -bultins/help.def - - show_longdoc: avoid trying to translate the empty string because it - often translates to some boilerplate about the project and - translation. Report and fix from Geir Hauge - - 8/8 - --- -builtins/help.def - - help_builtin: try two passes through the list of help topics for each - argument: one doing exact string matching and one, if the first pass - fails to find a match, doing string prefix matching like previous - versions. This prevents `help read' from matching both `read' and - `readonly', but allows `help r' to match everything beginning with - `r'. Inspired by report from Geir Hauge - - 8/13 - ---- -builtins/fc.def - - fc_builtin,fc_gethnum: calculate `real' end of the history list and - use it if -0 is specified as the beginning or end of the history - range to list. Doesn't work for fc -e or fc -s by design. Feature - requested by Mike Fied - - 8/16 - ---- -trap.c - - _run_trap_internal: use {save,restore}_parser_state instead of - {save,restore}_token_state. It's more comprehensive - - 8/23 - ---- -doc/bash.1 - - disown: remove repeated text. Report and fix from Thomas Hood - - - 8/25 - ---- -lib/readline/rltty.c - - set_special_char: fix prototype (last arg is rl_command_func_t *) - -sig.c - - set_signal_handler: return oact.sa_handler only if sigaction - succeeds; if it doesn't, return SIG_DFL (reasonable default). From - https://bugzilla.redhat.com/show_bug.cgi?id=911404 - -bashline.c - - attempt_shell_completion: fix to skip assignment statements preceding - command name even if there are no programmable completions defined. - From https://bugzilla.redhat.com/show_bug.cgi?id=994659 - - attempt_shell_completion: if still completing command word following - assignment statements, do command completion even if programmable - completion defined for partial command name entered so far - - 8/26 - ---- -pcomplete.c - - pcomp_filename_completion_function: make sure rl_filename_dequoting_function - is non-NULL before trying to call it. Bug and fix from - Andreas Schwab - -bashline.c - - bash_command_name_stat_hook: if *name is not something we're going - to look up in $PATH (absolute_program(*name) != 0), just call the - usual bash_filename_stat_hook and return those results. This makes - completions like $PWD/exam[TAB] add a trailing slash - - 9/2 - --- -builtins/read.def - - read_builtin: before comparing what we read to the delim, make sure - we are not supposed to be ignoring the delimiter (read -N). We - set the delim to -1, but it's possible to read a character whose - int value ends up being between -1 and -128. Fixes bug - reported by Stephane Chazelas - -doc/{bash.1,bashref.texi} - - word splitting: crib some language from Posix to make it clear that - characters in IFS are treated as field *terminators*, not field - *separators*. Addresses issue raised by DJ Mills - - -lib/readline/{util.c,rldefs.h} - - _rl_stricmp,_rl_strnicmp: now take const char * string arguments; - changed prototype declarations - - 9/5 - --- -doc/{bash.1,bashref.texi} - - [[: modify description of pattern matching to make it clear that the - match is performed as if the extglob option were enabled. From Red - Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=1002078 - - 9/12 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: if we read an ESC and it's supposed to - terminate the search, make sure we check for typeahead with - _rl_pushed_input_available, since installing a hook function causes - typeahead to be collected in `ibuffer' (input.c). If there is any, - make sure we still use the ESC as a prefix character. Bug and fix - from Mike Miller - - 9/16 - ---- -builtins/{caller,cd,kill,pushd,wait}.def - - builtin_usage(): make sure call to this sets return status to - EX_USAGE - - 9/18 - ---- -terminal.c - - rl_change_environment: new application-settable variable; if non- - zero (the default), readline will modify LINES and COLUMNS in the - environment when it handles SIGWINCH - - _rl_get_screen_size: if rl_change_environment is non-zero, use setenv - to modify LINES and COLUMNS environment variables - -readline.h - - rl_change_environment: new extern declaration for applications - - 9/22 - ---- -configure.ac - - relstatus: bumped version to bash-4.3-beta2 - - 9/24 - ---- - -lib/readline/readline.c - - bind_arrow_keys_internal: added more key bindings for the numeric key - pad arrow keys on mingw32. Patch from Pierre Muller - - - 10/19 - ----- - -bashline.c - - maybe_restore_tilde: version of restore_tilde that honors `direxpand'; - calls restore_tilde after saving directory expansion hook if - necessary. Report from Andreas Schwab - -builtins/cd.def - - -@: new option, allows cd to use `extended attributes' present in - NFSv4, ZFS; idea taken from ksh93. Attributes associated with a - file are presented as a directory containing the attributes as - individual files. Original patch contributed by Cedric Blancher - - - 10/20 - ----- -aclocal.m4 - - BASH_CHECK_MULTIBYTE: check for wcwidth being broken with unicode - combining characters needs a value to use when cross-compiling. - Bug report from Bert Sutherland - -doc/{bash.1,bashref.texi} - - document new -@ option to cd builtin - - 10/28 - ----- -lib/glob/{{gmisc,glob}.c,glob.h} - - extglob_pattern renamed to extglob_pattern_p, declared in glob.h - -subst.c - - expand_word_internal: typo fix: case to fix " $@\ " bug in bash-4.2 - had a typo (& isexp instead of &&) - - 10/29 - ----- -input.c - - getc_with_restart: make sure local_index and local_bufused are - reset to 0 before returning EOF, in case we are running an interactive - shell without line editing and ignoreeof is set. Report and fix - from Yong Zhang - -lib/readline/search.c - - _rl_nsearch_init: take out extra third argument to rl_message; it - only matches prototype (and maybe format) in cases where - PREFER_STDARG and USE_VARARGS are both undefined, which is rare - - 10/31 - ----- -subst.c - - process_substitute: when opening the named pipe in the child, open - without O_NONBLOCK to avoid race conditions. Happens often on AIX. - Bug report and fix from Michael Haubenwallner - - -builtins/ulimit.def - - RLIMIT_NTHR: if RLIMIT_PTHREAD is not defined, but RLIMIT_NTHR is, - use RLIMIT_NTHR (NetBSD) - - 11/5 - ---- -locale.c - - set_default_locale_vars,set_locale_var: if TEXTDOMAINDIR has been - set, and default_dir has a non-null value, call bindtextdomain(3) - when TEXTDOMAIN is assigned a value. Fixes problem reported by - Michael Arlt - - 11/6 - ---- -builtins/cd.def - - cdxattr: only create synthetic pathname in `buf' if NDIRP argument - is non-null - - change_to_directory: if we have specified -@ and cdxattr returns - failure, fail immediately. Fixes bug reported by Joshuah Hurst - - - 11/12 - ----- -redir.c - - print_redirection: change r_err_and_out (&>) and its append form, - r_append_err_and_out (&>>) cases to separate redirection operator - from filename by a space, in case we have a process substitution. - Fixes bug reported by admn ombres - - 11/15 - ----- -execute_cmd.c - - execute_simple_command: don't close process substitution fds until - we are finished executing any current shell function. Partial fix - for bug reported by John Dawson - -support/shobj-conf - - add support for Darwin 13 (Mac OS X 10.9, Mavericks). Based on a - report by Ludwig Schwardt - - 11/20 - ----- -[bash-4.3-rc1 frozen] - - 11/24 - ----- -builtins/printf.def - - bind_printf_variable: make sure that the variable assigned to is - no longer marked as invisible. Fixes bug reported by NBaH - - - 11/28 - ----- -jobs.c - - delete_old_job: fix off-by-one error in job index in call to - internal_warning. Bug report from Peter Cordes - - 11/30 - ----- -doc/bashref.texi - - add string to description of special parameters with name of - special parameter prefixed by a $, so you can search for $#, - for instance - - 12/2 - ---- -lib/readline/{histexpand.c - - get_history_event: account for current_history() possibly returning - NULL. Report and fix from Pankaj Sharma - - - 12/11 - ----- - -lib/readline/parse-colors.c - - get_funky_string: don't call abort if we see something we can't - parse; just return an error - - _rl_parse_colors: if we encounter an error while parsing $LS_COLORS - we need to leave _rl_color_ext_list as NULL after freeing its - elements, then turn off _rl_colored_stats. Report and fix from Martin - Wesdorp - - 12/13 - ----- - -lib/readline/parse-colors.c - - _rl_parse_colors: if we encounter an unrecognized prefix, throw an - error but try to recover and go on to the next specification - -variables.c - - make_local_variable: for new variables this function creates, set - the att_invisible attribute. All callers from declare_internal. - Indirectly, this is a fix for bug with `declare -n var; var=foo;' - reported by Pierre Gaston - - bind_variable: if assigning to nameref variable that doesn't have - a value yet (e.g., with `declare -n var; var=foo'), don't try to - use the unset name. Fixes a segfault reported by Pierre Gaston - - -execute_cmd.c - - execute_command_internal: make sure last_command_exit_value is set - to 0 after any command executed in the background. Fixes bug - reported by Martin Kealey - - 12/17 - ----- -support/config.{guess,sub} - - updated to latest versions from git - - 12/19 - ----- -parse.y - - struct STRING_SAVER: now has a new `flags' element, to identify the - caller: alias expansion, double-paren parsing, or parse_and_execute - - push_string: now sets flags to PSH_ALIAS if `ap' argument is non-NULL - - push_string: now doesn't attempt to call strlen on a NULL string to - set shell_input_line_size - - parser_expanding_alias, parser_save_alias, parser_restore_alias: new - functions to provide an external interface to push_string and - pop_string; parser_save_alias sets flags element to PSH_SOURCE (could - be renamed PSH_EXTERN someday) - - shell_getc: when yy_getc returns '\0', instead of just testing - whether the pushed_string_list is not-empty before popping it, don't - pop if if the saved string has flags PSH_SOURCE, indicating that - parse_and_execute set it before setting bash_input to the string. - We should continue reading to the end of that string before popping - back to a potential alias. Partial solution for the problem of aliases - with embedded newlines containing `.' commands being executed out of - order reported by Andrew Martin - - shell_getc: when yy_getc returns '\0' and there is a saved string of - type PSH_SOURCE, restart the read without popping the string stack - if we have not read to the end of bash_input.location.string. Rest - of fix for out-of-order execution problem - -externs.h - - parser_expanding_alias, parser_save_alias, parser_restore_alias: new - extern function declarations - -builtins/evalstring.c - - pe_prologue: if the parser is expanding an alias, make sure to add - an unwind-protect to restore the alias; undoes the work that will be - performed by parse_and_execute/parse_string - - parse_and_execute,parse_string: after calling push_stream to save - bash_input, check whether or not the parser is currently expanding - an alias (parser_expanding_alias() != 0). If it is, we want to save - that string in the pushed_string_list, which we do with - parser_save_alias. - - 12/23 - ----- -execute_cmd.c - - execute_for_command: make sure to set line_number before expanding - the word list, so expansion errors have the right line number. - From a report from Ben Okopnik - -expr.c - - exp2: save token pointer before calling readtok(), arrange to use - saved token pointer when printing error token on a division by 0 - error - - 12/27 - ----- -lib/readline/display.c - - rl_redisplay: when calculating effects of invisible characters in a - prompt that is split across physical screen lines to set the indices - of linebreaks, don't bother testing local_prompt_prefix (line 751). - That prefix doesn't matter when calculating prompt visible and - invisible characters. Fixes problem reported by Jinesh Choksi - - -Makefile.in - - install: make sure to use $(DESTDIR) when installing OTHER_DOCS. - Report and fix from Matthias Klose - -doc/texinfo.tex - - updated to version of 2013-09-11 - - 12/28 - ----- -lib/readline/undo.c - - rl_do_undo: if we are undoing from a history entry (rl_undo_list == - current_history()->data), make sure the change to rl_line_buffer is - reflected in the history entry. We use the guts of - rl_maybe_replace_line to do the work. Fixes problem reported by - gregrwm - - 12/30 - ----- -sig.c - - sigint_sighandler: if we get a SIGINT (and this signal handler is - installed) while the wait builtin is running, note that we received - it in the same way as jobs.c:wait_sigint_handler and return. The - various wait_for functions will look for that with CHECK_WAIT_INTR. - This fixes the wait builtin not being interruptible in an interactive - job control shell - - 12/31 - ----- -trap.c - - set_signal_hard_ignored: rename set_signal_ignored to this, since it - both sets original_signals[sig] and sets the HARD_IGNORE flag - - set_signal_ignored: new function, now just sets original_signals[sig] - -trap.h - - set_signal_hard_ignored: new external declaration - -sig.c - - initialize_terminating_signals: call set_signal_hard_ignored instead - of set_signal_ignored for signals with disposition SIG_IGN when the - shell starts - -execute_cmd.c - - setup_async_signals: make sure we get the original dispositions for - SIGINT and SIGQUIT before starting the subshell, and don't call - set_signal_ignored because that sets original_signals[sig]. If we - don't, subsequent attempts to reset handling using trap will fail - because it thinks the original dispositions were SIG_IGN. Posix - interpretation 751 (http://austingroupbugs.net/view.php?id=751) - - 1/2/2014 - -------- -lib/sh/stringvec.c - - strvec_mcreate, strvec_mresize: versions of create and resize that - use malloc and realloc, respectively, instead of xmalloc/xrealloc - -braces.c - - expand_amble,mkseq: use strvec_mcreate/strvec_mresize so we can - catch and handle memory allocation failures instead of aborting - with the xmalloc/xrealloc interface - -lib/sh/strdup.c - - strdup replacement function for ancient systems that don't have it - -lib/sh/itos.c - - mitos: new function, itos that uses strdup instead of savestring - -externs.h - - strvec_mcreate/strvec_mresize: new extern declarations - - mitos: new extern declaration - -configure.ac - - bash version moved to 4.3-rc2 - - 1/6 - --- -doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} - - separate the description of what happens when readline reads the - tty EOF character from the description of delete-char, leaving a - note in the delete-char description about common binding for ^D. - From suggestion by Parke - -lib/readline/doc/{version.texi,history.3,*.texi} - - updated email addresses and copyright dates - - 1/7 - --- -variables.c - - delete_var: new function, just removes a variable from a hash table - and frees it, without doing anything else - - make_variable_value: if we are trying to assign to a nameref variable, - return NULL if the value is null or the empty string or not a valid - identifier - -variables.h - - delete_var: new extern declaration - -subst.h - - ASS_NAMEREF: new define for assignments, means assigning to a nameref - variable - -builtins/declare.def - - declare_internal: if we are creating and assigning to a nameref - variable, make sure the value is a valid variable name (checks done - by make_variable_value via bind_variable_value) and display an - error message, deleting the variable we just created, if it is not. - Fixes bug reported by Peggy Russell - - 1/9 - --- -builtins/declare.def - - declare_internal: turning on nameref attribute for an existing - variable turns off -i/-l/-u/-c attributes (essentially the ones - that cause evaluation at assignment time) for ksh93 compat - -builtins/setattr.def - - show_name_attributes: if asked to display attributes and values for - a nameref variable, don't follow the nameref chain to the end. More - ksh93 compat - - 1/10 - ---- -trap.c - - _run_trap_internal: use {save,restore}_parser_state instead of - {save,restore}_token_state, like in run_pending_traps(); don't - need to save and restore last_command_exit_value as a result - - _run_trap_internal: call {save,restore}_pipeline like in - run_pending_traps() - - run_pending_traps: since we no longer run traps in a signal handler - context, do not block and unblock the trapped signal while the - trap is executing - - run_pending_traps: allow recursive invocations (basically, running - traps from a trap handler) with only a warning if the shell is - compiled in debug mode. If a caller doesn't want this to happen, - it should test running_trap > 0. signal_in_progress (sig) only works - for the signals the shell handles specially - -bashline.c - - bash_event_hook: make sure we clean up readline if interrupt_state - is set, not only when SIGINT is not trapped. check_signals_and_traps - will call check_signals, which calls QUIT, which will longjmp back - to top_level, running the interrupt trap along the way. Fixes the - problem of signal handlers being reset out from under readline, and - not being set properly the next time readline is called, because - signals_set_flag is still set to 1. XXX - might need to do this - for other signals too? - - 1/11 - ---- -subst.h - - SD_GLOB: new define for skip_to_delim; means we are scanning a - glob pattern. - -subst.c - - skip_to_delim: if flags include SD_GLOB, assume we are scanning a - glob pattern. Currently only used to skip bracket expressions - which may contain one of the delimiters - - 1/12 - ---- -subst.c - - parameter_brace_expand: when expanding $@ as part of substring - expansion, pattern substitution, or case modification, don't turn - on the QUOTED_NULL flag. The code that constructs the word to be - returned from expand_word_internal expects a different code path - when $@ is being expanded. Fixes bug reported by Theodoros - V. Kalamatianos - - 1/19 - ---- -subst.c - - list_dequote_escapes: new function; analogue of list_quote_escapes - -pathexp.c - - quote_string_for_globbing: fix case where unescaped ^A is last char - in string; need to pass it through unaltered instead of turning it - into a bare backslash - - quote_string_for_globbing: when quoting for regexp matching in [[, - don't treat backslash as a quote character; quote the backslash as - any other character. Part of investigation into reports from - Eduardo A. Bustamante López - - 1/25 - ---- -builtins/gen-helpfiles.c - - write_helpfiles: add prototype - - make sure to #undef xmalloc/xfree/xrealloc/free if USING_BASH_MALLOC - is defined. the code does not use them, and we don't link against - xmalloc.o. Report from Linda Walsh - -Makefile.in - - variables.o: add dependency on builtins/builtext.h; helps with - parallel builds. Report from Linda Walsh - -support/shobj-conf - - darwin: combine the stanzas into one that will not require them to - be updated on each Mac OS X release. Report and fix from Max Horn - - - 1/27 - ---- -support/shobj-conf - - darwin: changed the install_name embedded into the shared library - to contain only the major version number, not the minor one. The - idea is that the minor versions should all be API/ABI compatible, - and it is better to link automatically with the latest one. Idea - from Max Horn - - 1/29 - ---- -[bash-4.3-rc2 released] - - 1/30 - ---- -lib/readline/readline.h - - rl_clear_history, rl_free_keymap: add extern declarations. Report - from Hiroo Hayashi - -general.c - - include trap.h for any_signals_trapped() prototype - -lib/sh/unicode.c - - include for sprintf prototype - - 1/31 - ---- -execute_cmd.c - - execute_simple_command: only posix-mode shells should exit on an - assignment failure in the temporary environment preceding a special - builtin. This is what the documentation and code comments have - always said - - execute_simple_command: make sure redirection errors, word expansion - errors, and assignment errors to Posix special builtins cause a - non-interactive posix mode shell to exit. Previously the shell - would not exit if the failed special builtin was on the LHS of || - or && - -pathexp.c - - quote_string_for_globbing: when quoting a regular expression - (QGLOB_REGEXP), allow an unquoted backslash to pass through - unaltered. Don't use it as a quote character or quote it. More - investigation from 1/24 and report by Mike Frysinger - - - quote_string_for_globbing: when quoting a regular expression - (QGLOB_REGEXP), turn CTLESC CTLESC into CTLESC without adding a - backslash to quote it. We should not have to quote it because it is - not a character special to EREs. More investigation from 1/24 - -lib/glob/glob.c - - glob_testdir: now takes a second flags argument (currently unused); - changed prototype and callers - - 2/1 - --- -lib/glob/glob.c - - glob_testdir: if flags argument includes GX_ALLDIRS (globstar), use - lstat so we skip symlinks when traversing the directory tree. - Originally reported by Chris Down - - 2/2 - --- -lib/readline/undo.c - - rl_do_undo: make sure CUR is non-zero before dereferencing it to - check cur->data against rl_undo_list. Report and fix from - Andreas Schwab - -doc/{bash.1,bashref.texi} - - added slight clarifying language to the description of $*, - describing what happens when the expansion is not within double - quotes - - 2/4 - --- -test.c - - unary_test: add code to -v case so that it interprets `bare' array - references (foo[1]) and returns true if that index has a value - - 2/5 - --- -trap.c - - restore_default_signal: fix SIGCHLD special case for SIG_TRAPPED flag - off but SIG_INPROGRESS mode set and handler IMPOSSIBLE_TRAP_HANDLER; - continue with resetting handler in this case. maybe_set_sigchld_trap - will check these things before resetting sigchld trap from - run_sigchld_trap. Fixes (apparently long-standing?) problem reported - by Alexandru Damian - - 2/6 - --- -lib/sh/strtrans.c - - ansic_quote: fixed a bug when copying a printable character that - consumes more than one byte; byte counter was not being incremented. - Bug report from jidanni@jidanni.org - - 2/7 - --- -input.c - - getc_with_restart: if read(2) returns -1/EINTR and interrupt_state or - terminating_signal is set (which means QUIT; will longjmp out of this - function), make sure the local buffer variables are zeroed out to - avoid reading past the end of the buffer on the next call. Bug report - from Dan Jacobson - - 2/9 - --- -bashline.c - - command_word_completion_function: if a directory in $PATH contains - quote characters, we need to quote them before passing the candidate - path to rl_filename_completion_function, which performs dequoting on - the pathname it's passed. Fixes bug reported by Ilyushkin Nikita - - - 2/11 - ---- -parse.y - - xparse_dolparen: save and restore shell_eof_token around call to - parse_string, intead of just leaving it set to ')' - - shell_getc: when -v is set, only print the command line when - shell_eof_token is 0, so we don't print it multiple times when - recursively entering the parser to parse $(...) commands. Fixes - bug reported by Greg Wooledge - -[changed release status to 4.3-release] - - 2/13 - ---- -lib/sh/strtrans.c - - ansic_quote: handle case where mbrtowc reports that the multibyte - sequence is incomplete or invalid. Fixes bug reported by - Eduardo A. Bustamante López - - 2/14 - ---- -variables.c - - find_variable_nameref_context: fix a problem that caused the loop - to go one context too close to the global context. In some cases, - simple variable assignment would set a variable in the global - context instead of a local context. Bug report from - Geir Hauge - - 2/26 - ---- -[bash-4.3 released] - - 2/27 - ---- -aclocal.m4 - - broken wcwidth check: fix typo reported by David Michael - - - 2/28 - ---- -support/bashbug.sh - - add ${BUGADDR} to error message printed if sending mail fails - -trap.c - - _run_trap_internal: don't call {save,restore}_pipeline if running - DEBUG trap; run_debug_trap calls them itself. Fixes bug reported - by Moe Tunes - -test.c - - unary_test: fix 'R' case by using find_variable_noref instead of - find_variable - - test_unop: add back missing 'R' case. Fixes bug reported by - NBaH - - 3/2 - --- -jobs.c - - end_job_control: if job control is active, we changed the terminal's - process group, so make sure we restore it. Fixes bug reported by - Eduardo A. Bustamante López - - 3/7 - --- -pcomplete.c - - pcomp_curtxt: new variable, holds the original text to be completed - as passed to the programmable completion code - - pcomp_filename_completion_function: if we are running compgen - (presumably in a shell function completion) and performing readline - completion, check the word being completed. If it's not empty, but - the original word passed to the programmable completion code is an - empty string (""), call a dequoting function if one is available. - This compensates for an assumption in bash-completion. Reported by - Albert Shih - -lib/readline/readline.c - - _rl_dispatch_subseq: when deciding whether or not to set vi mode's - idea of the last command, use whether or not the dispatching keymap - is vi_movement_keymap instead of the key sequence length. The `c', - `d', and `y' commands all take motion commands as `arguments' and - will produce key sequences longer than 1 character. The arrow keys - will end up dispatching out of a different keymap, so the test will - prevent arrow keys from setting the last command (the problem in - bash-4.2). Bug report from Daan van Rossum - -lib/readline/vi_mode.c - - _rl_vi_motion_command: convenience function to test whether a key is - a vi-mode motion command - -lib/readline/rlprivate.h - - _rl_vi_motion_command: extern declaration - -parse.y - - parse_matched_pair: we should not skip processing single quotes in - posix mode if dolbrace_state == DOLBRACE_QUOTE2 (pattern - substitution). Fixes bug reported by David Sines - - - 3/10 - ---- -lib/readline/readline.c - - _rl_dispatch_callback: treat a return value of -1 as the end of - a command dispatch sequence if the current context doesn't - indicate that we're reading a multi-key sequence - ((cxt->flags & KSEQ_SUBSEQ) == 0). Turn off the multikey flag - and free the context chain in this case. Fixes one bug reported - by Felix Yan to bug-readline list - - _rl_dispatch_callback: treat a return value of > 0 the same as 0 - and return from the function, since only values < 0 cause us to - simulate recursion. Rest of fix for bug tracked down by - Anatol Pomozov - - 3/11 - ---- - -execute_cmd.c - - execute_in_subshell: if a longjmp occurs, set result to - EXECUTION_FAILURE only if last_command_exit_value == EXECUTION_SUCCESS; - use value of last_command_exit_value otherwise. Fixes cosmetic - issue reported by Dennis Lambe Jr. - -doc/bash.1 - - shell-kill-word and shell-backward-kill-word should be documented - as unbound by default. Report from Oliver Hartley - - -trap.c - - run_pending_traps: save value of $? before running trap commands in - trap_saved_exit_value, like run_exit_trap - - _run_trap_internal: save value of $? before running trap commands in - trap_saved_exit_value, like run_exit_trap - -builtins/common.c - - get_exitstat: when running `return' in a trap action, and it is not - supplied an argument, use the saved exit status in - trap_saved_exit_value. Fixes Posix problem reported by - Eduardo A. Bustamante López - - 3/13 - ---- -lib/sh/shquote.c - - sh_contains_quotes: new function, returns true if a given string - contains any of the shell quote characters (single quote, double - quote, or backslash) - -externs.h - - sh_contains_quotes: new extern declaration - -pcomplete.c - - pcomp_filename_completion_function: more changes for the benefit of - bash-completion: if the argument is not the same as the original - argument passed to the programmable completion code (pcomp_curtxt), - and we are being run by compgen as part of a completion, dequote the - argument as bash-completion expects. Fix for the complete-word- - with-quoted-special-chars problem with bash-completion - - 3/17 - ---- -execute_cmd.c - - execute_intern_function: when in posix mode, make defining a function - with the same name as a special builtin a fatal error only when the - shell is not interactive. Interactive shells display an error - message and go on. From a discussion with Doug McIlroy - - - 3/18 - ---- -arrayfunc.c - - assign_compound_array_list: when using expand_assignment_string_to_string - to expand the value in a ( [x]=y ) compound assignment, make sure - that we convert 0x0 to "" when expanding [x]= so it doesn't appear as - if the index is unset. Fixes bug reported by Geir Hauge - - -builtins/common.c - - get_exitstat: update fix of 3/11 to allow the DEBUG trap to use the - current value of $? instead of the value it had before the trap - action was run. This is one reason the DEBUG trap exists, and - extended debug mode uses it. Might want to do this only in Posix - mode - -doc/{bash.1,bashref.texi} - - return: add language cribbed from Posix saying what happens when - return is run without an argument from a trap, including the DEBUG - trap exception - - 3/19 - ---- -lib/glob/gmisc.c - - extglob_pattern_p: make sure ?(patlist) is flagged as an extglob - pattern - -lib/glob/glob.c - - extglob_skipname: rewrite to handle patterns that begin but do not - end with an extglob pattern; change test for easy case and loop - through patterns accordingly. Fixes problem with matching filenames - with a leading dot reported by Stephane Chazelas - - - wextglob_skipname: make analogous changes - - 3/20 - ---- -Makefile.in - - pass -DDEBUG down to builds in readline and history directories - -lib/readline/util.c - - _rl_trace and related functions are now only compiled in if DEBUG - is defined - -lib/readline/Makefile.in - - substitute @DEBUG@ and pass -DDEBUG, if necessary, to compilation - in LOCAL_CFLAGS - - 3/21 - ---- -parse.y - - shell_getc: when checking whether or not to reallocate - shell_input_line to add trailing newline, don't try to subtract from - shell_input_line_size. size_t is unsigned, so if its value is less - than 3 (like, say, 2), size-3 is a very large number and the string - will not be reallocated. Use len+3 > size instead of len > size-3. - Fixes bug reported in - https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1295467 - - 3/27 - ---- -lib/readline/display.c - - _rl_clean_up_for_exit: don't bother to call _rl_move_vert to whatever - readline thinks the last displayed line is if it's 0. Two reasons: a - minor optimization, and it protects against unwanted moving if this - function is called twice, as it is when ^C is pressed. Fixes bug - reported by Egmont Koblinger - - 3/28 - ---- -bashline.c - - invalid_completion: new function, used to identify attempts to - complete words that are syntax errors - - attempt_shell_completion: if invalid_completion returns true for a - word in a command position, punt on all completions. Fixes cosmetic - issue reported by Uwe Storbeck - - attempt_shell_completion: add clause so that in_command_position - remains set to 1 for an empty word following a command separator like - (, &, or | - -lib/readline/kill.c - - rl_yank, rl_yank_nth_arg_internal: don't return -1 from bindable - functions, return 1 instead - -lib/readline/text.c - - rl_rubout, _rl_rubout_char, rl_delete, rl_change_case, - rl_transpose_chars, rl_transpose_words, _rl_set_mark_at_pos, - rl_exchange_point_and_mark, _rl_insert_next, _rl_char_search, - _rl_char_search_internal: - don't return -1 from bindable functions, return 1 instead - -lib/readline/vi_mode.c - - rl_vi_end_word, rl_vi_rubout, rl_vi_delete, rl_vi_char_search, - rl_vi_match, _rl_vi_set_mark, _rl_vi_goto_mark: - don't return -1 from bindable functions, return 1 instead - -lib/readline/macro.c - - rl_start_kbd_macro, rl_end_kbd_macro: - don't return -1 from bindable functions, return 1 instead - -builtins/setattr.def - - set_var_attribute: honor setting of no_invisible_vars when setting - att_invisible on a variable - - include "../flags.h" for no_invisible_vars - -builtins/declare.def - - declare_internal: honor setting of no_invisible_vars when setting - att_invisible on a variable - - include "../flags.h" for no_invisible_vars - -Makefile.in,builtins/Makefile.in - - make sure declare.o and setattr.o depend on flags.h - -execute_cmd.c - - decpoint: new function, returns locale's decimal point or `.' default - - mkfmt: use decpoint() to get decimal point instead of unconditionally - using `.'. Fixes bug reported by Andrey Tataranovich - in debian bug 741669 - - 4/10 - ---- -lib/readline/rltypedefs.h - - add back old Function/VFunction/etc typedefs, since other packages - (python, samba) use them. Mark as deprecated using gcc and clang - attributes. Report and fix from Max Horn - - 4/14 - ---- -jobs.c - - run_sigchld_trap: unwind-protect value of this_shell_builtin, since - it matters in some cases whether or not we are running `wait' or - `eval'. Fixes bug reported by Eduardo A. Bustamante López - - - 4/18 - ---- -shell.h - - sh_parser_state_t: add `need_here_doc' flags member, since - xparse_dolparen (via parse_command) sets it to 0 - -parse.y - - gather_here_documents: make sure need_here_doc is > 0, since we - don't want to just decrement it forever if it ends up < 0. Partial - fix for bug reported by Jared Yanovich - - {save,restore}_parser_state: save and restore need_here_doc flag. - Rest of fix for bug reported by Jared Yanovich - - 4/19 - ---- -subst.c - - cond_expand_word: since we are not supposed to be performing word - splitting here, set expand_no_split_dollar_star to 1 in addition to - setting W_NOSPLIT2 - - expand_word_internal: if we have a case where we have an unquoted - $@ but we are in a case where we don't want to split (W_NOSPLIT2), - make sure we return a list consisting of a single word with the - arguments separated by spaces and don't do word splitting. Fixes - bug reported by Greg Wooledge from an IRC - discussion - -builtins/hash.def - - print_portable_hash_info: single-quote pathnames and hashed filenames - that contain shell metacharacters. Fixes bug reported by - in debian bash bug #739853 - - 4/20 - ---- -lib/readline/display.c - - When using horizontal scrolling, the redisplay code erases too much - of the line containing successful results, so make sure we only - erase to the end of the line after making sure we move the cursor - to the end. Fixes bug reported by - - 4/23 - ---- -{bashhist,bashline}.c -builtins{bind,help,type}.def -lib/glob/glob.c, lib/intl/{loadmsgcat,localealias}.c,lib/sh/mktime.c - - fixes to memory leaks uncovered by coverity scan - - 4/24 - ---- -{bashhist,subst,redir,assoc,jobs,array,trap}.c -lib/intl/l10flist.c -builtins/complete.def - - fixes to memory leaks and other resource usage problems uncovered by - coverity scan - -redir.c - - do_redirection_internal: if dup2 fails (presumably because of a - resource limit), close the file descriptor we opened before returning - error - - 4/25 - ---- -config-top.h - - DEFAULT_BASHRC: new define with the name of the default shell - startup file - -bashline.c - - bash_directory_completion_matches: don't dequote the directory name. - If rl_completion_found_quote is non-zero, readline will dequote the - filename itself. Fixes bug reported by Clark Wang - - - 4/27 - ---- -subst.c - - parameter_brace_expand_rhs: if parameter_brace_find_indir returns - NULL or "", or if it returns something that is not a valid identifier, - report an error and return &expand_wdesc_error so the error can - propagate up. Fixes bug reported by Andre Holzhey - - - 4/29 - ---- -subst.c - - parameter_brace_substring: don't short-circuit right away if the - value is NULL but we are looking at the positional parameters. Part - of fix for bug reported by Pierre Gaston - - pos_params: if there are no positional parameters, only short-circuit - if we are looking for $1 and above. Rest of fix for bug reported - by Pierre Gaston - -subst.h - - SD_NOPROCSUB: new flag for skip_to_delim, means to not allow any - process subsitutions (should not have overloaded SD_NOSKIPCMD) - -subst.c - - skip_to_delim: honor SD_NOPROCSUB flag - -make_cmd.c - - make_arith_for_expr: set W_NOPROCSUB flag in the created word - - make_arith_for_command: set SD_NOPROCSUB in the flags argument to - skip_to_delim so we don't treat <( or >( as a process substitution - (we won't evaluate them in eval_arith_for_expr anyway). Fixes - bug reported by Pierre Gaston - - 5/1 - --- -lib/glob/gmisc.c - - glob_dirscan: new function, takes a pattern and a directory separator - argument and advances the pattern to the last occurrence of the - separator. Like strrchr, but understands extended glob patterns and - uses glob_patscan to skip over them - -lib/glob/glob.c - - extglob_skipname: if the extended globbing pattern is invalid, don't - skip the name - - glob_filename: if there is a slash in the pattern to be matched, and - extglob is enabled, use glob_dirscan to find the real last occurrence - of `/' to avoid being confused by slashes in extglob patterns. Fix - for bug reported by Pierre Gaston - - 5/6 - --- -variables.c - - make_local_variable: only set the att_invisible attribute if - no_invisible_vars isn't set - - find_variable_for_assignment: new function, intended to be called by - code that eventually wants to assign a value to the variable; will not - skip invisible variables; currently identical to find_variable - - find_variable_no_invisible: new function, finds the first visible - instance of variable with a given name in the variable context chain; - eventually will be used to replace find_variable; separate right now - for testing - -variables.h - - find_variable_for_assignment: extern declaration - - find_variable_no_invisible: extern declaration - - 5/7 - --- -variables.c - - make_local_variable: don't clear `invisible' attribute if we are - returning an existing local variable at the right context. Let the - upper layers do that. Fixes bug reported by Dan Douglas - - - 5/8 - --- -lib/readline/input.c - - rl_getc: call RL_CHECK_SIGNALS if a read(2) is interrupted (-1/EINTR) - by SIGALRM or SIGVTALRM (placeholder for non-keyboard-generated - signals of interest) - -builtins/read.def - - edit_line: call bashline_set_event_hook and - bashline_reset_event_hook around call to readline(), so the right - signal handling happens - - read_builtin: make sure we add an unwind_protect call to - bashline_reset_event_hook. These changes fix bug reported in - https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 - -bashline.c - - bash_event_hook: make sure we clean up the readline state by calling - rl_cleanup_after_signal if sigalrm_seen is non-zero. The read builtin - sets this when it times out - - 5/12 - ---- -doc/{bash.1,bashref.texi} - - clarify language to make it clear that changing attributes of a - nameref variable (e.g., export), actually changes the attributes of - the referenced variable. Fixes omission noted by Jeff Haemer - - -arrayfunc.c - - bind_array_var_internal: make sure ENTRY no longer has invisible - attribute before returning. Fixes bug reported by Geir Hauge - - - 5/22 - ---- -execute_cmd.c - - shell_execve: if execve fails and we return 127 or 126, make sure to - set last_command_exit_value if a call to file_error or report_error - causes the shell to exit. This ensures that the shell exits with - the right value. - - 6/6 - --- -shell.c - - drop_priv_mode: print an error message on setuid() failure, optionally - exit if errno == EAGAIN, as it can be on Linux when RLIMIT_NPROC for - the target user is exceeded. - -config-top.h - - EXIT_ON_SETUID_FAILURE: new settable define, will cause the shell to - exit if setuid fails with errno == EAGAIN - - 6/10 - ---- -parse.y - - time_command_acceptable: fix so time is accepted everywhere the - grammar is looking for a `compound_list'. Fixes bug reported by - Dale Worley - - 6/12 - ---- -subst.c - - clear_fifo_list: new function, clears FDs associated with open pipes - in current FIFO list without closing the file descriptors. Can - possibly be used when shell_execve fails and the shell jumps back - to top_level and we don't want the shell to close the open FIFOs - each time through the read-execute loop. Bug reported by Harald - Koenig - - - 6/16 - ---- -builtins/shopt.def - - compat42: make sure the `compat42' option sets the correct variable - for compatibility level. Fixes bug reported by Ondrej Oprala - - -support/bashbug.sh - - fix typo when echoing $USAGE. Report from Shantanu Kulkarni - - -execute_cmd.c - - shell_execve: before longjmp back to subshell_top_level, clear out the - FIFO fd list by calling clear_fifo_list so the FDs (which we inherited - from our parent) aren't closed every time through the read-eval loop. - Fix for bug reported by Harald Koenig - - 6/18 - ---- -subst.c - - extract_process_subst: add additional argument: xflags, allow callers to - pass flags like extract_command_subst - - extract_process_subst: call xparse_dolparen like command substitution - to avoid problems when parsing commands constructs with embedded open - parens. Fixes bug reported by Tim Friske - -subst.h - - extract_process_subst: modified prototype for extern declaration - - 6/19 - ---- -execute_cmd.c - - execute_pipeline: if running with lastpipe enabled, make sure that we - check whether or not the job id is valid using INVALID_JOB before - calling job_exit_status. the jobs list can get frozen and unfrozen in - the presence of nested pipelines and loops and wait_for can clear a - job table entry. Fixes bug reported by - -jobs.c - - freeze_jobs_list: now returns old value of jobs_list_frozen; unused at - current time - -jobs.h - - freeze_jobs_list: change return value - - 6/20 - ---- -lib/glob/smatch.c - - MEMCHR: single-byte and wide character defines (memchr/wmemchr) - -lib/glob/sm_loop.c - - GMATCH: when the wildcards are the last element of the pattern, make - sure they do not match a string containing a `/' if FNM_PATHNAME is - set in FLAGS - - GMATCH: when recursively calling GMATCH after we see a `*', don't - try to consume the rest of the pattern with `*' if FNM_PATHNAME is - set in FLAGS, just consume up to the next slash and then see whether - or not the rest of the pattern matches. Fixes bug reported by Ian - Kelling - - GMATCH: when processing `*' in the pattern, after skipping consecutive - wildcards, if we hit a literal `/' in the pattern and we're looking - for a pathname, skip characters in the string until we find a `/' - (no slash means the match fails), and try to match the rest of the - pattern against the portion of the string after the next `/'. Picked - up from gnulib/glibc - -pathexp.c - - split_ignorespec: since split_ignorespec gets globbing patterns, - make sure we call skip_to_delim with the SD_GLOB flag so delimiters - that occur within bracket expressions don't delimit the pattern. - Fixes problem with [[:digit:]] in GLOBIGNORE reported by Ian Kelling - - -unwind_prot.c - - unwind_protect_tag_on_stack: new function, returns 1 if unwind-protect - frame corresponding to `tag' argument is on unwind-protect stack - -unwind_prot.h - - unwind_protect_tag_on_stack: extern declaration - - 6/30 - ---- -lib/readline/misc.c - - _rl_revert_all_lines: set entry->data to 0 after assigning it to - rl_undo_list to avoid pointer aliasing problems that would result - in entry->line being freed by an undo. The subsequent free would - be a double free. Report and fix from Jared Yanovich - - -subst.c - - command_substitute: other shells do not appear to inherit the -v - option when reading and executing command substitutions. Reported - by Ondrej Oprala - - 7/1 - --- -config-top.h - - CHECKHASH_DEFAULT: new define that supplies the default value for - check_hashed_filenames (`checkhash' shopt option); still 0 by default - -findcmd.c - - check_hashed_filenames: initialize using CHECKHASH_DEFAULT - -lib/readline/histexpand.c - - history_expand: double quotes can inhibit recognition of the history - comment character if history_quotes_inhibit_expansion is non-zero - -lib/readline/doc/{history.3,hstech.texi} - - history_quotes_inhibit_expansion: expand definition to note that it - inhibits scanning for the history comment character as well; correct - typo to make it clear that it only works on double-quoted strings - -lib/sh/zgetline.c - - add new fourth argument: DELIM, allows delimiter to be something - other than newline (if DELIM != '\n', UNBUFFERED_READ should be - non-zero) - - UNBUFFERED_READ is now fifth argument - - check character against DELIM rather than strictly newline - -externs.h - - zgetline: change function prototype for extern declaration - -builtins/mapfile.def - - mapfile: change calling sequence for zgetline calls - - mapfile_builtin: new -d option: DELIM, like in read builtin - - mapfile_builtin: pass `delim' to mapfile() as new argument; default - to '\n' unless -d option supplied - - mapfile: take new DELIM argument, pass to zgetline - - mapfile: if DELIM != '\n', set unbuffered_read to 1 - -doc/{bash.1,bashref.texi} - - mapfile: document new `-d DELIM' option - - 7/5 - --- -lib/readline/histfile.c - - history_truncate_file: if there is an error writing the truncated - history list back to the history file, use the same strategy as - history_do_write: create a backup file, rename the history file to - the backup file, and restore the original history file from the - backup file name if the write or the close fails. Suggestion from - Chen Gang to bug-readline - -execute_cmd.c - - evalnest, evalnest_max: new variables establishing maximum number of - recursive `eval' calls; current max is 4096 - - execute_builtin: unwind-protect value of evalnest around calls to - eval builtin. Suggested by Oliver Morais - - {initialize_subshell,execute_subshell_builtin_or_function}: reset - evalnest to 0 in a subshell - -builtins/setattr.def - - show_name_attributes: show a variable's attributes even if it's - invisible (don't show any value since it has none). This means that - declare -p var will display VAR's attributes even when var marked - as invisible. Feature request from Peggy Russell - - - show_var_attributes: don't print assignment if array or assoc - attribute is set but variable marked as invisible - -tests/array.right - - special note: changed all declare -a output tests because the shell - will no longer print out values for invisible array variables. This - is a change, but one for correctness: - - declare -a foo='()' - and - declare -a foo - are not equivalent - - 7/22 - ---- -subst.c - - parameter_brace_expand: after calling parameter_brace_expand_indir, - turn off the W_ARRAYIND flag in the word it returns, because there - is no way for it to return the index that should be used, and the - rest of the function assumes that IND is valid if W_ARRAYIND is set. - Fixes bug reported by Corentin Peuvrel - - 8/2 - --- -parse.y - - read_token_word: if we read a character that will end a command - substitution, don't skip over quoted newlines when we read an - additional character to figure out whether it's a two-character - token. This lets the higher layers deal with quoted newlines after - the command substitution. Fixes bug reported by EmanueL Czirai - - - 8/11 - ---- -execute_cmd.c - - execute_pipeline: check whether lastpipe_jid corresponds to a valid - job before calling append_process, for the same reason as fix from - 6/19. Fixes bug reported by - - 8/12 - ---- -lib/sh/unicode.c - - stub_charset: use strncpy instead of strcpy because we are copying - into a local fixed-length buffer. Fixes vulnerability reported by - - -execute_cmd.c - - execute_pipeline: if we don't call append_process, call - wait_for_single_pid to get the status of `lastpid', since that will - check the status of already-reaped processes. Fixes spurious error - message about non-existent process from fix of 8/11 - - 8/15 - ---- -jobs.c - - running_in_background: new variable, keeps track of whether or not we - are running in the background (not perfect yet) - - initialize_job_control: even if we are not turning on job control, - get the terminal pgrp so we can use it later - - {set_job_control,initialize_job_control}: set running_in_background - to 1 if terminal pgrp != shell pgrp - - {stop_pipeline,make_child,wait_for}: if we are running in the - background, don't mess with the terminal's process group; assume that - the parent shell will do that. Fixes bug reported by Greg Wooledge - - -shell.c - - shell_reinitialize: reset running_in_background back to 0 - - 8/24 - ---- -execute_cmd.c - - {execute_connection,execute_command_internal}: make sure that - asynchronous commands always set $? to 0 and are not affected by the - command's exit status being inverted using `!'. Fixes bug reported - by Vincent Lefevre - -lib/readline/display.c - - rl_message: call vsnprintf with full msg_bufsiz, since it counts - one fewer than the buffer length passed as an argument. Bug report - and fix from Dylan Cali - - 8/26 - ---- -builtins/evalstring.c - - evalstring: if CURRENT_TOKEN == yacc_EOF, reset it to newline. This - is instead of calling reset_parser(); that might still be needed. - Fixes bug with eval and a subsequent statement ending with EOF - reported by - -pcomplete.c - - filter_stringlist: when extglob is on, a leading ! in the filter - pattern should be left alone when it introduces a !(pat) pattern; - otherwise it messes up the pattern. Fixes bug reported by David - Korn - - 8/27 - ---- -doc/{bash.1,bashref.texi} - - clarify the behavior of bash when given the -c option, since $0 is - technically not a positional parameter. Bug reported by Stephane - Chazelas - - 8/28 - ---- -lib/readline/history.c - - add_history: use history_max_entries (if history is stifled) or - DEFAULT_HISTORY_INITIAL_SIZE if not (new define, defaults to 502) - to size the initial allocation of the history array. Assumption - is that this will reduce the number of allocations - - 8/29 - ---- -execute_command.c: - - sourcenest, sourcenest_max: new variables used to track level of - sourced files and (maybe) one day catch infinite source recursion - - execute_builtin: if current source level exceeds sourcenest_max, - trigger an error and jump back to the top level - - {initialize_subshell,execute_subshell_builtin_or_function}: reset - sourcenest to 0 in a subshell - - 9/2 - --- -variables.c - - bind_variable: if a nameref expands to an array reference, make - sure that assign_array_element gets called (maybe even - recursively) instead of bind_variable_internal, so invalid variable - names (like arr[0]) don't get created. Fixes bug reported by - - - 9/3 - --- -execute_cmd.c - - evalnest_max,sourcenest_max: initialize from EVALNEST_MAX and - SOURCENEST_MAX, respectively. Feature suggested by - - -config-top.h - - define EVALNEST_MAX and SOURCENEST_MAX to 0 - - 9/6 - --- -bashline.c - - find_cmd_start: fix to (crudely) deal with >| token; even though - skip_to_delim finds `|' as a delimiter, we call it again and use - what the second call finds. Fixes bug reported by Dan Jacobson - - -findcmd.c - - find_in_path_element: if in posix mode, do not expand a literal - tilde in a $PATH element - -doc/bashref.texi - - add change to tilde expansion in $PATH elements to posix mode - description - -builtins/common.h - - ISHELP: new define for builtins that do their own option parsing - and don't use internal_getopt(); checks whether argument is --help - - CHECK_HELPOPT: convenience define to help builtins that do their - own option parsing to check for --help with one line of code - - CASE_HELPOPT: convenience define to help builtins that use - internal_getopt() check for --help with one line of code - -builtins/help.def - - builtin_help: new function, prints out --help output for current - builtin - -builtins/{kill,let,pushd}.def - - add CHECK_HELPOPT to builtins that use ISOPTION; call builtin_help - and return EX_USAGE (kill/let/pushd/popd/dirs) - -builtins/{caller,fg_bg}.def - - use CHECK_HELPOPT to recognize --help, since these builtins perform - checks that can cause them to return before calling no_options - (caller/fg/bg) - -builtins/{exit,return}.def - - use CHECK_HELPOPT to recognize --help before calling get_exitstat() - (return/exit/logout) - -builtins/{break,shift}.def - - use CHECK_HELPOPT to recognize --help before any other checks - (break/continue/shift) - -builtins/bashgetopt.h - - GETOPT_EOF: convenience define - - GETOPT_HELP: new define, to indicate internal_getopt saw --help - -builtins/bashgetopt.c - - internal_getopt: return GETOPT_HELP for --help - -builtins/common.c - - no_options: recognize --help, call builtin_help and return 2 - (builtin/eval/source/./times) - -builtins/command.def - - use CASE_HELPOPT() to handle --help after calling internal_getopt() - (command) - -builtins/{colon,echo,test}.def - - do not recognize --help (:/true/false/echo/test) - - 9/8 - --- -sig.c - - termsig_sighandler: if readline is active now, set the bashline event - hook. Old code just set it for interactive shells. Part of fix for - bug reported by - -bashline.c - - bash_event_hook: call rl_cleanup_after_signal if terminating_signal - is non-zero, since check_signals_and_traps() will cause the shell to - exit if it is and we want to clean up the readline state first. Rest - of fix for bug reported by - - 9/9 - --- -jobs.c - - waitchld: when running the wait builtin in posix mode, with a trap set - on SIGCHLD, use queue_sigchld_trap instead of trap_handler (SIGCHLD), - otherwise you will lose SIGCHLDs when children_exited > 1. Fixes bug - reported by - -builtins/read.def - - read_builtin: if we are changing the tty settings, call - initialize_terminating_signals so we have a chance to catch all - terminating signals and potentially clean up the terminal before - exiting - - read_builtin: tty_modified: new variable, set to 1 if we change the - terminal attributes and have to call ttyrestore() to restore them - - if one of the `reads' returns -1/EINTR due to a terminating signal, - and we have modified the terminal, call ttyrestore before calling - CHECK_TERMSIG - - ttyrestore: set tty_modified to 0 when called - - 9/10 - ---- -builtins/read.def - - termsave: now global to file so other functions can use it - - read_tty_cleanup: if tty_modified is non-zero, call ttycleanup to - restore old terminal settings and turn off tty_modified - -sig.c - - termsig_handler: call read_tty_cleanup if currently executing read - builtin; it does the right thing. Final piece of fix for bug reported - by Jan Rome - - 9/11 - ---- -general.c - - printable_filename: general function to return a printable - representation of a string (presumed to be a filename) - -general.h - - extern declaration for printable_filename - -execute_cmd.c - - execute_disk_command: use printable_filename - -builtins/{bind,cd,enable,hash,source}.def - - use printable_filename as appropriate when printing error messages. - From a suggestion by Vincent Lefevre - -builtins/bind.def - - use CASE_HELPOPT() to handle --help after calling internal_getopt() - (bind) - - 9/12 - ---- -builtins/common.h - - SEVAL_FUNCDEF: new flag for parse_and_execute; it means that we only - accept a single function definition command, as when we are importing - functions from the environment - - SEVAL_ONECMD: new flag for parse_and_execute; for future use - -builtins/evalstring.c - - parse_and_execute: if the SEVAL_FUNCDEF flag is set, disallow anything - but a function definition command - -variables.c - - initialize_shell_variables: don't allow functions with invalid names - to be imported from the environment, even though we still allow them - to be defined - - initialize_shell_variables: when importing function definitions from - the environment, call parse_and_execute with the SEVAL_FUNCDEF flag - to force the command to be just a function definition - -subst.c - - param_expand: when expanding a $name variable expansion, make sure that - the variable is visible and set before following the nameref chain - - param_expand: when expanding a $name variable expansion and following the - nameref chain, make sure the resulting variable is visible and set - before using it - - 9/13 - ---- -variables.c - - initialize_shell_variables: when importing function definitions from - environment, use SEVAL_ONECMD flag for parse_and_execute. Part of - CVE-2014-6271 - -builtins/evalstring.c - - parse_and_execute: if SEVAL_ONECMD flag set, return immediately after - calling execute_command_internal. Final piece for fix for bug - reported by Stephane Chazelas . Part of - CVE-2014-6271 - - 9/24 - ---- -parse.y - - reset_parser: reset eol_ungetc_lookahead to 0 here, since we don't want - shell_getc returning it on the next call. Fixes problem reported by - Tavis Ormandy and Michal Zalewski - . Potentially part of CVE-2014-6271; fix for - CVE-2014-7169 - - 9/25 - ---- -parse.y - - push_heredoc: new function, pushes a here-doc redirection onto - redir_stack handling overflow of redir_stack. Exits on overflow. - Original fix from Florian Weimer . Fix for - CVE-2014-7186 - - change straight assignments to redir_stack to call push_redir - - add one to size of word_lineno stack to avoid off-by-one error - below in read_token_word. Overflow just results in line numbers - being wrong. Fix for CVE-2014-7187 - - 9/27 - ---- -{execute_cmd,trap}.c - - changes to make minimal-config builds work again, mostly missing - #ifdefs for optional features - -builtins/common.c - - builtin_help: dummy version to be included if HELP_BUILTIN not - defined, for minimal-config builds - -variables.c - - initialize_shell_variables: incorporated patches from Florian - Weimer to change the strings bash looks - for when importing shell functions from the environment. It - adds a prefix (BASH_FUNC_) and a suffix (%%) to the name to - mark it as having been created by bash as an exported function. - Fix for remote attacks part of CVE-2014-6271 and CVE-2014-7169 - - mk_env_string: takes new argument, indicating whether we are - constructing a function - - mk_env_string: encodes function names as described above, so - initialize_shell_variables can find them - - 9/28 - ---- -copy_cmd.c - - copy_redirects: before calling savestring on here_doc_eof, make - sure it's not NULL (it could have been the result of a here - document delimited by EOF or EOS). Fixes bug reported by - Michal Zalewski . Fix for CVE-2014-6277 - -make_cmd.c - - make_redirection: initialize here_doc_eof member to NULL. Rest of - fix for CVE-2014-6277 - - 9/29 - ---- -parse.y - - current_input_line_state: return a sh_input_line_state_t containing - the current shell_input_line and its index and size variables - -shell.h - - current_input_line_state: extern declaration - -builtins/evalstring.c - - parse_and_execute: call reset_parser() before returning if - SEVAL_ONECMD set. Fixes bug reported by Michal Zalewski - and designated CVE-2014-6278 - - parse_and_execute: if we parse a function definition when - SEVAL_FUNCDEF is set, but don't consume the entire passed string, - throw an error, reset the parser, and return. Part of fix for - CVE-2014-6278 - - parse_and_execute: if parsing the shell function definition when - SEVAL_FUNCDEF is set transforms the function name (e.g., if it - begins with a newline or begins or ends with whitespace), throw - an error, reset the parser, and return. Fixes bug reported by - Eric Kobrin - - 10/2 - ---- -jobs.c - - bgp_prune: don't do anything if bgpids.npid == 0 or - bgpids.list == NULL. This can happen if something gets run before - the job control framework is initialized. Bug report from - - - 10/3 - ---- -parse.y - - xparse_dolparen: don't set token_to_read to newline after calling - parse_string() and cleaning up when the shell is not interactive. This - makes the parser think it's ok to read new commands even if it's not in - a state where that should be possible. Underlying fix for bug reported - by Michal Zalewski and designated CVE-6278 - - parser_remaining_input: new function, returns the portion of - shell_input_line that hasn't yet been read - - current_input_line_state: removed - -shell.h - - parser_remaining_input: extern declaration - - current_input_line_state: removed - -builtins/evalstring.c - - parse_and_execute: change code that checks whether parse_command has - consumed the entire passed string when SEVAL_FUNCDEF is used to use - parser_remaining_input instead of messing around with (new) - current_input_line_state. Part of fix for CVE-2014-6278 - -variables.c - - initialize_shell_variables: if we don't call parse_and_execute, free - the temporary string, since parse_and_execute won't. Report and fix - from Eric Kobrin - - 10/4 - ---- -print_cmd.c - - print_function_def: when in posix mode, print shell function - definitions as posix specifies them, without the leading - `function' keyword - -general.c - - exportable_function_name: return 1 if the passed string can be - added to the environment as an exported function name. Currently - prohibits function names containing `/' and `=' from being - exported - -general.h - - exportable_function_name: extern declaration - -builtins/setattr.def - - set_or_show_attributes: if exporting a function with export -f, - call exportable_function_name to determine whether the function - should be exported; don't export function if it returns 0 - - 10/7 - ---- -builtins/setattr.def - - set_or_show_attributes: don't show identifiers that are invisible - and imported from the environment, since that combination of - attributes means that the imported variable is not a valid shell - identifier. Report from Stephane Chazelas - - - 10/8 - ---- -shell.c - - shell_initialize: set new variable should_be_restricted, which - says whether or not the shell will be a restricted one based on the - shell name; use in calls to initialize_shell_variables (to inhibit - importing shell functions) and initialize_shell_options (to inhibit - parsing $SHELLOPTS) and initialize_bashopts (to inhibit parsing - $BASHOPTS). Report from - - 10/12 - ----- -execute_cmd.c - - execute_function: unwind-protect loop_level, set loop_level to 0 - when entering a function so break and continue in functions don't - break loops running outside of the function. Fix picked up from - dash via Herbert Xu - - 10/13 - ----- -doc/Makefile.in - - bashref.pdf: create using texi2dvi --pdf rather than postprocessing - the dvi file, so we have PDF bookmarks and links. Fix from - Siep Kroonenberg - - 10/14 - ----- -subst.h - - Q_ARITH: new quoting flag. Semantics are per Posix's spec for - arithmetic expansion: act as if string is quoted, but don't treat - double quotes specially (in this case, they will be removed by quote - removal) - - Q_ARRAYSUB: new quoting flag, indicates we are expanding an indexed - array subscript - -subst.c - - expand_arith_string: if we are not expanding the string, but we saw - a quote with Q_ARITH specified as one of quoting flags, perform - quote removal even if Q_DOUBLE_QUOTES is specified - - param_expand: change calls to expand_arith_string for $[ and $(( - cases to specify Q_ARITH. Now $(( "$x" )) and $(( "x" )) work if x - has a value that evaluates to a valid number, as Posix specifies - - expand_word_internal: add test for quoted&Q_ARITH to the tilde case, - so we continue to perform tilde expansion in arithmetic contexts - - expand_word_internal: if quoted&Q_ARITH, continue processing when we - see a `"', acting as if the double quote isn't present (already - Q_DOUBLE_QUOTED) - -arrayfunc.c - - array_expand_index: pass Q_DOUBLE_QUOTED|Q_ARITH|Q_ARRAYSUB as quoted - argument in call to expand_arith_string. This inhibits word - splitting (Q_DOUBLE_QUOTED) while discarding double quotes (Q_ARITH), - identical to the quote flags passed while expanding $(( )) and $[ ]. - Q_ARRAYSUB reserved for future use. Fixes problem reported by - Stephane Chazelas - - 10/16 - ----- -subst.c - - parameter_brace_expand_word: if the PF_ASSIGNRHS flag is set and we - are expanding what looks like an array subscripted with @ or *, - make sure the variable we're expanding is actually an array before - we add Q_DOUBLE_QUOTES to the flags. If we don't, things like - scalar[@] will remain quoted. Fixes ubuntu bug 1381567 - https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1381567 - - 10/17 - ----- -{jobs,nojobs}.c - - get_original_tty_job_signals: get original signal dispostions for - SIGTSTP, SIGTTIN, SIGTTOU before we start manipulating them in - make_child - - default_tty_job_signals: make sure we set SIGTSTP, SIGTTIN, or - SIGTTOU to SIG_IGN if they were ignored at shell startup instead of - unconditionally setting them to SIG_DFL. Fixes bug reported by - idallen@idallen.ca - -jobs.h - - get_original_tty_job_signals: extern declaration - -trap.c - - initialize_traps: add call to get_original_tty_job_signals - - 10/22 - ----- -subst.c - - expand_string_for_rhs: when expanding in this context (rhs of a word - expansion or pattern removal), we don't perform word splitting, so - we don't want to split $* if IFS is empty. Fixes bug reported by - Stephane Chazelas - - 10/23 - ----- -subst.c - - param_expand: when expanding $* in a pattern context where the - expansion is quoted (Q_PATQUOTE), don't quote the expansion -- - the outer quotes don't make the characters in the expansion of - $* special. Posix interp 221. Reported by Stephane Chazelas - - - 10/28 - ----- -lib/readline/bind.c - - enable-bracketed-paste: new bindable variable, enables support for - a terminal's `bracketed paste mode'. Code contributed by - Daniel Colascione - -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - enable-bracketed-paste: add description - -lib/readline/{readline.c,rlprivate.h} - - _rl_enable_bracketed_paste: declarations - - #defines for use by bracketed paste implementation - -lib/readline/rltty.c - - rl_prep_terminal: send BRACK_PASTE_INIT string to terminal if we - are supposed to enable bracketed-paste mode; change terminal_prepped - to indicate we sent that string and need to clean up - - rl_deprep_terminal: if terminal_prepped indicates we sent the - bracketed-paste mode init string to the terminal, send the cleanup - string before restoring the terminal modes - -lib/readline/kill.c - - rl_bracketed_paste_begin: function to read bracketed paste until - BRACK_PASTE_SUFF; discard the suffix, and insert the rest of the - paste as a single (undoable) object. Bound to BRACK_PASTE_PREF - -lib/readline/funmap.c - - bracketed-paste-begin: new bindable command, executes - rl_bracketed_paste_begin - -lib/readline/readline.c - - bind_bracketed_paste_prefix: new function, sets up to recognize - the bracketed paste prefix sequence (BRACK_PASTE_PREF) in emacs - keymap and vi insertion keymap - - readline_initialize_everything: call bind_bracketed_paste_prefix - - 11/1 - ---- -builtins/ulimit.def - - RLIMIT_POSIXLOCKS: now synonym for RLIMIT_LOCKS - - -k: new option: RLIMIT_KQUEUES, max kqueues allocated for this - process - - -P: new option: RLIMIT_NPTS, max number of pseudoterminals available - to this process - -doc/{bash.1,bashref.texi} - - document `ulimit -k' option - - document `ulimit -P' option - -parse.y - - `timespec list_terminator' production: if the list terminator is `;' - set last_read_token to `;' to allow things like `time ; command' to - time null commands and not throw a syntax error. Patch from - Piotr Grzybowski - - `BANG list_terminator' production: do the same thing - -variables.c - - sv_optind: use find_shell_variable and get_variable_value so we can - have the variable's context in the case we need to do something - when we are restoring a previous variable context's value - -builtins/getopt.h - - sh_getopt_state_t: struct to save sh_getopt's internal state so we - can restore it around function calls in the event that we have a - local copy of OPTIND - -builtins/getopt.[ch] - - sh_getopt_{save,restore}_istate: new functions to save and restore - getopt's internal state - - sh_getopt_{alloc,dispose}_istate: new functions to allocate and - deallocate sh_getopt_istate_t objects - -execute_cmd.c - - maybe_restore_getopt_state: restore sh_getopt state after executing - function body iff the funtion declared a local copy of OPTIND - - execute_function: save sh_getopt state before executing function body - - execute_function: note in getopt_state->flags whether or not the - function declared a local copy of OPTIND; used by - maybe_restore_getopt_state - - execute_function: maybe restore sh_getopt state before returning via - call to maybe_restore_getopt_state. Fixes bugs with getopts and - state between calls reported in 2011 by Bernd Eggink - and in 2014 by Oyvind Hvidsten - - -configure.ac - - enable-function-import: new option, controls whether function imports - are included. Enabled by default. Patch from David Galos - - -config.h.in - - FUNCTION_IMPORT: define controlled by enable-function-import above - -variables.c - - initialize_shell_variables: include code to import function - definitions from the environment if FUNCTION_IMPORT is defined - -doc/bashref.texi - - --enable_function-import: document new configuration option - - 11/5 - ---- -lib/readline/history.c - - history_lines_read_from_file: new variable, set by read_history and - read_history_range to the actual number of lines read from the - history file. The value is valid immediately after a call to one - of those functions - - history_lines_written_to_file: new variable, set by write_history, - history_do_write, and history_truncate_file to the actual number of - lines written to the history file. The value is valid immediately - after a call to one of those functions - -variables.c - - sv_histsize: set history_lines_in_file after history_truncate_file() - only if hmax < history_lines_in_file (lines we've already read); a - cosmetic change only - -bashhist.c - - load_history: set history_lines_in_file after read_history() from - history_lines_read_from_file, since read_history reads all of the - lines from the history file even if it's more than $HISTSIZE - - maybe_save_shell_history: after calling write_history(), set - history_lines_in_file to history_lines_written_to_file, since we - can assume that we read everyhing we just wrote - -builtins/history.def - - history_builtin: after calling read_history (history -r), set the - new value of history_lines_in_file, for the same reason as above - - history_builtin: after calling read_history_range (history -n), set - history_lines_in_file from history_lines_read_from_file - - 11/6 - ---- -lib/readline/histfile.c - - history_truncate_file: since we move the old file to a backup copy - before truncating, make sure the new file is owned by the same uid - as the old - - history_do_write: use chown in the same way as history_truncate_file - - 11/12 - ----- -lib/readline/display.c - - expand_prompt: takes a new `flags' argument; only one flag defined - so far: PMT_MULTILINE - - expand_prompt: changed all callers to add new flags argument - - rl_expand_prompt, redraw_prompt: make sure to set PMT_MULTILINE in - FLAGS argument to expand_prompt if expanding parts of a prompt - containing embedded newlines - - expand_prompt: only add mode char to last line of a prompt with - embedded newlines, so mode indicator doesn't get lost and gets - updated properly. Fixes problem reported by Renlin Li - - - 11/13 - ----- - -lib/readline/display.c - - prompt_modestr: changed prompt_modechar to return a string denoting - the editing mode; default strings for emacs and both vi modes are - #defines in this file. prompt_modestr takes an argument in which - it returns the length of the mode string - - expand_prompt: if expanding mode strings in the prompt, get the - mode string to use and add it at the beginning of the prompt string, - before expanding it. This will allow future work allowing the mode - string to contain invisible characters - - 11/15 - ----- -lib/readline/rlprivate.h - - _rl_{emacs,vi_cmd,vi_ins}_mode_str: extern declarations for - variables to hold current values of user-settable mode strings; - variables to hold lengths - -lib/readline/rlconf.h - - defines for default values of the mode strings for each editing mode - and keymap - -lib/readline/display.c - - _rl_{emacs,vi_cmd,vi_ins}_mode_str: new variables to hold values of - user-settable mode strings - - _rl_{emacs,vi_cmd,vi_ins}_modestr_len: new variables to hold lengths - of corresponding mode string variables - - prompt_modestr: return appropriate user-settable mode string - variables - -lib/readline/bind.c - - {emacs,vi-ins,vi-cmd}-mode-string: new user-settable mode string - variables - - sv_{emacs,viins,vicmd}_modestr: variable handling functions for user- - settable mode string variables. Non-null values are run through - rl_translate_keyseq so users can include invisible character - sequences in the mode strings; null values restore the default - - _rl_get_string_variable_value: handle values for new user-settable - mode string variables. Original code contributed by Dylan Cali - - -lib/readline/doc/rluser.texi - - {emacs,vi-ins,vi-cmd}-mode-string: document, including the fact that - you can use \1 and \2 to bracket sequences of non-printing - characters - - 11/16 - ----- -lib/readline/history.c - - add_history: replace loop that copies history list down one item - with call to memmove to take advantage of whatever efficiencies - libc can offer. Won't be any slower than current loop - -lib/readline/display.c - - rl_redraw_prompt_last_line: new function, calls redraw_prompt if - the prompt contains multiple lines; calls rl_forced_update_display - if not - -lib/readline/readline.h - - rl_redraw_prompt_last_line: extern declaration, undocumented in - texinfo manual until I get it a little more work - -bashline.c - - bash_execute_unix_command: instead of unconditionally calling - rl_forced_update_display, call rl_redraw_prompt_last_line if we - cleared the last line before executing the command. This keeps - commands that don't display any other output but just manipulate - the contents of the line buffer from redisplaying the prompt lines - before the last newline multiple times. Fixes bug reported by - Jesper Nygards and Rob Foehl - . This means that commands that display output - will *only* display the final line of the prompt - - bash_execute_unix_command: if the command returns 124, we redraw - the line unconditionally, including all lines of the prompt - - 11/18 - ----- -builtins/mapfile.def - - mapfile_builtin: don't allow a valid array reference through to - mapfile(), since it will just create a shell variable with that name. - Bug and fix from Eduardo A. Bustamante López - - 11/19 - ----- -lib/readline/complete.c - - _rl_colored_completion_prefix: new variable, if non-zero, and color - support is compiled in, and the $LS_COLORS variable exists and - contains color definitions, display any common prefix of a set of - completions in blue when displaying all the possible completions. - Doesn't work with menu-complete, which inserts possible completions - inline - - colored_prefix_start(), colored_prefix_end(): new functions, used to - bracket colored completion prefixes - - fnprint: if prefix_bytes is non-zero, and _rl_colored_completion_prefix - is > 0, display the first PREFIX_BYTES bytes of the word bracketed - by calls to colored_prefix_start and colored_prefix_end - - print_filename: if _rl_colored_completion_prefix is > 0, compute the - length in bytes of the common prefix and pass that to fnprint - -lib/readline/readline.c - - readline_initialize_everything: initialize the colors from $LS_COLORS - if _rl_colored_completion_prefix is non-zero - -lib/readline/colors.c - - _rl_print_prefix_color: new function, changes text color to that - defined for the common prefix of a set of possible completions - (currently cyan, same as directories); currently uses C_PREFIX, - defined in colors.h as C_DIR - -lib/readline/colors.h - - _rl_print_prefix_color: new extern declaration - -lib/readline/bind.c - - colored-completion-prefix: new bindable variable, if set, common - prefix of a set of possible completions is displayed in color. - Feature requested by several, most recently by Richard Neill - (in a slightly different form) and - Duy Nguyen - - 11/20 - ----- -builtins/printf.def - - printf_builtin: allow null (empty) format strings supplied with - -v var to set `var' to the empty string. That is, printf -v var "" - is now the same as var="". Change suggested by Mike Frysinger - - -pathexp.h - - FNMATCH_NOCASEGLOB: macro to decide whether or not to pass - FNM_CASEFOLD flag to strmatch depending on whether glob_ignore_case - is set; analogout to FNMATCH_IGNCASE - -pathexp.c - - glob_name_is_acceptable: use FNMATCH_NOCASEMATCH to determine flags - passed to strmatch; if nocaseglob is used to generate glob matches, - it should be used to generate ignored matches - - 11/21 - ----- -pcomplete.c - - filter_stringlist: the call to strmatch now honors the setting of - nocasematch. Feature request from Ville Skytta - back in 2010 - -doc/bash.1,lib/readline/doc/rluser.texi - - complete -X: document that filtering the list of possible completions - honors the nocasematch option when performing matching - -lib/glob/gmisc.c - - include chartypes.h and strmatch.h for new defines - - match_pattern_{wchar,char}: now take new third FLAGS argument, flags - have same meanings as strmatch(); intent is to handle case - insensitive comparisons under same conditions as strmatch - - FOLD: imported case-folding define from sm_loop.c; wide and single- - byte character versions - - match_pattern_{wchar,char}: use FOLD when comparing characters to - honor FNM_CASEFOLD if set in FLAGS argument - -externs.h - - match_pattern_{wchar,char}: updated extern declarations - -subst.c - - match_{upattern,wpattern}: update strmatch/wcsmatch calls to include - FNMATCH_IGNCASE in flags argument - - match_{upattern,wpattern}: update match_pattern_{char,wchar} calls - to include FNMATCH_IGNCASE in flags argument (consistent with calls - to strmatch). This makes pattern substitution word expansion honor - nocasematch shell option. Feature requested by Davide Baldini - - - match_wpattern: make sure to fold case if necessary when doing simple - matching - -doc/{bash.1,bashref.texi} - - pattern substitution: updated description to include honoring setting - of nocasematch when performing matching - -subst.c - - expand_word_internal: optimize handling of "$@" idiom by calling - list_rest_of_args() and quote_list() directly at the top of the - function instead of going through normal code path - - cached_quoted_dollar_at: WORD_LIST of quoted positional parameters, - used by same code above that optimizes "$@"; if non-null we just - return a copy of the list; if null, we save a copy of the list we - create - - invalidate_cached_quoted_dollar_at: convenience function to allow - other parts of the shell (e.g., remember_args()) to destroy the - cached list of quoted positional parameter when the positional - parameters change - -builtins/common.c - - remember_args: call invalidate_cached_quoted_dollar_at() - -builtins/shift.def - - shift_builtin: call invalidate_cached_quoted_dollar_at after modifying - dollar_vars[] - -builtins/source.def - - maybe_pop_dollar_vars: call invalidate_cached_quoted_dollar_at just - to be safe - - 11/23 - ----- -builtins/evalfile.c - - _evalfile: return -1 if errno == ENOENT and the flags don't include - FEVAL_ENOENTOK. If we print an error message we should return an - error - - force_execute_file: new function, reads and executes commands from - a file but returns an error if file doesn't exist - -builtins/common.h - - force_execute_file: new extern declaration - -shell.c - - main: call start_debugger even if dollar_vars[1] == 0 if the shell - isn't interactive (interactive_shell == 0) - - start_debugger: call force_execute_file instead of maybe_execute_file; - turn off debugging mode if it returns value < 0 - - 11/24 - ----- -hashlib.h - - DEFAULT_HASH_BUCKETS: doubled to 128, cost in memory use is small but - changes traversal order when not sorting results - - 11/25 - ----- -doc/{bash.1,bashref.texi} - - make it clearer, by breaking it out into a separate paragraph, that - referencing an array without a subscript is equivalent to referencing - it with subscript 0 - - add text saying that referencing any variable using a valid subscript - is OK - - 11/28 - ----- - -arrayfunc.c - - bind_array_variable, bind_assoc_variable: allow binding value to a - readonly variable if the ASS_FORCE flag is set in the FLAGS - argument - -subst.h - - ASS_FORCE: new assignment flag; means to allow assignment even if - variable is marked readonly - -builtins/declare.def - - when assigning a value to an array or assoc variable using - something like `declare -r foo=bar' where foo is an existing array - variable, pass the ASS_FORCE to assign_array_var_from_string so - the assignment is allowed. Fixes debian bug 765759 - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765759 - -builtins/setattr.def - - var_attribute_string: new function to return (as argument) a char - array with attribute flag values for a given variable; returns the - length of the array - -lib/sh/shquote.c - - sh_quote_reusable: function returning a version of its string - argument that is quoted for reuse - -externs.h - - sh_quote_reusable: extern declaration - -builtins/common.h - - MAX_ATTRIBUTES: define used to size arrays for attribute flag - characters - - var_attribute_string: new extern function declaration - -subst.c - - array_remove_pattern: fixed a bug where `var' instead of `v' was - tested for invisible attribute - - get_var_and_type: fill in a valid *VARP if returning VT_VARIABLE - because callers may need to use it - - parameter_brace_transform: family of functions to implement the new - mksh-inspired ${param@spec} transformation word expansions. Some - of the operators transform the (expanded) value of the parameter, - the rest expand to information about the parameter itself - (array_transform, parameter_list_transform, list_transform, - string_transform, pos_params_assignment, array_var_assignment, - string_var_assignment) - - parameter_brace_expand: changes to parse the new `@' word expansion - operator and call parameter_brace_transform appropriately - - parameter_brace_expand: make sure we handle ${#@} as we have before - even in the presence of the new `@' operator - -variables.c - - push_temp_var: make sure to call bind_variable_internal with the - ASS_FORCE flag so we override readonly variables created with - something like `tempvar=foo declare -r foo'. - - bind_variable_internal: honor ASS_FORCE flag to allow binding even - if a variable is readonly - -execute_cmd.c - - struct func_array_state: new state to save state of BASH_LINENO, - BASH_SOURCE, and FUNCNAME during function execution so it can be - restored on a jump to top level - - restore_funcarray_state: new function to restore func_array_state - - execute_function: fill in func_array_state variable, add unwind- - protect to restore it on jump to top level, call explicitly at - end of function if subshell != 0 (may not be necessary, but safe - for now). Fixes bug with local assignments to FUNCNAME reported - by Arfrever Frehtes Taifersar Arahesis - - 11/29 - ----- -arrayfunc.c - - assign_compound_array_list: turn off ASS_APPEND flag when processing - each individual assignment inside the parens in var+=(...). The - outer += should not affect assignments to existing subscripts; - those should be treated like usual assignments unless += supplied - inside the parens. Bug report from Maarten Billemont - , fix from Eduardo A. Bustamante López - - -config.h.in - - HAVE_PSELECT: define if pselect(2) available - -configure.ac - - check for pselect(2), define HAVE_PSELECT if found - -lib/readline/input.c - - rl_getc: use pselect(2) to wait for input ready on readline's - input fd or for a signal to arrive, will handle SIGWINCH (which - does not interrupt read(2)) and thus allow resize to happen without - having to wait to read more input. Only works if pselect available - and returns -1/EINTR on a signal even if the signal was installed - with SA_RESTART. From a suggestion from Egmont Koblinger - - - 12/3 - ---- -variables.c - - flush_temporary_env: new function, disposes all temp variables in - temporary_env hash table - - bind_variable: only try to update a temporary variable's value in the - temporary env if the value argument is not null. Fixes bug reported - by - -variables.h - - flush_temporary_env: new extern declaration - -subst.c - - command_substitute: if running command substitution as part of - expanding a redirection (expanding_redir == 1), flush any temporary - environment we've inherited as part of this command, since we are not - supposed to have access to the temporary environment. Since - expanding_redir only controls access to the temporary environment for - variable lookup and binding, we can turn it off in the subshell - - 12/4 - ---- -builtins/printf.def - - printstr: make sure a missing precision specifier after a `.' is - treated as 0, as printf(3) specifies. Fixes ubuntu bash bug - 1399087 (https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1399087) - - 12/5 - ---- -subst.c - - skip_to_delim: if scanning past process substitution (skipcmd == 1, - noprocsub == 0), use extract_delimited_string instead of - extract_process_subst, which was changed a while back (bash-4.3.23) - to use xparse_dolparen. xparse_dolparen complains if the command - or process substitution is unterminated, since it runs the parser, - which is not what we want here. Command substitution does the same - thing. Fixes bug reported by Daniel Kahn Gillmor - as Debian bash bug 771968 - (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771968) - - 12/6 - ---- -subst.c - - command_substitute: short-circuit without forking on a command string - that consists entirely of s and newlines - -jobs.c - - make_child: changes to allow interrupts through if fork fails and - we are sleeping for `forksleep' seconds - - waitchld: make things a little more resilient if CHILD ends up NULL - - 12/12 - ----- -lib/readline/complete.c - - rl_display_match_list: when calculating common prefix to display in - color, make sure we correctly handle a common prefix with a trailing - `/' as we do when checking whether or not to add an ellipis. - printable_part() doesn't return the whole pathname if it ends in a - slash, to avoid printing null strings, so we have to make sure we - have the entire prefix - -lib/readline/complete.c - - _rl_complete_display_matches_interrupt: new variable, set to 1 by - _rl_complete_sigcleanup to let rl_display_match_list know it has - freed the match list - - display_matches: check for signals during the printing loops with - RL_SIG_RECEIVED(), return immediately if there is a pending signal - (might not want to do this if it's SIGWINCH -- CHECK) - - rl_complete_internal: if _rl_complete_display_matches_interrupt - set after calling display_matches, just null out `matches' since - it's already been freed and call any application-set signal hook - - 12/14 - ----- -parse.y - - time_command_acceptable: if the token before a newline is `|', - return 0, since it's not really valid to time inside a pipeline. - Only handles a single newline but allows things like - echo a | - time cat - to invoke /usr/bin/time, which is probably enough to catch the - stray carriage return. Fixes bug reported by Andre Majorel - - -builtins/declare.def - - declare_internal: don't try to perform compound assignments unless - the WORD_DESC has flags including W_COMPASSIGN (maybe should check - W_ASSIGNMENT as well), avoiding unexpected evaluation if a word - is of the form (word) and is assigned to an array variable like so: - declare -x var=$value. Bug reported by Stephane Chazelas - . Will eventually be contingent on - compatibility level > 43, but not there yet. TENTATIVE - - 12/15 - ----- -lib/sh/Makefile.in - - add missing dependencies for shmatch.o. Pointed out by Sergey - Mikhailov - - 12/16 - ----- -{execute_cmd,subst}.c - - W_ASSIGNINT: remove, not used any more - -execute_cmd.c - - fix_assignment_words: don't look for `-i' option and set W_ASSIGNINT - flag any more; doing things a different way - - shell_expand_word_list: instead of using W_ASSIGNINT flag, since it - doesn't take into account all options that can transform values on - assignment (-l/-u/-c can also), go through option arguments looking - for options that need special handling and add them to the `opts' - array for make_internal_declare to use. Fixes bug with constructs - like `declare -al foo=(UPONE UPTWO UPTHREE)' not being lowercased on - assignment reported by Linda Walsh - - - - 12/18 - ----- -lib/readline/readline.c - - rl_internal_char: when we read EOF on a non-empty line, check for - signals and invoke any readline signal handling and any application- - installed signal hook - - 12/20 - ----- -lib/readline/readline.c - - rl_internal_char: if we read EOF on a non-empty line, set c to - _rl_eof_char the first time through. If we read EOF the next time, - return EOF from readline(). If callbacks are defined, this returns - EOF immediately, since lastc isn't available. Fix for problem - most recently identified by Jiri Kukacka , - it has come up in the past - - 12/21 - ----- -builtins/declare.def - - declare_internal: keep track of whether or not an assignment statement - argument to declare is an array subscript assignment; need to - differentiate assignments from straight declarations (declare a[4]) - which are accepted for backwards compatibility - - assignment statements like declare a[2]=foo are now treated as - straight subscript assignment statements if a already exists as an - array variable - - declare foo='(1 2 3)' is treated as an assignment to foo[0] if foo - exists and is an array, just as it would be if it were an assignment - statement and `declare' was not present. All this from a proposal - by Stephane Chazelas - - 12/22 - ----- -builtins/read.def - - read_tty_modified: function to tell the rest of the shell if the - read builtin has modified the tty - - read_builtin: make sure to initialize terminating signals before - installing a SIGALRM signal handler in case we modify the tty as - well as ask for a timeout; the subsequent call to - initialize_terminating_signals would overwrite the read-builtin- - local SIGALRM handler - -builtins/common.h - - read_tty_modified: new extern declaration - -shell.c - - exit_shell: if read_tty_modified() returns true, call read_tty_cleanup - to undo the terminal modifications. Extension of previous fixes; - fixes bug with read -s reported by Richard W. Marsden - - - - 12/23 - ----- -builtins/setattr.def - - show_var_attributes: call print_array_assignment and print_assoc_assignment - with a `not quoted' flag so the assignment statements are not - surrounded by single quotes. Caused changes to a lot of test output - - 12/29 - ----- -lib/readline/complete.c - - stat_char: Windows doesn't handle X_OK flag to access(2); use file - extensions to determine whether or not a file is executable. Bug - report and fix from Eli Zaretskii - -configure.ac - - changed version to bash-4.4-devel - -lib/readline/readline.h - - changed version to readline-6.4 - - 12/30 - ----- -readline.h - - struct readline_state: fix types of `ignorefunc' and `attemptfunc' - members - -lib/sh/shquote.c,externs.h - - sh_contains_shell_metas, sh_contains_quotes: now take `const char *' - as parameter - -stringlib.c,externs.h - - strcreplace: `text' argument now `const char *' - -pathexp.[ch] - - quote_globbing_chars: `string' argument now `const char *', accompanying - changes to function local variables - -pcomplete.c - - preproc_filterpat: `text' argument now `const char *' - - filter_stringlist: `text' argument now `const char *' - - 12/31 - ----- -builtins/evalstring.c - - should_suppress_fork: new function, broke code that decides whether - to turn on CMD_NO_FORK flag out of parse_and_execute into a separate - function - -execute_cmd.c - - execute_command_internal: AND_AND, OR_OR: call should_suppress_fork - for the RHS of && and ||, make `make' invocations marginally more - efficient - -flags.c - - get_current_flags: returns a bitmap of all single-letter shell - options with a non-zero value meaning option is enabled - - set_current_flags: set current single-letter options from a passed - bitmap, which has presumably been initialized with get_current_flags - -flags.h - - {get,set}_current_flags: new extern declarations - -builtins/declare.def - - declare_internal: if invoked as `local', interpret name argument of - `-' to mean to save (and restore at shell return) single-letter - shell options - -variables.c - - push_func_var: if we encounter `-' as the name of a local variable, - take the value and call set_current_flags on it to restore old - flag settings - -builtins/set.def - - get_current_options: returns a bitmap of all shell options settable - with `set', with a non-zero value meaning option is enabled - - set_current_options: set current shell options from a passed - bitmap, which has presumably been initialized with get_current_options - - - 1/1/2015 - -------- -lib/readline/parens.c - - _rl_blink_matching_paren: initialize to 0 whether or not select(2) is - available. Inconsistency reported by Mark Karpov - - -builtins/declare.def - - declare_internal: use get_current_options instead of - get_current_flags, so `local -' can be generalized - -variables.c - - push_func_var: use set_current_options instead of set_current_flags - so `local -' can be generalized - -doc/{bash.1,bashref.texi} - - document new `local -' feature; originally inspired by Robert Elz - describing feature in NetBSD sh - - 1/3 - --- -lib/readline/{complete,funmap,kill,histfile,util} -lib/readline/readline.h -lib/tilde/tilde.c - - fixes for filename- and evironment-related issues on Windows. Fixes - from Eli Zaretskii - - Windows can paste to the console from the clipboard like Cygwin - - Windows uses $APPDATA as a pseudo-$HOME - -lib/readline/input.c - - rl_getc: use _getch on Windows to avoid being overridden by a getch - ncurses function - - win32_isatty: replace Windows isatty(3) with a function that does - additional checks, sinces Windows isatty returns non-zero for - every character device. From Eli Zaretskii - -lib/readline/display.c - - delete_chars: if compiled with ncurses on Windows, this code can - work, so build it in if NCURSES_VERSION defined - - open_some_spaces: ditto - - 1/6 - --- -doc/{bash.1,bashref.texi} - - minor grammar and typo corrections from TonyMc - - 1/8 - --- -sig.c - - throw_to_top_level: only attempt to run the interrupt trap if SIGINT - is trapped -- minor optimization - - throw_to_top_level: if we are running a trap, call run_trap_cleanup - to turn off the sigmodes flags - -trap.c - - _run_trap_internal: temporarily suppress pending SIGINTs while running - one of the traps the shell handles internally (e.g., ERR). Fixes bug - reported by Keith Thompson - - 1/10 - ---- -bashhist.c - - bash_history_inhibit_expansion: use skip_to_delim with the history - expansion character to see whether or not the instance of the - history expansion character should be skipped because, for instance, - it is in a command substitution. Fixes issue reported by - Zigmund.Ozean@zig-home.localdomain - - 1/14 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: if we are in a multibyte locale, make sure to - use _rl_find_prev_mbchar when trying to delete characters from the - search string, instead of just chopping off the previous byte. - Fixes bug reported by Kyrylo Shpytsya - -lib/readline/complete.c - - rl_filename_completion_function: if we tilde-expand `dirname', make - sure we use the expanded result instead of throwing it away for the - quote-removed `users_dirname', which still has any leading tilde. - Fixes bug reported by Dave Rutherford - -execute_cmd.c - - select_query: if the read builtin doesn't return anything in REPLY, - return NULL (failure). Fixes bug reported by Etherial Raine - - -builtins/read.def - - read_builtin: if REPLY has the readonly or noassign attribute, return - failure - - 1/16 - ---- -redir.c - - redir_open: if open() returns -1/EINTR, check traps as well as - using QUIT to handle signals - - 1/18 - ---- -jobs.c - - wait_for: make sure queue_sigchld is set to 1 before unblocking - SIGCHLD if MUST_UNBLOCK_CHLD is defined - - 1/19 - ---- -pcomplete.h - - new progcomp option: COPT_NOSORT, means to not sort list of possible - completions - -pcomplete.c - - pcomp_set_readline_variables: if COPT_NOSORT set in compspec flags, - set rl_sort_completion_duplicates to 0 - -builtins/complete.def - - _compopt: new option value: -o nosort, sets COPT_NOSORT in compspec - option flags. Provides new -o nosort option for complete and compgen - -bashline.c - - attempt_shell_completion: make sure rl_sort_completion_matches is - set to 1 before completion is attempted; allow a compspec to turn - it off - -lib/readline/kill.c - - rl_vi_yank_pop: new function, vi-mode version of yank-pop. Original - code from Ian Kelling - -lib/readline/funmap.c - - `vi-yank-pop': bindable name mapped to rl_vi_yank_pop - -lib/readline/readline.h - - rl_vi_yank_pop: extern declaration - - 1/21 - ---- -lib/sh/shquote.c - - sh_backslash_quote: change to understand and handle multibyte - characters, using is_basic, COPY_CHAR_P. See - https://bugzilla.redhat.com/show_bug.cgi?id=1184320 for original - report - - 1/23 - ---- -include/posixjmp.h - - use setjmp_sigs instead of redefined setjmp, it fails on Cygwin. - Report from Eric Blake - -builtins/wait.def,shell.c - - use setjmp_sigs instead of setjmp call, since setjmp no longer - redefined to something known - -include/chartypes.h, lib/readline/chardefs.h - - make sure all ctype.h macros are called with unsigned char args, - casting to make sure - -lib/sh/casemod.c - - sh_modcase: don't assume that the upper and lower case versions of a - character are the same width, so don't try to do the conversion in - place: convert and copy the converted characters one or more at a - time to the returned string - - sh_modcase: since upper and lower case versions of same character - may have different widths in some locales, don't shortcut and assume - that we can do single-byte case modification (toupper) with a - single-byte input character (e.g., `i'). Fix for problem reported - by Stephane Chazelas - - 1/31 - ---- -lib/readline/histfile.c - - history_truncate_file, history_do_write: if the first rename(2) - of the history file to the backup file fails, set the backup file - name to NULL to prevent any later attempts to restore the - original. Report from Jonathan Hankins - - history_do_write: don't attempt to back up non-regular files. - Report from Jonathan Hankins - - 2/2 - --- -trap.c - - run_interrupt_trap: now takes an argument indicating whether or not - it was called just before a longjmp to top_level; change callers - - run_interrupt_trap: if running a trap and we are being called before - a longjmp to top_level, call run_trap_cleanup on running trap so - a QUIT call while running a DEBUG trap, for instance, doesn't leave - sigmodes[DEBUG_TRAP] including SIG_INPROGRESS. Fixes bug reported - by Chih-Chieh Chou - -sig.c - - throw_to_top_level: change call to run_interrupt_trap to pass arg 1 - - termsig_handler: change call to run_interrupt_trap - -trap.h - - run_interrupt_trap: update extern prototype declaration - - 2/4 - --- -lib/readline/histfile.c - - histfile_backup, histfile_restore: new functions to back up and restore - history file to `filename-', following (one level of) symlinks through - so we don't rename the symlink itself. From a suggestion by - Jonathan Hankins - -assoc.c - - assoc_to_assign: if an index happens to be `@' or `*', make sure it's - double-quoted. Bug report from Greg Wooledge - - 2/5 - --- -lib/readline/bind.c - - rl_bind_key: if we are rebinding a key that is not bound to a - function or a macro, construct a key sequence and pass it to - rl_bind_keyseq. Make sure that '\' when it is used as a key is - changed to "\\" so it can survive rl_translate_keyseq. Fixes - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776743 - - 2/8 - --- -include/posixjmp.h - - _rl_longjmp, sh_longjmp: new defines, expand to siglongjmp or longjmp - depending on autoconf results, used to avoid redefining longjmp, - remove _OPENNT conditional code. Report from Eric Blake - - -{bashjmp,quit}.h,{execute_cmd,expr,jobs,sig,trap}.c,builtins/{evalstring.c,return.def} - - change calls to longjmp to use sh_longjmp - -lib/readline/util.c - - change calls to longjmp to use _rl_longjmp - - 2/18 - ---- -variables.c - - bind_int_variable: make sure `v' is non-null before making it visible - - 2/19 - ---- -arrayfunc.c - - assign_array_var_from_word_list: after assignment, mark variable as no - longer invisible - - assign_array_var_from_string: after assignment, mark variable as no - longer invisible - -builtins/declare.def - - declare_internal: add warning if an attempt is made to use a quoted - compound assignment as an argument to declare (declare -a foo='( 1 2 )'); - backwards compatible with bash-4.3. Still a tentative change - - 2/20 - ---- -lib/glob/smatch.c - - is_wcclass: check malloc() return value, return -1 if it fails - Report from Tobias Stoeckmann - -lib/sh/shmatch.c - - sh_regmatch: check malloc() return value, handle NULL value if it - fails. Report from Tobias Stoeckmann - - 2/22 - ---- -lib/readline/doc/rltech.texi - - rl_callback_handler_install: note that the handler function should - free the line it receives, as with readline. Suggested by - Ulf Magnusson - - Readline Signal Handling: note that application needs to clean up - readline's terminal state if it wants to handle a signal before - the line handler restores it. Suggested by Ulf Magnusson - - - 2/24 - ---- -lib/readline/histfile.c - - history_do_write,history_truncate_file: if the write fails, make sure - to set history_lines_written_to_file to 0 so we don't lose those - history entries - - 2/27 - ---- -execute_cmd.c - - execute_function: unwind-protect the value of line_number_for_err_trap, - so a function that returns a non-zero value and triggers an ERR trap - has the right value for LINENO. Any simple command in the function - body can change it. Bug report from Paul Donohue - - 3/5 - --- -lib/sh/shquote.c - - sh_backslash_quote: cast `c' to `unsigned char' before using as - index into backslash_table. Report and fix from - alexeyv.90@gmail.com - -arrayfunc.[ch] - - valid_array_reference: added second `flags' argument for future use; - currently unused - -parse.y,{redir,subst,variables,test}.c -builtins/{declare,printf,read,set}.def - - valid_array_reference: changed callers - - 3/7 - --- -lib/readline/signals.c - - _rl_handle_signal: if readline gets a SIGTSTP or SIGTTIN, block - SIGTTOU so a backgrounded readline can reset the terminal settings - appropriately, otherwise the terminal state and readline's idea - of it can get messed up. Original report from Dave Wysochanski - and Dave Anderson - -trap.c - - run_pending_traps: don't allow recursive SIGWINCH trap invocations; - they're wasteful and trying to handle a stream of signals while a - user resizes the terminal can lead to malloc errors trying to save - and restore the_pipeline multiple times. Problem reported most - recently by Martin M. S. Pederson (Fedora bash bug 1197768 - https://bugzilla.redhat.com/show_bug.cgi?id=1197768) - - reset_or_restore_signal_handlers: set pending_traps to 0 for all - signals when forking a child. TENTATIVE fix - -jobs.c - - {save,restore}_pipeline: block SIGCHLD while manipulating the_pipeline - like cleanup_the_pipeline does. XXX - may not be necessary - -lib/readline/display.c - - rl_redisplay: fixed case where multibyte character in the prompt - (e.g., \u03bb) in the last screen column causes problems with line - wrapping because the newline marker is put in the middle of the - multibyte char. Most recently reported on Ubuntu by - - -pathexp.c - - quote_string_for_globbing: if a bracket expression doesn't have a - closing right bracket, rescan it from just after the opening - bracket without treating it as a bracket expression. Bug report - from Stephane Chazelas - - 3/9 - --- -subst.c - - process_substitute: keep the last pipeline created to run a process - substitution in LAST_PROCSUB_CHILD; discard it when another one is - created - -jobs.[ch] - - discard_pipeline: now global, so process_substitute can call it - -jobs.c - - last_procsub_child: new variable, set and modified only by the process - substitution code - - find_pipeline: if the requested pid is in LAST_PROCSUB_CHILD, return - it; analogous to the way this code handles the_pipeline - - waitchld: if we find a child via find_pipeline that is a part of the - last process substitution child, mark that child appropriately. If - the child is dead, add it to the bgp list. This and the previous - change allow waiting for the most recent process substitution (the - one corresponding to $!). Original report from Stephane Chazelas - - - 3/10 - ---- -arrayfunc.c - - unbind_array_element: make sure skipsubscript() doesn't try to parse - embedded quotes in the subscript, since this has already been through - one round of word expansion before calling the unset builtin. (This - function is only called by the unset builtin). Fixes bug reported by - - - 3/17 - ---- -jobs.c - - waitchld: move code that adds the last process substitution pid to - the bgpids array from waitchld (where it can call malloc in a signal - handler context) to cleanup_dead_jobs - - 3/19 - ---- -subst.c - - parameter_brace_expand: if expanding an array in a context where word - splitting will not take place (W_ASSIGNRHS only for now), make sure - to pass the double-quoted flag to chk_atstar so we don't get the - unquoted $* behavior, which will cause unwanted word splitting. - Fixes bug reported by isabella parakiss - -arrayfunc.c - - unbind_array_element: don't assume that caller will check and pass - only array variables; don't allow non-array variables to be unset - using the `@' or `*' subscripts and don't allow any subscripts other - than 0; return -2 in those cases - - unbind_array_element: unset a non-array variable if passed a subscript - of `0' (e.g., `unbind "scalar[0]"'). This is new functionality that - parallels the ${scalar[0]} expansion - -builtins/set.def - - unset_builtin: don't check whether a variable is an array if it's - referenced using array syntax (scalar[0]); pass it to - unbind_array_element anyway and check the result. This means that - `unset scalar' and `unset scalar[0]' are equivalent - - 3/20 - ---- -builtins/set.def - - set_builtin: make `-i' an invalid option, unconditionally for now. - From a bug-bash discussion started by Peng Yu - - 3/21 - ---- -lib/readline/colors.c - - _rl_print_color_indicator: handle dangling symlinks (C_ORPHAN) and - the `target' specifier for links (dereference S_ISLNK if the target - exists). Bug report and fix from andreas@stapelspeicher.org - -{arrayfunc,subst}.c - - add code to save and restore this_command_name in places that set - this_command_name to NULL to prevent error messages from arithmetic - evaluation. Fixes bug reported by brian.carpenter@gmail.com - -builtins/mapfile.def - - do_chop: remove a new DELIM argument from the line, instead of - unconditionally removing newline - - mapfile: if -d delim is supplied and we are breaking fields at DELIM, - remove DELIM if the -t option is supplied by passing DELIM to do_chop(). - Suggested by Geir Hauge - -doc/{bash.1,bashref.texi} - - mapfile: document new -t option behavior, defaults are the same - -builtins/alias.def - - print_alias: if the first character of an alias name is `-', add a - `-- ' after `alias' to avoid option errors when trying to reuse the - output. Bug report and fix on savannah from Pasha Bolokhov - - - 3/22 - ---- -builtins/declare.def - - declare_internal: if creating a variable does not return a valid - variable in VAR, check for null variable before dereferencing it. - This happens with nameref variables referencing variables set to - the empty string. - Fixes bug reported by Arthur200000 - - 3/23 - ---- -doc/{bash.1,bashref.texi} - - INVOCATION: add language to make it clear that non-interactive login - shells execute ~/.bash_logout if they run the `exit' builtin. From a - question from Christoph Anton Mitterer - - 4/6 - --- -subst.c - - process_substitute: increment and decrement subshell_level around - calls to parse_and_execute, as in command substitution, so - $BASH_SUBSHELL gets new values in the subshell. Fixes inconsistency - pointed out by Peng Yu - -doc/{bash.1,bashref.texi} - - read: add clarifying text to note that the -N option does not split - on $IFS, but does retain backslash as an escape character subject - to -r. Report from isabella parakiss - -builtins/declare.def - - declare_internal: unless it's the last statement in a {...} block, - NEXT_VARIABLE must be protected by braces. Bug introduced in patch - from 3/22, reported by Eduardo A. Bustamante López - - - 4/7 - --- -parse.y - - shell_getc: if bash is reading input from a string that ends with an - unquoted backslash, add another backslash instead of a newline, since - the backslash and newline will disappear in normal processing. Fixes - bug with `bash -c 'eval \\; echo y' ' skipping the eval command and - setting incorrect exit status, and `bash -ic 'eval \\; echo y' ' - seeing EOF on empty line and exiting before the echo. Keep track of - backslash state with last_was_backslash; set in char reading loop. - Fixes bug reported by Eduardo A. Bustamante López - - 4/8 - --- -shell.c - - main: check for $INSIDE_EMACS as well as $EMACS when deciding whether - or not bash is being run in a GNU emacs shell window. Don't bother - checking whether $TERM is unset because variable initialization sets - it to `dumb' if unset. Fixes from Paul Eggert - -parse.y - - push_token: new function, rotates current_token through last_read_token, - saving old values like yylex() does, sets current_token to argument - -evalfile.c - - _evalfile: if current_token is yacc_EOF, push a newline as the value - of current_token instead, using push_token(). yacc_EOF can result if - sourced file doesn't end with a newline but does end with an unescaped - backslash. Fixes bug reported by Pedro Gimeno - - -lib/readline/histfile.c - - use PARAMS(x) instead of __P(x). Bug reported by Evan Gates - - - 4/9 - --- -execute_cmd.c - - execute_simple_command: if we haven't already forked, and we have - created FIFOs, turn off the no-fork optimization in the simple - command's flags. Originally reported to savannah by Kuang-che Wu as - https://savannah.gnu.org/support/index.php?108732 - - 4/10 - ---- -trap.c - - trap_if_untrapped: new function, sets a trap on a signal if that - signal is not already trapped - - maybe_set_debug_trap: new function, sets DEBUG trap to command string - argument only if it's not already trapped - -trap.h - - maybe_set_debug_trap: new extern declaration - - -builtins/source.def - - source_builtin: if the -T option isn't set, use maybe_set_debug_trap - in the unwind-protect instead of unconditionally restoring the old - trap string. That means if the sourced file changes the DEBUG trap, - that new trap will persist instead of being undone when the old - value is restored. Fixes bug reported by Scott Bronson - - -builtins/evalstring.c - - parse_string: before we jump to top_level, if we are at the `bottom' - of the parse_and_execute stack (parse_and_execute_level == 0), call - top_level_cleanup() before jumping so the right cleanup happens (e.g., - cleaning up redirections and other state). Fixes bug reported by - Sam Liddicott - - 4/15 - ---- -jobs.c - - delete_job: only add J_ASYNC (and not J_FOREGROUND) jobs to the - bgpids array, since Posix says shells only need to save the status - of async jobs. Report and fix from John Fremlin - - 4/17 - ---- -pcomplib.c - - COMPLETE_HASH_BUCKETS: increase to 256 since bash-completion is - over 300 completions by now - -variables.c - - VARIABLES_HASH_BUCKETS: constant used to size shell variables hash - table instead of relying on hash library default. Used in calls - to hash_create in create_variable_tables(), push_temp_var(), and - push_func_var(). Currently set to 1024 because why not? From a - discussion starting at - https://lists.gnu.org/archive/html/bug-bash/2015-04/msg00089.html - - initialize_shell_variables: if FUNCTION_IMPORT is not defined, the - nested conditional compilation causes syntax errors. Bug and fix - from Eric Blake - -configure.ac - - function-import: fix typo, assign to correct variable. Found as the - result of a report by Eric Blake - -shell.c - - open_shell_script: check whether or not file argument is a - directory before opening; Posix says that implementations may open - a directory with O_RDONLY. Bug report from - Eduardo A. Bustamante López - - 4/19 - ---- -ulimit.def - - fix typo in limits[] declaration of `k' - - 4/20 - ---- -configure.ac - - add template definitions set by AC_USE_SYSTEM_EXTENSIONS from a report - from Andreas Schwab - -variables.c - - FUNCTIONS_HASH_BUCKETS: constant used to size the hash tables used for - shell functions and the text of shell function definitions. Initially - set to 512, even though it's a really rare case that someone has more - than around 150 functions, even with bash-completion - - 4/21 - ---- -shell.c - - main: malloc_set_register: change arg to 0 to disable keeping track of - allocations and frees in table; change to 1 for malloc debugging on - demand. Table is too small to keep effective track of allocations on - a modern system, need to use something like valgrind - - 4/22 - ---- -shell.c - - main: move cmd_init() (initialize word desc and word list object - caches) after startup files are read so the cache doesn't get filled - up with semi-permanent storage for shell functions and variables - -execute_cmd.c - - execute_function: use maybe_set_debug_trap in the same way as source - builtin change from 4/10 to allow functions to reset a DEBUG trap - when set -T not in effect. From a report by Peng Yu - - - 4/23 - ---- -execute_cmd.c - - execute_disk_command: don't overwrite value of subshell_environment - by assigning SUBSHELL_FORK; just OR in SUBSHELL_FORK so something - like SUBSHELL_ASYNC or SUBSHELL_PIPE is preserved - -jobs.c - - wait_for: don't call give_terminal_to if running in a subshell - environment, not just if running_in_background is set; don't want - shell functions waiting for a process to complete in a pipeline to - give the terminal to the wrong process group. Part of fix for bug - reported by Valentin Bajrami - - make_child: child process should not try to give the terminal to the - pipeline_pgrp if running as part of a pipeline (SUBSHELL_PIPE in - subshell_environment); functions in execute_cmd.c don't set that - flag until after make_child returns and the child process is running. - Rest of fix for bug reported by Valentin Bajrami - - - 4/24 - ---- -redir.c - - redirection_error: if the redirection involves {varname}, only use - `varname' in the error message if the error code is < 0 (one of the - internal redirection errors, like ambiguous or bad variable name); - otherwise the issue is probably with the filename and should be treated - as usual. Fixes problem reported by Dr. David Alan Gilbert - - -configure.ac,config.h.in - - sys/ioctl.h: add check in AC_CHECK_HEADERS macro, define HAVE_SYS_IOCTL_H - -lib/readline/{rltty,terminal}.c - - sys/ioctl.h: include unconditionally for ioctl declaration, avoid - issues with `implicit declaration' warnings. Issue originally - raised on gdb list by Chen Gang - - 4/27 - ---- -lib/malloc/table.c - - mem_table: now a circular buffer showing the state of the last - REG_TABLE_SIZE allocations rather than a hash table that quickly - fills up - -builtins/declare.def - - typeset_builtin: add -n to list of supported options. Omission - reported by Valentin Bajrami - -unwind_prot.c - - use object caches instead of malloc/free to allocate and deallocate - unwind-protect elements - - uwp_init: initialize unwind-protect element object cache - -unwind_prot.h - - uwp_init: extern declaration - -shell.c - - main: call uwp_init right after calling cmd_init -- initialize all the - object caches at the same place - -lib/malloc/table.[ch] - - mlocation_table: new table to keep track of allocation locations by - file and line, functions to initialize table, record an allocation, - and dump the table to stderr - - mregister_alloc: call mlocation_register_alloc to record the location - (source file/line) for each allocation to pinpoint malloc hot spots - by number of calls. More detail than gprof - -parse.y - - set_line_mbstate: replace free/xmalloc pair with xrealloc call - - read_token_word: call alloc_word_desc instead of xmalloc so we can take - advantage of the WORD_DESC cache - - 4/28 - ---- -execute_cmd.c - - execute_simple_command: if command execution fails because the command - is a directory, and the `autocd' option is set, add a `--' argument - to the constructed `cd' command to protect against command names with - the same name as options to `cd'. Report and fix from - isabella parakiss - - 4/30 - ---- -jobs.c - - printable_job_status, j_strsignal: change calls to strcpy and sprintf - that write to retcode_name_buffer to use strncpy and snprintf to - avoid buffer overflows caused by malicious translations. Bug and fix - from Trammell Hudson - - 5/1 - --- -strtrans.c - - ansicstr: make sure the buffer is at least 12 bytes to ensure enough - space for any eventual call to u32cesc for one multibyte char - - 5/4 - --- -jobs.c - - wait_for: if an interactive shell is running a loop and waiting for - a non-builtin command to exit, and the command exits due to SIGINT, - act as if the shell received the SIGINT as well and break the loop. - This matches the behavior when the shell is running a builtin command - in a loop, and when running a non-builtin command outside a loop, and - seems more broadly useful than running the trap handler over and over - again. Report originally from Kaz Kylheku - -builtins/set.def - - unset_builtin: use different variables for keeping the state of the - -f and -v options than the loop uses to decide whether or not to - treat a name as a function or a variable. Fixes problem with - unset_function setting `sticking' after you unset a function when - invoked with no options. Bug report from Dreamcat4 - - -shell.c - - open_shell_script: set running_shell_script to 1, set to 0 in every - other case (new variable) - - main: when checking whether or not to call start_debugger, test - running_shell_script instead of dollar_vars[1]. The goal is to not - invoke the debugger for interactive shells but allow it to run for - things like `bash --debugger -i /tmp/script'. Problem reported by - Rocky Bernstein - -lib/readline/histexpand.c - - history_event_delimiter_chars: new (as yet undocumented) variable - containing by default characters that can delimit a history event - specifier without requiring a `:': "^$*%-" as the documentation has - always said. Fixes bug reported by Anders Granlund - - - 5/10 - ---- -lib/glob/gmisc.c - - match_pattern_char, match_pattern_wchar: if passed an empty string, - return a match if the first character of the pattern is `*' - -subst.c - - pat_subst: change to allow empty strings to be replaced as long as - pattern matches empty string. Report and fix from isabella parakiss - - - 5/12 - ---- -lib/sh/strtrans.c - - ansic_wshouldquote: make behavior consistent in the event of an - invalid multibyte sequence: return 1 to the caller so the string - will be $'...' quoted - -builtins/cd.def - - cd_builtin: print the right error message even if printable_filename - changes errno (e.g., EILSEQ) - -lib/sh/shquote.c - - sh_backslash_quote: in multibyte locales, even if is_basic does not - return true, backslash-quote an ASCII character that backslash_table - says should be quoted. Part of fix for bug reported by Igor - Bogomazov - -bashline.c - - directory_exists: new function, dequotes the string argument, removes - any trailing slash, and returns true if the result is a valid - existing filename - - bash_filename_stat_hook,bash_directory_completion_hook: use - directory_exists instead of calling lstat/stat on the quoted - directory name. Rest of fix for bug reported by Igor Bogomazov - - - 5/15 - ---- -aclocal.m4 - - BASH_CHECK_MULTIBYTE: when checking for locale_charset, add $LIBINTL - to $LIBS. If we're using the included lib/intl/libintl.a, it will - include a version of locale_charset - - 5/17 - ---- -lib/readline/bind.c - - sv_isrchterm: make sure we check for v[end] == 0 while in the loop - looking for whitespace. Bug report and fix from Sergio Durigan - Junior - -lib/sh/shmbchar.c - - mbstrlen,mbsmbchar: move calculation of MB_CUR_MAX out of loop; - calculate it once at beginning - -lib/sh/mbscmp.c - - mbscmp: move calculation of MB_CUR_MAX out of loop; calculate it once - at beginning - -lib/sh/mbscasecmp.c - - mbscasecmp: move calculation of MB_CUR_MAX out of loop; calculate it - once at beginning - -lib/sh/shquote.c - - sh_backslash_quote: move calculation of MB_CUR_MAX out of loop; - calculate it once at beginning - -lib/sh/casemod.c - - sh_modcase: move calculation of MB_CUR_MAX out of loop; calculate it - once at beginning - -subst.c - - expand_word_internal: move calculation of MB_CUR_MAX out of loops; - calculate it once at beginning of function (XXX should use - locale_mb_cur_max) - - 5/22 - ---- -lib/readline/rlmbutil.h - - _rl_wcwidth: new function, short-circuits wcwidth calls for ASCII - printable characters, returns 1 for those - - WCWIDTH: call _rl_wcwidth instead of wcwidth - -lib/readline/display.c - - rl_redisplay: move calculation of MB_CUR_MAX out of loop; calculate - it once at beginning. Report and patch from Ole Laursen - - - 5/24 - ---- -lib/readline/text.c - - rl_insert: change to attempt to batch-insert pending typeahead (not - pushed input or input from a macro) that maps to rl_insert. An - attempt to suppress redisplay until readline reads all typeahead -- - pasted input, for instance. Inspired by report from Ole Laursen - . XXX - need to make this a bindable - variable; already controlled by _rl_optimize_typeahead - -lib/readline/rlprivate.h - - _rl_optimize_typeahead: extern declaration - -lib/readline/doc/{hstech.texi,history.3} - - next_history: clarify under what circumstances the history offset is - incremented; suggestion from Glenn Golden - -print_cmd.c - - print_arith_command: should be compiled in if either DPAREN_ARITHMETIC - or ARITH_FOR_COMMAND is defined. Report from Flavio Medeiros - - -flags.c - - change_flag: new variable verbose_flag, set when `v' flag modified; - sets value of echo_input_at_read correspondingly - -flags.h - - verbose_flag: new extern declaration - -shell.c - - long_options: --verbose now sets verbose_flag - - main: set echo_input_at_read from verbose_flag after parsing any - long options - -builtins/fc.def - - fc_builtin: don't unwind-protect echo_input_at_read directly; set it - to 1 before calling fc_execute_file as before, and reset it to value - of global verbose_flag using set_verbose_flag called from an - unwind_protect. Report from isabella parakiss - -builtins/shopt.def - - shopt_set_debug_mode: new function, called when the extdebug shell - option changes. Right now, it sets function_trace_mode when extdebug - is enabled, and turns off when extdebug is disabled. The - documentation has always said that shopt does this. Report from - Peng Yu - - 5/27 - ---- -findcmd.[ch] - - add support for EXECIGNORE shell variable, list of extglob patterns - that prevent matching filenames from being identified as executable - files - -variables.c - - EXECIGNORE: arrange for findcmd.c:setup_exec_ignore to be called when - $EXECIGNORE changes - -variables.h - - sv_execignore: extern declaration - -doc/{bash.1,bashref.texi} - - document EXECIGNORE variable - - 5/28 - ---- -lib/readline/callback.c - - rl_callback_sigcleanup: new function, cleans up and unsets any state - rl_callback_read_char uses. Intended to be used after a signal - -lib/readline/signals.c - - _rl_handle_signal: call rl_callback_sigcleanup on SIGINT. Fixes bug - reported to python group by Martin Panter - -lib/readline/isearch.c - - _rl_isearch_cleanup: now a public function so rl_callback_cleanup can - call it - -lib/readline/search.c - - _rl_nsearch_cleanup: now a public function so rl_callback_cleanup can - call it - -lib/readline/rlprivate.h - - _rl_[in]search_cleanup: extern declarations - -lib/readline/readline.h - - rl_callback_sigcleanup: new extern declaration - -lib/readline/doc/rltech.texi - - rl_callback_sigcleanup: documented - -lib/readline/readline.h - - bump readline version to 7.0 due to addition of rl_callback_sigcleanup - - 5/29 - ---- -builtins/declare.def - - declare_internal: if we are trying to change attributes or value for - a nameref variable whose value points to an unset variable, make - sure we create a new variable whose name is the value of the nameref - variable. That is, - - declare -n foo=bar - unset foo # unsets bar - declare -i foo - - should create a (invisible) variable named `bar' with the integer - attribute. Fixes problem reported by Greg Wooledge - - -builtins/set.def - - unset_builtin: if we find a nameref variable when we look it up with - find_variable (the returned variable has a name different from what - we looked up), make sure we use that new name for the rest of the - function rather than rely on unbind_variable to do the same thing as - find_variable. Fixes problem reported by Greg Wooledge - - - unset_builtin: if we try to unset a nameref variable whose value is - not a set variable, make sure we don't try to unset the nameref - itself, but rather the variable it points to. This ensures that the - following always works as it should - - declare -n foo=bar - unset foo # unsets bar and leaves foo unchanged - -lib/readline/funmap.c - - vi-insertion-mode: make sure it maps to rl_vi_insert_mode, which is - actually what the `i' keybinding in vi_movement_keymap maps to. - Cosmetic fix from isabella parakiss - - 6/2 - --- -general.c - - conf_standard_path: moved get_standard_path here from command.def; made - public function - -general.h - - conf_standard_path: extern declaration - - - 6/3 - --- -parse.y - - parse_matched_pair: make sure that command substitution constructs - within ${...} expansions are parsed as such using parse_comsub, so - the P_FIRSTCLOSE flag doesn't stop parsing if a right brace appears - within the comsub. Report from Christos Zoulas - -findcmd.c - - search_for_command: take two new flags for FLAGS arg: CMDSRCH_STDPATH, - which means use the command -p path, and CMDSRCH_TEMPENV, currently - unused. Existing flag value of 1 now CMDSRCH_HASH - - search_for_command: don't set `path' to NULL if it wasn't found in - the temporary environment; we can use it later - - search_for_command: look for the hashed file if temp_path == 0, not - if we set path back to 0 (or path lookup failed) - - search_for_command: just call find_user_command_in_path with a - pathlist argument that's set depending on the flags passed - - find_in_path: new function, just calls find_user_command_in_path at - this point - - search_for_command: don't put non-existent files into the hash table - -findcmd.h - - CMDSRCH_*: new flags for search_for_command - - find_in_path: extern declaration - -execute_cmd.c - - execute_disk_command: check for CMD_STDPATH and call search_for_command - with CMDSRCH_STDPATH if it's set - -builtins/command.def - - command_builtin: if -p given without -v or -V, set the CMD_STDPATH - flag in the simple command we construct from the rest of the - argument list. This fixes the command -p cmd issue with changing - $PATH for the duration of `cmd's execution reported by - - -builtins/common.h - - CDESC_STDPATH: new flag for describe_command; means to use standard - path for command -pv or -pV - -builtins/command.def - - command_builtin: if -p given with -v or -V, pass the CDESC_STDPATH - flag to describe_command - -builtins/type.def - - describe_command: if given the CDESC_STDPATH flag, use find_in_path - with the conf_standard_path() result. Since `all' will never be on - with this flag, at least not yet, we can allocate and free the path - list. Fixes the bug of a temporary environment value for PATH - preceding a `command -pv' or `command -pV' persisting when the - command finishes and means we use fewer unwind-protects - - 6/4 - --- -Makefile.in (plus other Makefile.ins) - - VPATH: remove `.' from VPATH value. It's not needed any more and it - trips a GNU make 4.1 bug on Cygwin. Report and fix from Eric Blake - - -lib/readline/histfile.c - - history_tempfile: new function, takes history file name as template - and creates a temp file name including the PID - - history_truncate_file, history_do_write: instead of creating backup - and restoring it on failure, use history_tempfile to create a temp - file name, write to it, then rename to original history filename - (handling symlinks using history_restore()). Original report and - patch from Russell Stuart - -doc/{bash.1,bashref.texi} - - ulimit: clarify that -c and -f are in increments of 512 bytes when - in posix mode. Fix from Robin Johnson via - - - 6/9 - --- -execute_cmd.c - - execute_in_subshell: don't call restore_default_signal for the exit - trap, reset_signal_handlers already does the right thing and keeps - the trap string around; no need to kill trap string. Bug report - from Miroslav Koskar - - 6/11 - ---- -nojobs.c - - find_proc_slot: now takes pid as an argument to avoid finding old - procs when pids wrap around - - add_pid: pass pid to find_proc_slot to avoid multiple instances of - the same pid in the list when pids wrap around. Fixes bug reported - by Roy Keene - -execute_cmd.c - - REAP: test for job_control == 0 also to determine whether or not - to call reap_dead_jobs, since shells without job control enabled - don't report on background process status - -doc/bash.1,lib/readline/doc/hsuser.texi - - history: clarify documentation of -a option to note that it will not - append the same line to the history file more than once. Fixes - problem reported by Reuben Thomas - - 6/12 - ---- -execute_cmd.c - - execute_in_subshell: don't bother decrementing subshell_level before - this returns; the caller will just exit. This means that - $BASH_SUBSHELL will have consistent values in the subshell and any - subsequent exit trap. Fixes bug reported by Miroslav Koskar - - - shell_execve: before longjmp to subshell_top_level, call reset_parser - to free up any input line and stack of pushed strings - -parse.y - - mk_alexpansion: if the last character of the alias is a shell - metacharacter, don't add a space to the string following the alias - value, since that will change the meaning of the command. THIS IS - NOT BACKWARDS COMPATIBLE AND MAY REQUIRE REVERTING. Inspired by an - email message from Jilles Tjoelker to austin - group - - 6/13 - ---- -subst.c - - dequote_string: don't turn strings consisting of a single CTLESC - into empty strings; return them unmodified. The idea is that there - is nothing to quote. This means that something like - c=$'\001' - x=$c - results in x containing '\001' when IFS=$'\001'. See if this will - cause problems by adding a debugging statement in the code - - 6/15 - ---- -parse.y - - CHECK_FOR_RESERVED_WORD: don't return ESAC when you read `esac' - after a `|' while in a case pattern list (parser_state & PST_CASEPAT). - This is Posix grammar rule 4 - (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02) - - 6/16 - ---- -jobs.c - - wait_for: make sure we queue SIGCHLD signals if a SIGCHLD trap - handler is running (signal_in_progress or IMPOSSIBLE_TRAP_HANDLER), - since we allow recursive trap invocations now - - wait_for: make sure we treat SIGCHLD as trapped if the trap handler - is set to IMPOSSIBLE_TRAP_HANDLER so we don't miss signals during - calls to run_sigchld_trap() - -trap.c - - run_pending_traps: since we allow recursive trap handler invocations, - make sure we set pending_traps[SIGCHLD] to 0 while we mark the - signal handler in progress (SIG_INPROGRESS) and don't reset it to 0 - after run_sigchld_trap returns in case more SIGCHLDs have been - queued while it's running - - 6/22 - ---- -lib/readline/readline.c - - _rl_dispatch_subseq: if we shadowed any function, not just self- - insert, bind that function to the key we shadowed and dispatch on it. - This preserves and dispatches off the original key, not ANYOTHERKEY, - and makes sure we are dispatching from a keymap with the right key - binding. Fixes bug reported by Carlos Pita - - - 6/23 - ---- -bashline.c - - attempt_shell_completion: don't read past the end of rl_line_buffer - while skipping assignment statements before command names. Fix for - bug reported by Hanno Böck - -lib/readline/parens.c - - _rl_enable_paren_matching: make paren matching work in vi insert - mode. Really, this time. Bug report from Carlos Pita - - - 6/29 - ---- -parse.y - - parse_comsub: when starting to parse a word, make sure that we set - lex_rwlen to 0 along with lex_wlen if we are in a position where we - can read a reserved word. Fixes bug reported by Nathan Neulinger - - - 6/30 - ---- -sig.h - - include unconditionally and rely on guards in sig.h to - keep from including it more than once. Irix 6.5 defines SIG_DFL - in other files and defeats the test of SIG_DFL. Fixes bug - reported by Klaus Ziegler - -alias.c - - ALIAS_HASH_BUCKETS: table size increased to 64 - - 7/7 - --- - -{jobs,nojobs}.c - - wait_sigint_cleanup: new function, to be called by longjmp targets - for wait_intr_buf. Performs any necessary cleanup of internal waitchld - state before going back to top level - -jobs.h - - wait_sigint_cleanup: new extern declaration - -builtins/wait.def - - wait_builtin: call wait_sigint_cleanup after longjmp back to - wait_intr_buf on interrupt - -[bash-4.4-alpha frozen] - - 7/7 - --- -bashline.c - - attempt_shell_completion: when skipping assignment statements, don't - skip past rl_point to find the word on which to perform programmable - completion. Fixes bug reported by Hanno Böck - - 7/10 - ---- - -pcomplib.c - - compspec_copy: set the refcount on the copy to 1, since it's a freshly - allocated copy and there are no other pointers to it. Fixes memory - leak from gen_progcomp_completions - -lib/readline/complete.c - - printable_part: if the pathname passed is just `/', just return it - instead of potentially reading before the `/'. Fixes bug reported - by Hanno Böck - - 7/11 - ---- -support/man2html.c - - change calls to malloc to use xmalloc; provide standard xmalloc - definition. Report from Bill Parker - -builtins/wait.def - - wait_intr_flag: set to denote validity of wait_intr_buf as target - for longjmp; reset by WAIT_RETURN macro; should always be 0 when - wait_builtin returns - -quit.h - - CHECK_WAIT_INTR: now also checks wait_intr_flag to ensure valid state - of wait_intr_buf before sh_longjmp - -{jobs,nojobs}.c - - wait_intr_flag: extern declaration for use by CHECK_WAIT_INTR - -sig.c - - wait_intr_flag: set back to 0 every place the shell resets state after - a jump to top_level - - sigint_sighandler: only set wait_signal_received if wait_intr_flag - indicates that the wait builtin has correctly set wait_intr_buf. - Final fix for bug reported by Ondrej Oprala - -subst.c - - parameter_brace_expand: fix so that ${!vvv@} is not interpreted as - introducing a `@' operator, but instead retains its meaning as all - variables whose name begins with vvv. Fixes bug reported by - konsolebox - - 7/14 - ---- -execute_cmd.c - - execute_connection: remove the fork optimization from and AND_AND - and OR_OR cases; it has trouble with `a && b && c', since the `&&' - is left-associative. Putting that code here can result in unwanted - fork optimizations since the `b' will end up as `second' on a - recursive call to execute_command. Bug reported by Mike Frysinger - - -builtins/evalstring.c - - optimize_fork: moved code from execute_connection to here; checks - whether the RHS of a && or || passes the suppress_fork() tests and - turns on the NO_FORK bit if so - - parse_and_execute: if suppress_fork() tests fail, check whether the - command to be executed is a connection and attempt to optimize the - fork for the right side using optimize_fork(). The key is dealing - with the entire command passed to `bash -c' or `eval' - -builtins/common.h - - optimize_fork: new extern declaration - -execute_cmd.c - - execute_command_internal: enable code put in to undo redirections - before exiting the shell due to `set -e' in the case of a shell - function that gets command-not-found or a syntax error. Reported - back in May, 2014 by Mark Ferrell - -bashhist.c - - bash_history_inhibit_expansion: enable change from 1/10 that skips - over history expansion character in command and process - substitution - - 7/15 - ---- -lib/readline/{history,undo}.c - - replace_history_data now _hs_replace_history_data - - 7/16 - ---- -lib/readline/readline.c - - make sure _rl_to_lower doesn't ever get characters that are outside - of its valid range by casting arg to unsigned char - -lib/readline/colors.h - - change completion prefix color (C_PREFIX) to be the same as C_SOCK, - which is less likely to collide with file type colorings (magenta) - -lib/readline/complete.c - - fnprint: now takes an additional argument: the full, expanded pathname - corresponding to the `toprint' argument - - fnprint: don't zero out prefix_bytes if we're not printing the - ellipisis but we still want to use prefix_bytes for displaying - the common prefix in a color - - print_filename: move colored-stats display responsibility into fnprint - - fnprint: change so colored-prefix and colored-stats can cooperate - and display filenames with multiple colors: one for the prefix and - one for the file type. The prefix is displayed in the prefix color - and the remainder of the pathname, if any, is displayed in the color - corresponding to the file type. Report and suggestion from Mike - Frysinger - - 7/17 - ---- -lib/readline/readline.[ch] - - rl_readline_state: now unsigned long, prepare for more than 32 states - - - 7/18 - ---- -lib/readline/history.h - - history_offset: now declared here, was always a global variable - - copy_history_entry: now declared here, part of the public interface - - alloc_history_entry: now declared here, part of the public interface - - 7/20 - ---- -lib/readline/readline.h - - RL_STATE_CHARSEARCH: new state, for vi mode character search. Was - previously handled by simply setting _rl_callback_func - -lib/readline/vi_mode.c - - rl_domove_motion_callback: split into two functions, remaining code - after _rl_dispatch call goes into new function - _rl_vi_domove_motion_cleanup - - rl_vi_char_search: set RL_STATE_CHARSEARCH - - rl_vi_char_search: sets `i2' member of callback data to the key used - to invoke the char search - - _rl_vi_callback_char_search: unset RL_STATE_CHARSEARCH after reading - the character to find - - _rl_vi_domove_motion_cleanup: make sure RL_STATE_VIMOTION is unset in - all cases where this function returns - - _rl_vi_domove_motion_cleanup: use `end' member of vi motion context - as value of rl_end to restore after adding blank at end of line in - rl_domove_motion_callback; avoids need to keep `old_end' and somehow - pass it between the two functions - -lib/readline/rlprivate.h - - _rl_vi_domove_motion_cleanup: new extern declaration - -lib/readline/callback.c - - rl_callback_read_char: handle RL_STATE_CHARSEARCH, including case - where char search is vi motion command for d/c/y/m and RL_STATE_VIMOTION - is set when this is called. Last of set of fixes for bug reported - by Carlos Pita with vi-mode `dty' command - in callback mode - - 7/21 - ---- -subst.c - - command_substitute, process_substitute: add QUIT call in the child - after restoring original signal handlers to catch post-fork SIGINT - or terminating signal - -jobs.c,nojobs.c - - make_child: after forking, clear interrupt_state in child - before restoring signal mask so children get their own set of - interrupts - - 7/22 - ---- -lib/sh/shquote.c - - sh_double_quote: since all uses of the return value from this function - are for display and not subject to subsequent expansion, we don't - need to protect CTLESC and CTLNUL with CTLESC. Bug report and fix - from isabella parakiss - -parse.y - - decode_prompt_string: need to protect literal instances of CTLESC - and CTLNUL with CTLESC, even if they are not coming out of one of - the backslash-expansions - -subst.c - - make_internal_declare: fixed memory leak; make_internal_declare should - free the memory it allocates to construct the word list. From Red - Hat bug 1245233; https://bugzilla.redhat.com/show_bug.cgi?id=1245233 - -lib/readline/readline.c - - _rl_dispatch_subseq: when checking whether an ESC in vi insert mode - should be treated as part of a key sequence or as a single char, - make sure we are getting input from the keyboard before we check - _rl_input_queued(). If we are getting input from a macro, this - causes a needless delay. Report from Carlos Pita - - - 7/23 - ---- -input.c - - save_bash_input: before checking to see whether or not a new fd has a - stale associated buffer, make sure that the new fd is within bounds. - Bug report and fix from Alexey Makhalov - - - 7/24 - ---- -doc/{bash.1,bashref.texi} - - note that the `return' builtin accepts arguments beginning with `-' - without requiring `--' - - 7/27 - ---- -examples/loadables/Makefile.in - - add variables and targets to support `make install'; installs - supported builtins in $(libdir)/bash - - 7/28 - ---- -lib/readline/{readline,rlprivate}.h, lib/readline/display.c - - rearrange some structure members for better alignment and to reduce - padding. Fix from - -tests/run-* - - use BASH_TSTOUT instead of hardcoded /tmp/xx as output file - -trap.[ch] - - maybe_set_error_trap: set a trap for the ERR trap if it is not already - trapped; similar to maybe_set_debug_trap back from 4/10 - -lib/malloc/malloc.c - - internal_free: make sure `ubytes' is initialized if MALLOC_WATCH is - defined and we'll be passing it to _malloc_ckwatch. Report from - Flavio Medeiros - -execute_cmd.c - - execute_function: use maybe_set_error_trap in the same way as - maybe_set_debug_trap. Fixes bug reported by David Waddell - - - 7/29 - ---- -jobs.c - - wait_for: no longer need to call job_signal_status when checking - whether a comsub shell reaped a child that died due to SIGINT; code - now uses child_caught_sigint - - 7/30 - ---- -builtins/exec.def - - exec_builtin: after call to restore_original_signals, need to call - default_tty_job_signals to undo changes done by initialize_job_signals. - Fix for problem reported by Andreas Schwab - -doc/{bash.1,bashref.texi} - - clarify definition of metacharacter to explicitly include newline; - prompted by report from George Gallo - - 8/3 - --- -lib/readline/search.c - - _rl_free_history_entry: should be void, not int. Report from - Dilyan Palauzov - -general.h - - sh_load_func_t, sh_unload_func_t: new function pointer types, used by - enable for load and unload hook functions - -builtins/enable.def - - dyn_load_builtin: attempt to execute a function named - BUILTIN_builtin_load, where BUILTIN is the name of the command being - loaded. If that function returns 0, the load fails - - dyn_unload_builtin: attempt to execute a function named - BUILTIN_builtin_unload, where BUILTIN is the name of the command - being unloaded. It offers a dynamic builtin a way to clean up after - itself. Inspired by suggestion from Piotr Grzybowski - in response to a bug report from isabella - parakiss - - 8/6 - --- -lib/readline/colors.[ch] - - _rl_print_color_indicator: now takes `const char *' argument - -lib/readline/complete.c - - colored_stat_start: now takes `const char *' argument - -lib/malloc/table.h - - ma_table_t: `file' member is now `const char *' - -lib/malloc/table.c - - mlocation_register_alloc: make sure variable assigned to `file' in - ma_table_t is of type `const char *'. Fixes from Dilyan Palauzov - - -lib/termcap/termcap.[ch] - - tputs: should return int instead of void - -lib/readline/readline.h - - RL_STATE_DONE: correct value, avoid collision - -lib/readline/vi_mode.c - - _rl_vi_redoing: now global, added _rl_ prefix to `vi_redoing' - -lib/readline/readline.c - - _rl_subseq_result: call _rl_dispatch_subseq instead of rl_dispatch to - avoid changing _rl_dispatching_keymap - - _rl_subseq_result: in the -2 case, set _rl_dispatching_keymap to the - map passed as an argument. Without this, vi mode doesn't call - rl_vi_set_last when it should - - _rl_dispatch_subseq: if redoing a vi mode command with `.' - (_rl_vi_redoing != 0) in callback mode and we're indirecting into - another keymap that has shadowed the key corresponding to the command - we are redoing, just call _rl_subseq_result immediately: vi redo - doesn't need to read any additional input, and rl_vi_redo assumes - that a single call to rl_dispatch is sufficient. Fixes bug reported - by Carlos Pita - - 8/7 - --- -subst.c - - parameter_brace_expand: if a substitution (parameter expansion) error - occurs, and shell_compatibility_level is <= 43, return expansion error - as in all previous versions. If shell_compatibility_level is > 43, - a posix-mode non-interactive shell will consider this a fatal error. - Problem reported by Christian Neukirchen - -doc/bashref.texi - - documented that word expansion errors cause fatal errors in posix mode - non-interactive shells - - 8/8 - --- -subst.h - - SD_COMPLETE: skip_to_delim being called as part of word completion - - SX_COMPLETE: one of the string_extract functions being called as - part of word completion - -bashline.c - - find_cmd_start,find_cmd_end,find_cmd_name: call skip_to_delim with - SD_COMPLETE flag - -subst.c - - skip_double_quoted: takes new flags argument; changed callers - - skip_double_quoted: if flags argument includes SX_COMPLETE, pass it - to extract_command_subst - - extract_command_subst: if flags&SX_COMPLETE, call - extract_delimited_string instead of xparse_dolparen, since completion - may call this for unterminated command substitutions. Fixes - (imperfectly) bug reported by Ingo Ruhnke - - skip_to_delim: if passed the SD_COMPLETE flag, pass the SX_COMPLETE - flag to skip_double_quoted - - char_is_quoted: pass SX_COMPLETE flag to skip_double_quoted - - unclosed_pair: pass SX_COMPLETE flag to skip_double_quoted - - 8/9 - --- -execute_cmd.c - - time_command: catch longjmps to top_level and print command timing - statistics even after a jump to top_level. Fixes issue reported by - Sam Watkins - - 8/10 - ---- -config-top.h - - OPENLOG_OPTS: if SYSLOG_HISTORY is defined, define to LOG_PID, so - each message is tagged with the pid - -bashhist.h - - bash_syslog_history: the first time it's called, call openlog with - OPENLOG_OPTS and SYSLOG_FACILITY - - 8/11 - ---- -doc/{bash.1,bashref.texi} - - GROUPS,FUNCNAME: change description to note that assignments are - silently ignored, but do not return an error (which would constitute - an assignment error and cause posix mode shells to abort). Problem - pointed out by Grzegorz Bajson - - 8/12 - ---- -subst.c - - parameter_brace_expand_indir: if the value of the indirectly expanded - variable isn't something that the shell would expand if it were inside - ${}, error out right away before calling parameter_brace_expand_word. - Fixes problem reported by isabella parakiss - - parameter_brace_expand: handle returning &expand_wdesc_error or - &expand_wdesc_fatal from parameter_brace_expand_indir in case it does - that someday - - 8/13 - ---- -jobs.c - - {save,restore}_pipeline: saved_pipeline now a linked list of pipelines, - new ones allocated in save_pipeline and freed in restore_pipeline. - This allow multiple nested calls to save_pipeline (e.g., in traps - and then in process substitution). Fix for bug reported by isabella - parakiss - -print_cmd.c - - named_function_string: if printing a function with the same name as a - reserved word, add the `function ' keyword before the name to avoid - parsing problems when trying to reuse it as input. Fix for bug - reported by isabella parakiss - - 8/14 - ---- -lib/readline/text.c - - rl_insert: when optimizing typeahead, make sure we set rl_last_func - ourselves if we set pending input, since the mainline code path - won't set rl_last_func if input is pending. Fixes bug reported by - Hiroo Hayashi - - 8/15 - ---- -builtins/type.def - - describe_command: if using the short description (CDESC_SHORTDESC) in - posix mode, describe posix special builtins as such. Requested by - Stephane Chazelas - -builtins/enable.def - - BASH_LOADABLES_PATH: a colon-separated list of directories where bash - looks for loadable builtins specified as arguments to `enable -f' - -doc/{bash.1,bashref.texi} - - BASH_LOADABLES_PATH: document new shell variable - -configure.ac,Makefile.in,builtins/Makefile.in - - loadablesdir: set in configure, substitute into Makefiles. Reserved - for future use - - 8/18 - ---- -subst.c - - shell_expand_word_list: if make_internal_declare fails, make sure to - propagate that error return back and make the assignment statement - fail. Fixes seg fault reported by Sergey Tselikh - - 8/20 - ---- -builtins/declare.def - - declare_internal: made a slight tweak to the warning message about - quoted compound assignments by printing it only if the array (indexed - or assoc) does not already exist - - 8/21 - ---- -braces.c - - mkseq: call strvec_dispose before throw_to_top_level if we saw SIGINT - to avoid a memory leak - -trap.c - - maybe_set_return_trap: set the RETURN trap to string if it's not - already trapped, in the same way as the debug and error traps - -execute_cmd.c - - execute_function: use maybe_set_return_trap to allow functions to set - return traps that persist across calls even if function tracing is - enabled - -lib/readline/input.c - - rl_gather_tyi: make sure errno reset to 0 after select call, for - ioctl and read - - rl_gather_tyi: if read returns -1/EIO, return -1 - - rl_read_key: if rl_gather_tyi returns -1/EIO, return READERR if in - RL_STATE_READCMD (reading command in readline_internal_char), EOF - if not (like rl_getc). Continue to return '\n' on other errors; - rl_done = 1 in any case. Fix for issue reported by - Lubomir Rintel - -lib/readline/{misc,text,vi_mode}.c - - fix return values from rl_read_key to handle < 0 - - 8/22 - ---- - -parse.y - - parsing_redirection: macro that expands to true if the last read - token (always passed as an argument) is a redirection token that - will leave us reading a word that's the target of the redirection - - command_token_position: make sure that even if the parser state - indicates we are reading a simple command (PST_REDIRLIST), we do - not perform alias expansion on a WORD that is part of a redirection, - using parsing_redirection() to do so. Fixes but reported to Red Hat - by Robert Alm Nilsson - https://bugzilla.redhat.com/show_bug.cgi?id=795795 - -builtins/declare.def - - declare_internal: only print the warning now if the variable is not - already an array or if we are not creating an array with -a or -A, - cuts down the spurious warnings - - declare_internal: even if the rhs of the assignment looks like a - compound array, if we're not assigning to an existing array or we're - not creating an array, make it an array subscript assignment. This - means things like declare a[1]='(foo)' and a[1]='(foo)' behave - identically - -builtins/help.def - - wdispcolumn: change use of displen and add new dispchars variable to - deal with locales where each wide character does not take up one - column position. Fix for bug reported by Mingye (Arthur) Wang - - - 8/23 - ---- -sig.c - - sigint_sighandler: if we get a SIGINT while this_shell_builtin == - wait_builtin, perform the special handling only if wait_intr_flag - is non-zero, don't just use it to set wait_sigint_received. This - makes sure we run bashline_set_event_hook. Fixes bug reported by - isabella parakiss - - 8/25 - ---- -subst.h - - SD_HISTEXP: new flag for skip_to_delim, indicates we are looking for - the history expansion character (special double quote handling) - - skip_to_delim: handle SD_HISTEXP flag, changes double quote handling - to be similar to history library: don't call skip_double_quote, make - sure single quotes aren't special in double quotes, but continue to - skip over $(), ${}, and other similar constructs - - 8/27 - ---- -support/bash.pc.in - - new file, pkgconfig template for bash, installed to support nascent - loadable builtins dev environment - -examples/loadables/Makefile.inc - - new file, example Makefile with correct definitions for loadable - builtin development - -configure.ac - - headersdir: directory where headers get installed to support loadable - builtin development - - examples/loadables/Makefile.inc, support/bash.pc: create - -Makefile.in - - INSTALLED_HEADERS, INSTALLED_BUILTINS_HEADERS, INSTALLED_INCFILES, - CREATED_HEADERS: new variables holding names of include files to - install into $(headersdir) for loadable builtin development - - install-headers,install-headers-dirs: new targets to support - installing headers into $(headersdir) and subdirectories for loadable - builtin development - - uninstall-headers: target to uninistall headers in $(headersdir) - - uninstall: call uninstall-headers whether or not install-headers - was done; add uninstall in examples/loadables - - install: add install in examples/loadables - - clean: add clean in examples/loadables - -examples/loadables/Makefile.in - - install-supported, install-unsupported: new targets, make install - chooses one based on $(SHOBJ_STATUS) - - install-supported: now cds to the top level build directory and - installs the header files - - install-supported: now installs Makefile.inc to $(loadablesdir) as - an example - - uninstall-supported,uninistall-unsupported: uninstall targets, - make uninstall chooses one based on $(SHOBJ_STATUS) - - 8/31 - ---- -lib/glob/Makefile.in - - CPPFLAGS: move after ${INCLUDES} so library-specific include paths - take precedence. This is what the other parts of the shell do. - Report from Poor Yorick - -builtins/read.def - - reset_alarm: cancel alarm before restoring signal handler to avoid - possible race condition. Report and fix from Oleg Popov - - -subst.c - - string_extract_verbatim: if SEPARATORS is "'", don't short-circuit - to string_extract_single_quoted unless the SX_NOCTLESC flag is set. - Callers expect this function to honor CTLESC, even to quote a single - quote. Fixes bug reported by isabella parakiss - and several others - - 9/2 - --- -include/chartypes.h - - TOCTRL: handle '?' by special-casing it to 0x7f. Fixes a problem - with $'\c?' reported by Helmut Karlowski - -redir.c - - write_here_string: don't word-split the here string document. The - bash documentation has always said this doesn't happen, even though - bash has done so for years, and other shells that implement here- - strings don't perform any word splitting. The practical effect is - that sequences of IFS characters are collapsed to spaces. Fixes - bug reported by Clint Hepner - - 9/3 - --- -doc/{bash.1,bashref.texi} - - add \? to the list of backslash escapes expanded by $'...' ANSI-C - quoting. It was expanded but not documented - -lib/readline/util.c - - _rl_audit_tty: updated from Red Hat patch - -lib/readline/readline.c - - HAVE_DECL_AUDIT_USER_TTY: correct #define check - - 9/13 - ---- -shell.c - - read_from_stdin: make sure value set to 1 appropriately if the shell - is reading from standard input, as Posix seems to specify (?) - -lib/readline/kill.c - - _rl_copy_to_kill_ring: don't assume that rl_kill_ring has been - allocated if _rl_last_command_was_kill is non-zero; make sure it's - non-null before indexing into it - - 9/15 - ---- -variables.c - - initialize_shell_variables: cope with a NULL env pointer. Fixes bug - reported by ziyunfei <446240525@qq.com> - - 9/16 - ---- -builtins/exec.def - - exec_builtin: if -c is supplied, pass an empty array instead of a NULL - pointer to shell_execve - -variables.c - - set_pwd: only believe $PWD if it begins with a slash; try to - canonicalize it and set it to physical path if canonicalization fails. - Reported by ziyunfei <446240525@qq.com> - - 9/17 - ---- -subst.c - - do_compound_assignment: make sure to dispose of word list generated - by expand_compound_array_assignment; fixes memory leak reported in - https://bugzilla.redhat.com/show_bug.cgi?id=1264101 - -variables.c - - adjust_shell_level: clamp the value of shell_level at 1000 and reset - there, instead of > 1000, since the itos replacement code doesn't - handle the value 1000. Fixes bug reported by ziyunfei - <446240525@qq.com> - -shell.h,parse.y - - save_parser_state,restore_parser_state: now save and restore - redir_stack, short-circuiting if need_here_doc == 0. If we save a - non-zero value for need_here_doc, we have to make sure there is - something valid for gather_here_documents to work on. Fixes bug - reported by Brian Carpenter - - 9/18 - ---- -array.c - - array_to_assign: use ansic_shouldquote to check whether each element - value contains non-printable characters and use ansic_quote to - generate the value instead of using sh_double_quote unconditionally - -assoc.c - - assoc_to_assign: if either the key or the value of an associative - array element contains non-printable characters (ansic_shouldquote - returns true), use ansic_quote to quote them instead of using double - quotes unconditionally - - 9/19 - ---- -subst.c - - pat_subst: handle REP being NULL. Fixes bug reported by Brian - Carpenter - -builtins/evalstring.c - - parse_string: if we get a longjmp to top_level with DISCARD as the - code (in which case we are going to go on), return -DISCARD to our - caller (always xparse_dolparen) after doing our own cleanup instead - of calling jump_to_top_level - -parse.y - - xparse_dolparen: if parse_string returns < 0, do the appropriate - cleanup and then jump_to_top_level with the negative of the return - value. This allows us to do the appropriate parser cleanup in - case we're not going to exit the shell. Fixes bug reported by Brian - Carpenter - -subst.c - - extract_delimited_string: if a recursive call to one of the extract_ - functions or a call to ADVANCE_CHAR leaves i past the end of the - string, cut the loop off at the end of the string. Fixes bug - reported by Brian Carpenter - - 9/20 - ---- -subst.c - - get_var_and_type: return appropriate values if variable indirection - results in a NULL variable. Fixes bug reported by Brian Carpenter - - -lib/readline/history.c - - history_get_time: handle strtol overflows caused by malicious - modifications to timestamps in the history file. Fixes issue - reported by rens@endoria.net - - 9/21 - ---- -lib/readline/rlconf.h - - ENABLE_AUDIT_TTY_SUPPORT: now undefined (off) by default - - 9/24 - ---- -jobs.c - - waitchld: if we get a SIGINT while waiting for a child to exit, but - the kernel doesn't interrupt the waitpid(2) call, assume the child - caught SIGINT if it exited for some reason other than SIGINT. Fix - suggested by Stephane Chazelas - -input.c - - make_buffered_stream: use B_TEXT in buffered stream flags instead - of (typo) O_TEXT. Report and fix from Eric Blake - - 9/27 - ---- -execute_cmd.c - - shell_execve: call reset_parser before calling initialize_subshell, - which calls delete_all_aliases. reset_parser wants to free the - pushed string list, which has pointers back into the alias table - (use after free) - - execute_simple_command: if we fork for an async command, make sure - the child process increments shell_level before performing any - word expansions, so $BASH_SUBSHELL is incremented. Fixes issue - reported by ziyunfei <446240525@qq.com> - - 10/1 - ---- -builtins/kill.def - - kill_builtin: make -L equivalent to -l for compatibility with other - (Linux) versions of kill - -doc/{bash.1,bashref.texi} - - kill: document new `-L' option - - 10/2 - ---- -[bash-4.4-beta frozen] - - 10/5 - ---- -doc/{bash.1,bashref.texi} - - LC_TIME: document that the shell recognizes it and calls setlocale - when it changes; and that the shell uses it for time formatting - - 10/6 - ---- -subst.c - - skip_single_quoted: now takes an additional `flags' argument, like - skip_double_quoted; changed callers - - skip_single_quoted: now pays attention to SX_COMPLETE flag, allows - backslash to escape single quote, like $'...' allows - - skip_to_delim: added case where we are completing and we are - skipping over a $'...' string to call skip_single_quoted with - SX_COMPLETE flag to allow backslash to quote single quote. Fixes - bug reported by Daniel Colascione - - char_is_quoted: make analogous changes to handle $'...' so we can - accommodate $'ab \' cd' - - 10/11 - ----- -subst.c,bashjmp.h - - no_longjmp_on_fatal_error: now global so other parts of the shell can - use it - -arrayfunc.c - - expand_array_index: if no_longjmp_on_fatal_error is non-zero, don't - longjmp to top_level, just return 0. Fixes bug reported by - isabella parakiss - -subst.c - - CQ_RETURN: restore old value of no_longjmp_on_fatal_error (oldjmp); - make sure all callers (skip_matched_pair, skip_to_delim, - char_is_quoted) save no_longjmp_on_fatal_error to oldjmp before - setting it to 1 - -expr.c - - expr_streval: if longjmping after an unbound variable error, jump - back to expr toplevel (evalbuf) if no_longjmp_on_fatal_error is set - in an interactive shell - -variables.c - - push_func_var: if pushing an array variable, such as when a variable - in the temporary environment is promoted to an array by mapfile when - the shell is in posix mode (so variable assignments preceding special - builtins or shell functions persist in the shell environment after - the builtin returns), make sure to copy the array or hash table so - the variable is duplicated correctly. Fixes seg fault reported by - Linda Walsh - - 10/13 - ----- -variables.c - - initialize_shell_variables: add call to sv_shcompat, so BASH_COMPAT - can be set in the initial environment - -execute_cmd.c - - execute_function: set loop_level to 0 only if shell_compatibility_level - is greater than bash-4.3; this was kind of an incompatible change. - Report from Carlos Pita - -COMPAT,doc/{bash.1,bashref.texi} - - compat43: added loop_level changes to description - - 10/15 - ----- -lib/sh/casemod.c,lib/readline/display.c - - make sure mb_cur_max variable is defined outside of HANDLE_MULTIBYTE - if it's used outside HANDLE_MULTIBYTE. Fixes from Greg Wooledge - - -support/Makefile.in - - bash.pc: remove as part of distclean, not clean. Report from Andreas - Schwab - - 10/17 - ----- -subst.c - - array_var_assignment: make sure to call quote_string or quote_escapes - on the assignment string, so spaces in the assignment survive word - splitting. Fixes bug reported by isabella parakiss - - - 10/20 - ----- -doc/{bash.1,bashref.texi} - - word splitting: make sure that newline is listed as one of the IFS - whitespace characters. Fixes omission reported by ziyunfei - <446240525@qq.com> - -lib/readline/histfile.c - - history_do_write: make sure that we only create and use the tempfile - if the history file exists and is a regular file. Reported several - times, most recent check the result of a report from - - - 10/22 - ----- -jobs.c - - delete_all_jobs: if running_only == 0, we are eventually going to - clear the bgpids list, so don't bother to add pids to it in - delete_job (call with DEL_NOBGPID flag if running_only == 0) - - 10/24 - ----- -jobs.[ch] - - bgpids: new implementation from a patch from John Fremlin - , uses an array for the list of the last CHILD_MAX - terminated background pids, and a separate hash table to search it. - The storage can be freed as a unit, and the size of the hash table - (currently 4096) is independent of the size of the bgpids table - -subst.c - - inherit_errexit: new variable to control whether or not command - substitution inherits the -e (errexit) option. Disabled by default - -general.c - - posix_initialize: set inherit_errexit = 1 when Posix mode is enabled - -builtins/shopt.def - - inherit_errexit: new shell option, tracks value of inherit_errexit, - allows command substitution to inherit the setting of errexit without - posix mode. From a request and patch submitted by Christoph Gysin - - -{version,version2}.c - - use #if HAVE_SNPRINTF instead of #if defined in case configure - decides to #define it to 0. Fixes problem reported by Klaus Ziegler - - -configure.ac - - when checking for sys/resource.h, make sure to include - for the benefit of both old systems that require it and new versions - of autoconf that require a header file to compile to report its - presence. Reported by Klaus Ziegler - - 10/26 - ----- -subst.h - - SD_ARITHEXP: new flag value for skip_to_delim, supports parsing - arithmetic expressions in parameter expansions - -subst.c - - skip_to_delim: handle SD_ARITHEXP flag by skipping parentheses for - subexpressions and allowing ?: expression to not terminate an - arithmetic expression delimited by `:' - - skiparith: just call skip_to_delim with the SD_ARITHEXP option and - the right delimiter string and return the right result. Fixes bug - reported by - -include/shmbchar.h - - strip out everything except what is needed to support is_basic and - similar functions, since the mbchar_t typedef apparently conflicts - with some AIX-specific type definition. Problem reported by - Michael Felt - - 10/27 - ----- -builtins/{set,ulimit}.def - - {set,ulimit}_builtin: make sure that --help is treated the same as - -? and prints a message and returns. Fixes bug reported by ziyunfei - <446240525@qq.com> - -builtins/*.def - - make sure to consistently use builtin_help() instead of mix of that - function and builtin_usage() - - 10/29 - ----- -doc/{bash.1,bashref.texi} - - BASH_CMDS, BASH_ALIASES: note that removing elements from these - array variables is not currently reflected in the command hash - table and alias list, respectively. Reported by isabella parakiss - - - 10/30 - ----- -eval.c - - reader_loop: if PS0 is set in an interactive shell, expand and - display it after reading a (complete) command but before executing - it. This differs from the DEBUG trap because the DEBUG trap is - executed once for each simple command (and some others, like each - time through a for loop). From a patch submitted by Dan Stromberg - - -parse.y - - prompt_again: set ps0_prompt from $PS0 in an interactive shell - -doc/{bash.1,bashref.texi} - - PS0: document new prompt string - - 11/3 - ---- -subst.c - - cond_expand_node: if special > 0, remove quoted nulls from the word - list, since no word splitting takes place. Fixes bug reported by - Corentin Peuvrel - - 11/4 - ---- -doc/{bash.1,builtins.texi} - - inherit_errexit: add to shopt description; modify Posix mode - description - - 11/9 - ---- -lib/readline/util.c - - rl_tilde_expand: fix out-of-bounds read caused when this function - is invoked with rl_point == 0. Bug reported by Hanno Böck - - - 11/11 - ----- -{nojobs,jobs}.c - - get_original_tty_job_signals: force the original signal disposition - for SIGTSTP/SIGTTIN/SIGTTOU to SIG_DFL in interactive shells. This - will force child processes to get SIG_DFL even if the shell is - started with those signals ignored. From a bug report from - Keith Thompson - - 11/13 - ----- -make_cmd.c - - make_function_def: if a function is being defined without a source - file, and the shell has not been initialized, assume that the - function is being imported from the environment and set the - source_file struct member to "environment". Set to "main" if the - shell has been initialized. Fixes bug reported on savannah by - Arno-Can Uestuensoez - https://savannah.gnu.org/support/index.php?108903 - -subst.c - - skip_to_delim: if the shell is in posix mode (posixly_correct != 0) - and performing history expansion ((flags & SD_HISTEXP) != 0), allow - double quotes to quote the history expansion character. TENTATIVE - CHANGE, inspired by - https://savannah.gnu.org/support/index.php?108491 - - 11/14 - ----- -jobs.c - - wait_for: modify change from 4/23 to only give the terminal to - shell_pgrp if not running in the background and subshell_environment - indicates we're not in a pipeline and not an async command. Fixes - bug reported by konsolebox - - 11/16 - ----- -doc/{bash.1,bashref.texi} - - document new posix-mode behavior of not giving ! special meaning - within double quotes, even if histexpand is enabled - - 11/17 - ----- -builtins/evalfile.c - - fc_execute_file: pass FEVAL_BUILTIN flag to _evalfile so it returns - the value of parse_and_execute after executing the commands in the - file. Fixes bug reported by Chris Marusich - - 11/20 - ----- -subst.c - - process_substitute: don't unconditionally set pipeline_pgrp to - shell_pgrp; do that only if pipeline_pgrp == 0 (we haven't forked - yet) or if we know we haven't forked for a command, a pipeline, - or an async command. Fixes bug reported by - - as https://savannah.gnu.org/support/index.php?108593 - - 11/24 - ----- -variables.c - - set_pwd: inherit the value of OLDPWD from the initial environment - if it names a directory. From a report from John Wiersba - - -builtins/set.def - - -T: fix help text to note that the DEBUG and RETURN traps are both - inherited if this is set. Report from Grisha Levin - - -doc/{bash.1,bashref.texi} - - HISTIGNORE,GLOBIGNORE: note that the pattern matching is subject to - the setting of the `extglob' variable. Clarification raised by - Aharon Robbins - -builtins/jobs.def,doc/{bash.1,bashref.texi} - - disown: add text to synopsis making it clear that disown takes a - pid argument. From a report from Matthew Stanfield - - -findcmd.c,doc/{bash.1,bashref.texi} - - EXECIGNORE: change pattern matching to use FNMATCH_EXTFLAG like other - IGNORE variables. From a report from Aharon Robbins - -trap.c - - _run_trap_internal: make sure to catch and use return values supplied - as arguments to `return'; instead of just catching return, make sure - we use return_catch_value as well. Fixes bug reported by - Grisha Levit , affects RETURN, DEBUG, ERROR - traps - - 11/30 - ----- -lib/readline/display.c - - rl_redisplay: fix code that deals with prompts that contain - multibyte characters whose physical length is longer than the screen - width (so the prompt line wraps) to deal with invisible characters - in the prompt and set the inv_lbreaks offsets correctly and set - lpos appropriately - - _rl_move_cursor_relative: always called with either visible line or - invisible line. Decide whether we are being called with the invisible - line (or a portion thereof) as the DATA argument; make sure to account - for invisible characters in the last line of the prompt by offsetting - the desired buffer offset (NEW) by where DATA starts in invisible line - and checking whether that is past the last invisible character in - the prompt - - _rl_move_cursor_relative: do the same for the visible line by using - the visible line lbreaks array instead of _rl_screenwidth, since - that fails in the presence of multibyte characters (buffer offset - vs. physical screen position). These fix bug with prompts with - multibyte characters and invisible characters that are longer than - the screen width reported by Ryo Furue - - 12/1 - ---- -parse.y,make_cmd.c - - here_doc_first_line: new variable, set to non-zero to indicate the - first line of possibly multiple here documents associated with the - current command. Set in parse.y:gather_here_documents() before - reading any here documents, set to 0 after reading the first line - of any here document in make_cmd.c:make_here_document(). - -parse.y - - history_delimiting_chars: if parser_state indicates we are reading - a here document, don't use current_command_line_count to see whether - or not we're on the first line of a here document -- it can be fooled - by multi-line commands (or even backslash-escaped newlines). Use - here_doc_first_line to check that directly. Fixes bug reported by - Geoffrey Allott - -shell.h,parse.y - - save and restore here_doc_first_line as part of the shell's parser - state - -lib/sh/tmpfile.c - - use ANSI-C rand() interface if random() not available. Fixes problem - with linking on (ancient) Solaris 2.4 reported by Klaus Ziegler - - - 12/2 - ---- -aclocal.m4 - - RL_LIB_READLINE_VERSION: if cross-compiling, assume current version - of readline if cross-compiling bash while using an external readline - library. Fix from Barry Davis - -execute_cmd.c - - execute_builtin: save and restore value of builtin_ignoring_errexit - instead of assuming we can set it back to 0 -- the ignore-errexit - cases might be nested - - execute_builtin: after a builtin executes and eval_unwind is set, - set exit_immediately_on_error to 0 if builtin_ignoring_errexit is - set, and back to the value of errexit otherwise, just like the - code that sets -e does. Fixes short-circuiting bug reported by - Marcin Swigon - - 12/5 - ---- -builtins/setattr.def - - set_or_show_attributes: instead of using a fixed string for the - options argument to `declare', which results in export adding the - readonly attribute, build the option string dynamically like in - subst.c:shell_expand_word_list() - - set_or_show_attributes: don't add the -r option to declare if the - attribute passed as an argument doesn't include att_readonly; add - -x if the attribute includes att_exported - - set_or_show_attributes: add the -g option to declare so readonly - and export in functions that go through this code path don't create - local variables. Part of fix for bug reported by ziyunfei - <446240525@qq.com> - -execute_cmd.c - - make_internal_declare: if we have an assignment builtin that isn't - supposed to create local variables (export/readonly), make sure to - add the W_ASSNGLOBAL flag to each assignment statement word. - Part of fix for bug reported by ziyunfei <446240525@qq.com> where - readonly can create local variables when invoked with a compound - array assignment as an argument within a shell function - -subst.c - - make_internal_declare: added third argument: command name. Not used - in any useful way yet - - do_compound_assignment: handle attempted assignments to readonly - variables and print error messages, like bind_variable does and the - callers expect. This means that assignments to readonly array - variables can't go through a code path that allows them to fail - silently - -doc/Makefile.in - - uninstall: run install-info --delete after removing the installed - info file to update the directory file - -execute_cmd.c - - execute_disk_command: since we still (and have always) perform - redirections in child processes, we need to mark that state so - we know that we're in a child process. subshell_performing_redirections - is the new variable; non-zero when executing do_redirections() - -subst.c - - process_substitute: if we are executing process substitution in a - redirection expansion context (expanding_redir == 1), the child - process should not have access to any temporary environment the - parent has. Call flush_tempenv() in the child process to get rid - of it. Fix for bug reported by Clint Hepner - - 12/9 - ---- -jobs.c - - waitchld: if in posix mode and attempting to let SIGCHLD interrupt the - wait builtin, make sure wait_intr_flag is non-zero before trying to - longjmp to wait_intr_buf. Fixes bug reported by Aharon Robbins - - - 12/10 - ----- -lib/readline/display.c - - update_line: if a prompt containing invisible characters changes, - and the change is within the prompt string, we need to redraw the - entire prompt. After that redraw, if the cursor position is after - the first index where the old and new lines differ, we can short- - circuit the update if the line length stays the same - - update_line: if we redraw the entire prompt string because the prompt - contains invisible characters and the first difference is in the - middle of the prompt, we possibly need to adjust our idea of the - first differing character in the old and new lines. We punt and do - a dumb update in this case. Fixes bug with dynamic vi-mode mode - strings containing invisible characters reported by Dylan Cali - - - 12/11 - ----- -lib/readline/display.c - - update_line: if we move up to a new screen line, we need to recompute - the number of invisible characters on the new current line - (visible_wrap_offset). Fixes bug reported to bug-readline by - Per Bothner - - update_line: update code that attempts to compute where we are in - the new line buffer. Fixes `vt100' bug reported to bug-readline by - Per Bothner - - 12/18 - ----- -execute_cmd.c - - execute_function: unwind-protect and restore BASH_ARGC and BASH_ARGV - - restore_funcarray_state: now global - -execute_cmd.h - - make func_array_state type global, add extern function declaration - for restore_funcarray_state - -builtins/evalfile.c - - _evalfile: use restore_funcarray_state and pop_args as unwind-protects - to restore BASH_{SOURCE,LINENO,ARGC,ARGV} and FUNCNAME on interrupts. - Fixes bug reported back on 11/10 by Grisha Levit - - - 12/20 - ----- -lib/readline/isearch.c - - _rl_isearch_dispatch: after removing the only character from the - search string with DEL, leaving the search string empty, don't match - the previous line if we didn't have a match before - - 12/22 - ----- -bashhist.c - - enable_history_list,remember_on_history: initialize to 0 instead of 1 - -shell.c - - init_interactive,init_interactive_script: set enable_history_list and - remember_on_history to 1 (defaults) - - 12/23 - ----- -variables.c - - initialize_shell_variables: don't inherit PS4 from the environment - if the shell is running with euid == 0; just reset it to `+ '. This - is a known potential vulnerability, since PS4 expansion performs - command substitution in the root shell's context before displaying - it. Discussion started by up201407890@alunos.dcc.fc.up.pt - -bashhist.c - - bash_history_reinit: initialize remember_on_history to the value of - enable_history_list (set -o history). Fixes bug reported by - Stephane Chazelas with command-line - option `-o history' not having any effect - - 12/28 - ----- -lib/readline/{history.h,histfile.c} - - history_file_version: new int variable, reserved for future use - - history_multiline_entries: new int variable, can be set by the - calling application to enable reading multi-line history entries - from the history file (currently undocumented) - -lib/readline/history.c - - _hs_append_history_line: new function, append a line passed as an - argument to a specified history entry, used to create multi-line - history entries - -lib/readline/histfile.c - - read_history_range: implement a heuristic that temporarily sets the - history comment character if the first line read from the history - file looks like it has is a timestamp (#[:digit:]) so we can read - timestamps from the history file properly. Originally reported - back in March 2015 by Christoph Anton Mitterer - - read_history_range: make sure history_multiline_entries is non-zero - if the history file looks like it has timestamps - - read_history_range: if we think we have a history file with timestamps - and we read more than one non-timestamp consecutive history lines, - assume they are part of a single multi-line history entry and paste - them together using _hs_append_history_line. Feature most recently - requested by james harvey , also suggested - by Christoph Anton Mitterer - -examples/loadables/setpgid.c - - setpgid: new loadable builtin, originally contributed by Jason - Vas Dias - - 12/29 - ----- -bashhist.c - - bash_history_inhibit_expansion: fix cases where a history expansion - should be skipped because it's in a command or process substitution - but there is another history expansion preceding the substitution - on the command line. Don't let the previous history expansion fool - the function into saying the command substitution history expansion - should be performed - -builtins/evalstring.c - - parse_prologue: always unwind-protect history_expansion_inhibited, - since history expansion can be enabled in non-interactive shells, - and calling eval once in a non-interactive shell inhibits history - expansion forever even if `set -o histexpand' was run before the - eval - -builtins/common.h - - SEVAL_NOHISTEXP: new flag for parse_and_execute/parse_string; means - to not perform history expansion (decouple from SEVAL_NOHIST, which - now means to not remember commands on history); changed all callers - that had SEVAL_NOHIST to have SEVAL_NOHIST|SEVAL_NOHISTEXP - -builtins/evalstring.c - - parse_prologue: instead of calling bash_history_disable, set - remember_on_history to 0 if SEVAL_NOHIST and history_expansion_inhibited - to 1 if SEVAL_NOHISTEXP - - 12/30 - ----- -subst.c - - skip_to_histexp: new function, a stripped-down version of skip_to_delim. - Used to skip to the next unquoted instance of the history expansion - character, handles peculiar quoting and command/process substitution - requirements. Better fix for bug reported by - Zigmund.Ozean@zig-home.localdomain back in January, prompted by report - from Keith Thompson - -bashhist.c - - bash_history_inhibit_expansion: use skip_to_histexp instead of - skip_to_delim - -subst.c - - parameter_brace_expand_rhs: if the rhs of an expansion is "$@" and - IFS is null, we need to separate the (quoted) positional parameters - in the returned word with a space, and mark the word as needing to - be split on spaces (W_SPLITSPACE). Fix for issues reported back in - October 2014 as the result of an austin-group discussion, and just - re-reported by Martijn Dekker - - 1/4/2016 - -------- -execute_cmd.c - - execute_simple_command: if autocd is set, invoke a function named - `cd' if one exists, instead of the shell builtin. Feature requested - by transl8czech@gmail.com - -builtins/mkbuiltins.c - - if a command's short description is the same as its name (e.g., `true'), - don't mark the short doc to be translated. Report and fix from - Benno Schulenberg - - 1/6 - --- -subst.c - - command_substitute,process_substitute: before replacing the file - descriptor underlying stdout (fd 1), make sure to purge any pending - stdio output that hasn't been written successfully, even after a - call to fflush(). Fixes bug reported by cks@cs.toronto.edu - - 1/7 - --- -builtins/{echo,printf}.def - - echo_builtin,printf_builtin: don't use terminate_immediately; use - calls to QUIT in the body of the print loop after writes and flushes. - Fixes problem with running the signal handler and exit trap in a - signal context and other bug reported by cks@cs.toronto.edu - -builtins/common.c - - sh_chkwrite: put in calls to QUIT to catch signals that interrupt - writes - -shell.c - - get_current_user_info: protect endpwent() with #ifdef HAVE_GETPWENT. - Fixes bug reported by pb - - 1/8 - --- -lib/readline/bind.c - - _rl_init_file_error: now a varargs function so it can take format - strings and arguments and pass them to vfprintf - - rl_parse_and_bind: print a warning if we encounter a key binding - string with one or more hyphens but we don't find a valid modifier - (`control', `meta', etc.). Prompted by a report from Andrew Kurn - - - rl_parse_and_bind: improve several existing error messages now that - _rl_init_file_error takes a variable number of arguments - - rl_variable_bind: print error message upon encountering unknown - variable - - 1/10 - ---- -lib/readline/bind.c - - rl_parse_and_bind: if a `bare' keybinding is supplied without any - terminating `:' or whitespace separating it from the command to be - bound, signal an error - - 1/11 - ---- -subst.c - - process_substitute: when compiled without job control (JOB_CONTROL not - defined), make sure we call stop_making_children like we do in the job - control code branch, so already_making_children is reset to 0. This - is what command substitution does. Fixes bug reported by Alastair - Hughes - - 1/12 - ---- -execute_cmd.c - - execute_in_subshell: if a user subshell (`(command)') or other shell - compound command has an input pipe, note for later by setting - stdin_redir. This will inhibit the implicit redirection of standard - input from /dev/null for async commands executed as part of this - subshell. Fixes bug reported by Martin D Kealey - - execute_simple_command: if the shell forks to execute this command - because it has an input pipe, set stdin_redir to inhibit later redirection - from /dev/null for async commands - - 1/13 - ---- -execute_cmd.c - - HASH_BANG_BUFSIZE: use #define for size of buffer used in - READ_SAMPLE_BUF instead of straight constant 80 - - HASH_BANG_BUFSIZ: increase to 128 because Linux allows 128 chars in - exec header. Reported by Ludovic Courtès - -configure.ac - - remove support for purify and purecoverage - - change release level to `rc1' - - 1/15 - ---- -builtins/enable.def - - dyn_load_builtin: fix missing argument to builtin_error if load function - returns an error. Fix from Aharon Robbins - - 1/18 - ---- -builtins/history.def - - histtime: display a better error message for invalid timestamps; use - existing `??' string for empty/missing timestamps or invalid history - entries. Suggestion from Reuben Thomas - - 1/21 - ---- -lib/readline/text.c - - rl_insert: when trying to optimize typeahead, make sure to reset the - key sequence and key sequence length when we read a character that is - not bound to self-insert. Bug report from Geir Hauge - - - 1/25 - ---- -doc/{bash.1,bashref.texi} - - word splitting: add example showing how -d'' is equivalent to -d - after word splitting and null argument removal - - 1/27 - ---- -doc/{bash.1,bashref.texi} - - read: modify description to make it more clear that the line is split - using the same rules as word splitting, and use `delimiters' instead - of `separators', which people read the wrong way - - 2/2 - --- -variables.c - - initialize_shell_variables: allow FUNCNEST to set funcnest_max when - imported from the environment. Inspired by - https://bugzilla.redhat.com/show_bug.cgi?id=1274553 - - 2/11 - ---- -bashhist.c - - bash_history_inhibit_expansion: function should be compiled in only if - BANG_HISTORY is defined. Report from isabella parakiss - - -[bash-4.4-rc1 frozen] - - 2/15 - ---- -lib/readline/text.c - - rl_refresh_line: call rl_redraw_prompt_last_line instead of - rl_forced_update_display to avoid redrawing all lines of a multiline - prompt (overwriting the last line of the multiline prompt in the - process). Report from Hugh Davenport - - 2/18 - ---- -subst.c - - parameter_brace_expand: when processing ${!name[@]}, make sure to - free `name' before returning the list of keys to avoid a memory leak. - Fixes bug reported by Emilio PastorMira - - 2/19 - ---- -trap.c - - free_trap_strings: when freeing the `special' traps (NSIG to BASH_NSIG), - check whether or not the `signal' is trapped, as it would be if the - subshell inherited it (errtrace) and don't free the trap string in that - case. Fixes bug reported by Jan Klötzke - - 2/21 - ---- -lib/sh/netconn.c - - isnetconn: return false if getpeername fails with errno == EBADF. - Bug and fix from Andrew Gregory - -builtins/shopt.def - - parse_bashopts: when reading BASHOPTS from the environment, make - sure to call any set functions associated with a variable, instead - of just setting the value to 1. Report and fix from - Vehlow, Jörg - - 2/22 - ---- -lib/readline/complete.c - - rl_display_match_list: don't bother calling strrchr to check the - return value from printable_part() if rl_filename_completion_desired - is non-zero, since in that case printable_part just returns its - argument. Fixes git completion issue reported by - Dilyan Palauzov - - _rl_colored_completion_prefix: default is now 0, testing is complete - - 2/23 - ---- -variables.c - - assign_hashcmd: if the shell is restricted, reject attempts to add - pathnames containing slashes to the hash table, as the hash builtin - does. Fixes bug reported to savannah by Sylvain Beucler as - https://savannah.gnu.org/support/?108969 - - 2/24 - ---- -subst.c - - NEED_FPURGE_DECL: need it before externs.h included, since fpurge - is now used in this file. Fixes warning reported by Mike - Frysinger - - skip_double_quoted: add missing argument to declaration - -parse.y - - shell_getc: in call to internal_warning, use %lu to print an argument - cast explicitly to unsigned long. Fixes warning reported by Mike - Frysinger - - 2/27 - ---- -parse.y - - decode_prompt_string: quote result of \s expansion in case shell has - been invoked with a pathname like '$(id)'. Inspired by report from - Travis Garrell - - decode_prompt_string: quote result of \h and \H expansions in the - (unlikely) case that the hostname has been changed to something - malicious including a command substitution. From report from - Travis Garrell - -builtins/getopts.def - - getopts_unbind_variable: new static function, just calls unbind_variable - for now. Placeholder for any future work to do something special if - OPTARG is readonly. Based on discussion started by Robert Elz - - -lib/readline/vi_mode.c - - rl_vi_unix_word_rubout: new function, implements ^W as Posix specifies - it for vi mode, using whitespace and punctuation characters as word - boundaries. Prompted by question from Carlos Pita - - -lib/readline/vi_keymap.c - - bind rl_vi_unix_word_rubout to ^W by default in both insert and - command mode - -lib/readline/rltty.c - - _rl_bind_tty_special_chars: if in vi mode, bind the WERASE character - to rl_vi_unix_word_rubout - -lib/readline/funmap.c - - vi-unix-word-rubout is new bindable name for rl_vi_unix_word_rubout - -lib/readline/readline.h - - rl_vi_unix_word_rubout: new extern declaration - - 2/28 - ---- -doc/bash.1 - - document readline blink-matching-paren variable - - document readline completion-display-width variable - - document readline completion-map-case variable - - note that the default value of history-size depends on the value of - the HISTSIZE variable. All from a message from Branden Robinson - - -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - convert-meta: modify the description to note that readline will turn - the default to off if the locale contains eight-bit characters - - input-meta: modify the description to note that readline will turn - the default to on if the locale contains eight-bit characters - - output-meta: modify the description to note that readline will turn - the default to on if the locale contains eight-bit characters. From - a message from Branden Robinson - - 3/6 - --- -examples/loadables/Makefile.in - - install-dev: make installdirs a prerequisite; don't rely on the - install-supported target to create it first. Bug with parallel - install (`make -j 4 install') reported by Chris Staub - - - 3/12 - ---- -lib/readline/display.c: - - rl_clear_visible_line: clear all screen lines occupied by the current - visible readline line. Inspired by report from Lauri Ranta - - -lib/readline/readline.h - - rl_clear_visible_line: extern declaration - -lib/readline/doc/rltech.texi - - rl_clear_visible_line: add documentation - - 3/19 - ---- -findcmd.c - - file_status: add inadvertently-dropped test for EXECIGNORE to the - `other' bits check. The check was in the original patch - - search_for_command: if the file should not be considered executable - because it's in the EXECIGNORE blacklist, don't set file_to_lose_on, - since the attempt to execute the last-ditch path will circumvent the - EXECIGNORE setting. Fixes bug reported by Dennis Williamson - - - 3/28 - ---- -lib/readline/display.c - - rl_redisplay: when computing where the cursor should go (and the - physical cursor position) after displaying the prompt, don't adjust - the cursor position by wadjust if there are no multibyte chars in - the prompt. lpos is already a physical cursor position; _rl_screenwidth - is the physical screen width, and we're not calling _rl_col_width and - don't need to take invisible characters into account again. Fixes - bug reported by Andreas Schwab - - 4/1 - --- -parse.y - - parse_comsub: when we read `esac' followed by a break character, - turn on the LEX_RESWDOK flag because we can now read another case - statement or other compound command. Fixes bug reported by - Christian Franke , original version - of patch from Piotr Grzybowski - - parse_comsub: leave the reserved-word-ok flag set for four-char - reserved words (then/else/elif/done/time) that can be followed by - reserved words; set lex_rwlen to 0 so we know to start reading a - new one - - 4/7 - --- -builtins/{alias,complete,jobs}.def - - {alias,compopt,disown}: add missing `CASE_HELPOPT;' so --help option - prints help longdoc instead of builtin_usage() - - 4/8 - --- -arrayfunc.c - - assign_array_var_from_word_list: use bind_array_var_internal instead - of inline code, so value conversions happen on assignment (case - modification, arithmetic evaluation, etc). Fixes bug reported by - Geir Hauge - - 4/9 - --- -shell.c - - main: change the logic that determines whether or not bash is running - under an emacs terminal emulator so it works with future versions of - emacs, which will change to use only $INSIDE_EMACS. Report and fix - from Paul Eggert - -lib/glob/sm_loop.c - - EXT: if we see ?(pat), we can match 0 or 1 times, so if we don't - match, we should consume the extglob pattern and go on to attempt - to match the rest of the pattern against the string. Fixes bug - reported by Isabella Parakiss - - GMATCH: in case `*', don't short-circuit and match anything if the - * is the last character in the pattern until after we check the - special cases for matching a `.'. Fixes bugs reported back on 3/23 - by Isabella Parakiss - - 4/13 - ---- -bashhist.c - - hc_erasedups: fix memory leak by freeing history entry returned by - remove_history. Bug and fix from Seiichi Ishitsuka - - - 4/19 - ---- -config-top.h - - CD_COMPLAINS: now settable in config-top.h; enables (fatal) error - messages if cd is given multiple directory arguments - - 4/20 - ---- -execute_cmd.c - - coproc_setvars: refuse to create variables with names that are not - valid identifiers. Suggestion from Piotr Grzybowski - - -rltty.c - - rl_tty_set_echoing: interface to set _rl_echoing_p, returning old - value. Inspired by gdb use of _rl_echoing_p when switching - between terminal and curses modes described by Doug Evans - - -bashline.c - - bash_execute_unix_command: use rl_clear_visible_line instead of - erasing current line on the screen, inspired by same report from - 3/12. Still tentative change - -configure.ac - - update release status to rc2, may skip this and go directly to - release - - 4/21 - ---- -arrayfunc.c - - convert_var_to_array: make sure that the newly-converted array - variable is not marked as being an associative array. Fixes bug - reported by Grisha Levit - - convert_var_to_assoc: make sure that the newly-converted associative - array variable is not marked as being an indexed array - - 4/22 - ---- -builtins/evalstring.c - - should_suppress_fork: don't suppress the fork if there are any traps - set, since that requires that we hang around to react to a signal or - collect the command's exit status and run something. Fixes bug - reported by Brian Vandenberg - -histexpand.c - - history_tokenize_word: handle >| as a single token. Fix from - Piotr Grzybowski from a report from - idallen@idallen-fibe.dyndns.org - - 4/24 - ---- -execute_cmd. - - coproc_setvars: don't overwrite readonly variables used as coproc - names. From a report from Grisha Levit - -histexpand.c - - history_tokenize_word: handle strings of digits before redirections - beginning with `<' or `>' as part of the redirection word; handle - strings of digits following `<&' or `>&' as part of the redirection - word. Inspired by patch from Piotr Grzybowski - from a report from idallen@idallen-fibe.dyndns.org - -lib/readline/complete.c - - rl_display_match_list: if the common prefix is longer than any of - the possible matches, set the length of the common prefix to 0 so - the entire match gets printed for each match - - rl_display_match_list: make sure to output at least one space - between each displayed match, even if the displayed length is - longer than our computed max - - fnprint: if the length of the prefix (prefix_bytes) is greater than - or equal to the length of the string to be printed (print_len), make - sure to set the prefix length to 0 so the entire string is printed. - From a report from Grisha Levit - - 4/25 - ---- -subst.c - - command_substitute: update the conditions under which we give the - terminal to pipeline_pgrp with give_terminal_to to the same ones - where wait_for uses to decide whether to give the terminal back to - shell_pgrp. This code exists to undo the work wait_for does; it - has to give the terminal back to pipeline_pgrp only under those - conditions when wait_for gives it back to the shell pgrp. Fix for - bug reported by Paulo Bardes - - 4/26 - ---- -bashline.c - - bash_filename_stat_hook: temporarily disable the `nounset' shell - option around calls to expand_prompt_string so we don't get error - messages during completion. Fixes issue reported by Eric Pruitt - - - 4/27 - ---- -doc/{bash.1,bashref.texi} - - extdebug: clarify that having this option enabled at shell startup - acts identically to --debugger. From a report from Grisha Levit - - -jobs.[ch] - - wait_for_single_pid: now takes additional `int flags' argument - -{jobs,execute_cmd}.c,builtins/wait.def - - wait_for_single_pid: changed callers to add extra argument - -jobs.c - - wait_for_single_pid: if (flags & 1) == 0, don't print the error - message if PID isn't found; changed execute_pipeline call when - lastpipe is set - - 4/28 - ---- -general.c - - bash_tilde_expand: try not setting interrupt_immediately or - terminate_immediately; see what happens with networked password - databases - - 4/29 - ---- -subst.c - - parameter_brace_expand, parameter_brace_expand_rhs: now take an - additional `pflags' argument from its caller so we can pass - state - - parameter_brace_expand_rhs: if expand_string_for_rhs returns a - quoted null, but l_hasdollat is set to 1, meaning we saw a quoted - "$@" of some form, we need to turn off special handling of "$@" - so something like "${@-${@-$@}}" expands to an empty string like - Posix says it should. Fixes bug reported by Grisha Levit - - - 5/1 - --- -variables.c - - bind_variable_internal: if we have a nameref variable with a valid - array reference that is invalid for assignment (e.g., a[*]), and - assign_array_element returns NULL, short-circuit and return NULL. - Fixes bug reported by Grisha Levit - -general.[ch] - - valid_nameref_value: new function, return 1 if passed argument is - a valid variable name argument for a nameref variable: a valid - identifier, a valid array reference, or a valid positional - parameter. Second argument indicates whether the value is to be - used for an assignment; in this case, return an error if the name - consists of all digits - -builtins/declare.def - - declare_internal: disallow values for nameref variables that don't - pass the tests in valid_nameref_value. Part of fix for bug - reported by Grisha Levit - -variables.c - - bind_variable_internal: if trying to assign a value to a nameref - variable, throw an error if valid_nameref_value fails (with a second - argument of 1). More fixes for bug reported by Grisha Levit - - - 5/2 - --- -builtins/declare.def - - declare_internal: don't allow nameref attribute to be applied to an - existing readonly variable; it can be used to circumvent readonly - value. Fix for bug reported by Grisha Levit - -variables.[ch] - - find_variable_last_nameref, find_global_variable_last_nameref: takes - a new flags argument. If flags is non-zero, and we find a nameref - variable that is unset (has no value), return that variable instead - of NULL. - -{variables,execute_cmd,arrayfunc,subst}.c,builtins/{declare,set}.def - - find_variable_last_nameref, find_global_variable_last_nameref: change - callers to add flags argument (initially 0) - - 5/3 - --- -variables.c - - bind_variable_internal: make sure we run the value of a namref - variable through valid_nameref_value before doing the assignment. - This can go away if we stop allowing namerefs to refer to positional - parameters - -execute_cmd.c - - execute_select_command: if bind_variable returns NULL, handle it as - an error, as if attempting assignment to a readonly variable - - execute_for_command: use 1 as second argument to - find_variable_last_nameref, so it will return an invisible nameref - to assign for each variable in the list - - execute_for_command: if the current word in the list is an invalid - identifier and the loop variable is a nameref, handle it as an error, - as if attempting assignment to a readonly variable - - 5/4 - --- -variables.c - - bind_int_variable: add warning if assigning an int to a nameref - variable - - assign_in_env: if assigning a variable in the temporary environment - that is a namref, throw an error if trying to assign an invalid - value - - bind_variable_value: use valid_nameref_value instead of calls to - legal_identifier and valid_array_reference - -execute_cmd.c - - coproc_setvars: if we have a nameref variable as the coproc name, but - it can't be assigned to for some reason, remove the nameref attribute - and issue a warning that we are doing so - - coproc_setvars: don't allow assignment to a nameref variable with an - invalid variable name, using same code as find_or_make_array_variable - -general.c - - valid_nameref_value: disallow values consisting solely of digits, - like the positional parameters - -builtins/declare.def - - declare_internal: don't call valid_nameref_value on the existing value - of a variable that's being converted to a nameref -- that value is - going to be thrown away and we've already checked the new value - - declare_internal: call bind_variable_value with the ASS_NAMEREF flag - if we're assigning to an existing nameref variable (for instance, - `declare -n x ; declare x=42') - - 5/5 - --- -variables.c - - make_local_variable: if we are being asked to create a local copy of - a nameref variable from a prior scope (checked by looking up - using find_variable_noref), use the nameref variable, not the variable - it references (which we find using find_variable). Bug report from - Grisha Levit ; fix by Piotr Grzybowski - - -builtins/declare.def - - declare_internal: if asked to do the same thing as above (difference - is declare -n r=foo in previous case; declare -n r in this one), - don't follow reference var from a previous context. Create a new - local variable (using make_local_variable) and inherit attributes - from previous scope's nameref as above - - 5/6 - --- -builtins/declare.def - - declare_internal: if we are assigning a value to an existing - invisible nameref variable, validate value early so we don't end up - removing the variable after the assignment fails - -builtins/shopt.def - - toggle_shopts: don't call set_bashopts here unless $BASHOPTS exists, - since we don't want to set it up before it gets read from the - environment. Keeping BASHOPTS read-only should keep users from - unsetting it. Fix from Grisha Levit - - shopt_set_debug_mode: make sure error_trace_mode reflects the setting - of extdebug. This one is tentative. Fix from Grisha Levit - - - shopt_set_debug_mode: call set_shellopts after setting error_trace_mode - or function_trace_mode. Fix from Grisha Levit - -shell.c - - start_debugger: make sure that function_trace_mode and error_trace_mode - reflect the value of debugging_mode, so they are both disabled if we - disable debugging mode because we can't find the debugger start file. - Fix from Grisha Levit - - start_debugger: set $SHELLOPTS and $BASHOPTS to the option values are - reflected if we change or set them here. Fix from Grisha Levit - - -builtins/set.def - - reset_shell_options: add reset values for: posix, nolog, pipefail. - Fix from Grisha Levit - -builtins/shopt.def - - reset_shopt_options: add reset values for: autocd, checkjobs, - complete_fullquote, dirspell, failglob, globstar, gnu_errfmt, - huponexit, inherit_errexit, interactive_comments, lastpipe, - no_empty_cmd_completion, progcomp. Fix from Grisha Levit - - - reset_shopt_options: make sure the following options have the right - defaults based on #defines: checkjobs, checkwinsize, direxpand, - extglob, globasciiranges. Fix from Grisha Levit - - -flags.c - - reset_shell_flags: add missing flags, re-initialize history_expansion - based on STRICT_POSIX - - 5/8 - --- -lib/readline/histexpand.c - - history_expand: if any expansion returns 1 from history_expand_internal, - indicating that :p was supplied, make it apply to the entire line - like tcsh and csh. Fixes bug reported by Dean Stanton - - -variables.[ch] - - ifsname: move define to variables.h - -execute_cmd.c - - execute_for_command: check whether or not the word in the for command - is IFS; call setifs every time the variable is assigned a value. - Fixes bug report from Grisha Levit - - 5/16 - ---- -general.c - - valid_nameref_value: explicitly handle name == 0 and *name == 0 right - away to save calls to legal_identifier - -builtins/declare.def - - declare_internal: if trying to set nameref attribute on a variable - with a null value, flag as invalid assignment, just as if running - `declare -n r=""'. Fixes bug report from Grisha Levit - - - declare_internal: when creating a variable with a temporary value - (""), use ASS_FORCE in the assignment flags to bypass name validity - checks on nameref variable names - -variables.c - - bind_variable_internal: don't call valid_nameref_value if we're - forcing assignment with (flags & ASS_FORCE) - -builtins/read.def - - read_builtin: handle bind_variable returning NULL when setting REPLY. - Report and fix from Grisha Levit - -builtins/setattr.def - - set_var_attribute: handle bind_variable returning NULL - -lib/sh/tmpfile.c - - sh_seedrand(): call srandom() to seed the random number generator - - sh_mktmpname, sh_mktmpfd: if we have random(), assume we have - srandom() and seed the random number generator. Still looking for - better value to see random number generator with - -variables.c - - check_unbind_variable: use internal_error instead of builtin_error - -{execute_cmd,variables}.c - - fix some places where bind_variable could return NULL and it was not - checked. Fix from Piotr Grzybowski - - 5/17 - ---- -arrayfunc.c - - convert_var_to_{array,assoc}: make sure to turn off nameref attribute, - since namerefs can't be arrays - -execute_cmd.c - - coproc_setvars: if the coproc name names a nameref, resolve the - nameref and use it as the name of the coproc. Suggested by Grisha - Levit - -subst.c - - command_substitute: don't bother calling QUIT after calling - reset_signal_handlers in the child, kill the child with SIGINT in - case we just reset the signal handler to SIG_DFL and we should just - exit instead of throwing to top level. Fixes bug reported by - Grisha Levit - - 5/18 - ---- -variables.c - - find_variable_nameref_for_create: find a nameref variable whose value - doesn't resolve to an existing variable and see whether or not that - value is appropriate for a new variable to be created - - find_variable_nameref_for_assignment: find a nameref variable whose - value doesn't resolve to an existing variable and see whether or not - that value is appropriate for a new variable to be created. - Difference between _assignment and _create is that _assignment - allows the nameref value to be a subscripted array reference - -builtins/setattr.def - - set_var_attribute: if variable lookup doesn't return anything, check - for a nameref and make sure that any reference value is something we - should be working on here, using find_variable_nameref_for_create(). - If it fails, error out and return, otherwise it's probably a reference - to a variable that hasn't been set yet, so let bind_variable take care - of that. Report from Grisha Levit - -arrayfunc.c - - bind_array_variable: if find_shell_variable returns NULL, check for a - nameref using find_variable_nameref_for_create and create a new array - variable with the value if it returns a valid nameref variable. - Makes `unset var; declare -n ref=var ; ref[0]=foo' work right. - Report from Grisha Levit - - 5/19 - ---- -variables.[ch] - - unbind_variable_noref: unset a variable NAME without following any - nameref chain. If the first instance of the variable with that name - is a nameref, just unset that nameref variable. - -builtins/getopts.def - - getopts_unbind_variable: if OPTARG is going to be unbound, use - unbind_variable_noref to unbind that name even if it is a nameref - variable. Issue raised by Grisha Levit - -execute_cmd.c - - coproc_unsetvars: use unbind_variable_noref in case someone sets the - coproc _PID variable as a nameref pointing to something read-only or - strange. Issue raised by Grisha Levit - -builtins/set.def - - set_ignoreeof: use unbind_variable_noref to unset "IGNOREEOF" and - "ignoreeof" - - set_posix_mode: use unbind_variable_noref to unset "POSIXLY_CORRECT" - -variables.c - - make_vers_array: use unbind_variable_noref to unset "BASH_VERSINFO" - -lib/sh/shmatch.c - - sh_regmatch: use unbind_variable_noref to unset "BASH_REMATCH" - -bashline.c - - bash_execute_unix_command: use check_unbind_variable to unset - READLINE_LINE and READLINE_POINT - -pcomplete.c - - unbind_compfunc_variables: use unbind_variable_noref to unset - COMP_LINE, COMP_POINT, COMP_WORDS, COMP_CWORD, COMP_TYPE, COMP_KEY - - gen_shell_function_matches: use unbind_variable_noref to unset - COMPREPLY - -config-top.h - - USE_MKTEMP/USE_MKSTEMP: define by default to use libc version of - mktemp and mkstemp in lib/sh/tmpfile.c. Recommended by Mike - Frysinger to fix a FreeBSD problem - -configure.ac,config.h.in - - mkstemp: check for mkstemp, define HAVE_MKSTEMP if available - -config-bot.h - - USE_MKSTEMP: #undef if HAVE_MKSTEMP not defined - - 5/22 - ---- -variables.c - - assign_in_env: if appending to a variable's value, make sure we call - make_variable_value with the empty string if expand_assignment_string_to_string - returns NULL, as do_assignment_internal does. Fixes bug with - `str=''; val=foo ; val+=str printenv val' reported by Grisha Levit - - - assign_in_env: if assigning to a nameref variable in the temporary - environment, and the nameref has a valid value for assignment (even - if the target variable is not set), resolve the nameref and create - a variable in the temporary environment named by the nameref's value. - If the nameref variable is invisible or isn't set to a valid value - for assignment, just create a regular temporary variable with the - nameref's name. This provides a degree of ksh93 compatibility. - Suggested by Grisha Levit - - find_variable_nameref_context,find_variable_last_nameref_context: - instead of returning NULL when detecting a loop, return a - distinguished value: &nameref_maxloop_value - - bind_variable: catch nameref_maxloop_value so we can do different - things based on whether or not we get it. Right now we don't do - anything different, but we could - - 5/24 - ---- -lib/readline/display.c - - update_line,_rl_move_cursor_relative: save value of MB_CUR_MAX in a - variable and use it throughout the functions instead of recomputing it - every time (which possibly costs a function call) - - 5/25 - ---- -builtins/declare.def - - declare_internal: only check whether the value being assigned to a - nameref variable is a valid identifier if we're not appending to an - existing value. Suggested by Grisha Levit - - declare_internal: add a couple of more checks on nameref names: - o make sure `declare -n x[3]=y' is an error - o nameref variable self-references now produce a warning when - in function scope - o nameref variable self-references using subscripted arrays - (a=a[0]) now produce warnings at function scope and errors at - global scope - - 5/29 - ---- -builtins/declare.def - - declare_internal: use name of readonly variable when calling sh_readonly - instead of name passed as argument to declare in case we've followed - a nameref chain - - declare_internal: when turning off attributes on a nameref variable - after following the nameref chain and turning them off on the target - variable, don't allow the readonly attribute to be removed. This is - primarily intended to turn off the nameref attribute. Issue pointed - out by Grisha Levit - - declare_internal: if we are attempting to modify an existing global - nameref variable, and the -n option is supplied, operate on the - nameref variable itself, not the variable it references - -doc/{bash.1,bashref.texi} - - change the descriptions of namerefs and declare -n slightly to note - that using the -n option to declare will operate on the nameref - variable itself rather than the variable it references - -variables.c - - bind_variable_internal: if trying to assign to a read-only variable, - print the error message using the variable's name instead of the - name passed to bind_variable in case we followed a nameref - -builtins/declare.def - - declare_internal: when we're creating a (possibly invisible) variable - as part of another operation, assigning NULL, make sure to use - ASS_FORCE to avoid warning messages from any existing nameref - variables we follow - - declare_internal: allow the nameref attribute to be removed from a - readonly nameref variable without a value but do not allow it to be - removed from a readonly nameref variable that has a value, even if it - doesn't reference an existing variable. This distinction is for ksh93 - compatibility. Pointed out by Grisha Levit - - 5/31 - ---- -builtins/declare.def - - declare_internal: if the call to bind_variable_value fails for some - reason, make sure to restore the nameref attribute to flags_on and - flags_off before calling NEXT_VARIABLE - -subst.c - - make_internal_declare: handle += append op - - shell_expand_word_list: when transforming assignment statement - arguments to `declare', make sure to handle += append op to avoid - passing invalid identifiers to declare. Report by Grisha Levit - - - 6/1 - --- -builtins/declare.def - - declare_internal: if a nameref assignment fails, only call delete_var - to delete the variable if we created it in declare_internal in the - first place - -general.c - - check_selfref: new function, checks a NAME against a VALUE for nameref - self-reference - -general.h - - check_selfref: extern declaration - -builtins/declare.def - - declare_internal: call check_selfref to determine whether a given NAME - and VALUE constitute an invalid nameref variable self-reference - -variables.c - - bind_variable_internal: call check_selfref to determine whether a - given NAME and VALUE constitute an invalid nameref variable self- - reference - - 6/2 - --- -parse.y - - clear_shell_input_line: new function, clears contents of shell_input_line - and sets index to 0, but doesn't free it - -externs.h - - clear_shell_input_line: extern declaration - -builtins/evalstring.c - - parse_and_execute: call clear_shell_input_line after setting input to - string to be executed. Fixes problem with command substitution and - multi-line aliases reported by Grisha Levit - -eval.c - - parse_command: only execute PROMPT_COMMAND if the shell is not - currently expanding an alias; use the same tests as parse.y:SHOULD_PROMPT - and parse.y:prompt_again() use to decide whether or not to print a - prompt. Fixes problems with PROMPT_COMMAND and multi-line aliases - reported by Grisha Levit - -builtins/set.def - - unset_builtin: changes to fix three problems reported by Grisha - Levit : - o if -n is supplied, we should not try to unset a function if - a variable isn't found - o unsetting namerefs whose values are array references does - not work - o unset -n n[0], where n is a nameref, would unset the - referenced variable instead of `n' - -redir.c - - redir_varvalue: handle case where nameref var points to subscripted - array reference. Reported by Grisha Levit - -variables.c - - bind_variable_value: make sure to call check_selfref only if aflags - includes ASS_NAMEREF and not ASS_FORCE. Reported by Grisha Levit - - -general.c - - valid_nameref_value: now understands a FLAGS value of 2 to mean that - the name will be used to create a variable, so only legal_identifier - matters - -arrayfunc.c - - find_or_make_array_variable: call valid_nameref_value with FLAGS value - of 2 to indicate we will be creating a variable. Fixes mapfile issue - reported by Grisha Levit - - 6/5 - --- -builtins/declare.def - - declare_internal: only pass ASS_FORCE as part of assignment flags to - assignments concerning arrays - - declare_internal: when at the global scope, if we resolve a nameref - and commit to using the new name, go back to to the beginning of the - loop and use the new name in the checks and variable references. - Make sure we construct the new name as a straight substitution of - the nameref value into the old name, including array subscripts and - rebuilding the correct values for `offset' and `value', since they - are relative to the original value of name. - Fixes several issues with checking use of subscripted array variables - as nameref values - - declare_internal: when calling assign_array_element, make sure to - pass ASS_APPEND if aflags includes it, so things like - declare -a var; var[1]=1; declare var[1]+=4 - append to the value appropriately and var[1] ends up being `14' - -arrayfunc.c - - valid_array_reference: make sure the array reference is properly - terminated after the first subscript; return invalid if there is - anything following the closing `]' - - 6/12 - ---- -variables.c - - bind_variable_internal: if asked to perform an array subscript - assignment on a nameref variable, display a warning and remove the - nameref attribute (as bash-4.3 did). Reported by Dan Douglas - - - 6/14 - ---- -test.c - - posixtest: handle four-argument case where argv[1] == '(' and - argv[4] == ')' by performing two-argument test on $2 and $3. - Reported by Joerg Schilling - - 6/15 - ---- -variables.c - - sv_ignoreeof: make sure ignoreeof is set only if IGNOREEOF is set and - has a value (no `local IGNOREEOF'). Reported by Grisha Levit - - - sv_strict_posix: make sure posixly_correct is set only if - POSIXLY_CORRECT is set and has a value. Reported by Grisha Levit - - - 6/16 - ---- -builtins/declare.def - - declare_internal: analogous to 6/12 change; when performing an array - subscript assignment on a nameref, display a warning, remove the - nameref attribute, and go on - - 6/21 - ---- -execute_cmd.c - - shell_execve: make sure errno is (re)set appropriately before - returning error value on exec format error - - 6/23 - ---- -subst.c - - param_expand: when expanding $* in a context where splitting is not - desired (pflags & PF_ASSIGNRHS), make sure to quote the word and the - included separators. Reported by Dan Douglas - - 6/30 - ---- -configure.ac - - release version is now `beta2' - -execute_cmd.c - - execute_simple_command: even if already_making_children is non-zero, - don't call wait_for if last_made_pid == NO_PID. Indirectly inspired - by report from Nicolas Vivet - - 7/2 - --- -subst.c - - expand_word_internal: when adding an IFS character to the accumulated - string, don't quote it if word expansion is not going to be - performed ((word->flags & (W_NOSPLIT|W_NOSPLIT2)) == 0) in the - default case. This was already the case everwhere else, when we did - `goto add_ifs_character;'. Fixes bug reported by Ibrahim M. Ghazal - - -subst.[ch],arrayfunc.c - - string_list_dollar_at: now takes a new third argument, currently - reserved for future use; changed callers and declaration - - 7/7 - --- -[bash-4.4-beta2 frozen] - - 7/9 - --- -bashline.c - - check_redir: make sure that index is > 0 before checking previous - char; fixes out of bounds read reported by Hanno Böck - - - 7/16 - ---- -subst.c - - parameter_brace_expand: if ${array[@]} or ${array[*]} is supplied - with an unset (or empty) array, and -u is enabled, don't make it - an unbound variable error, like $@ or $* when there are no - positional parameters. Based on report from Ian Allen - - -lib/readline/signals.c - - rl_pending_signal(): return the number of any signal readline has - caught but is waiting to handle - -lib/readline/callback.c - - rl_persistent_signal_handlers: new variable, restores readline-6.2 - signal handler semantics: installed at rl_callback_handler_install - time and removed with rl_clear_signals when a complete line has - been read - - _rl_callback_newline: call rl_set_signals if rl_persistent_signal_handlers - is non-zero - - rl_callback_read_char: install signal handlers with rl_set_signals - if rl_persistent_signal_handlers is 0 (the default) - - CALLBACK_READ_RETURN: uninstall signal handlers with rl_clear_signals - only if rl_persistent_signal_handlers is 0 (the default) - -lib/readline/readline.h - - rl_pending_signal: new extern declaration - - rl_persistent_signal_handlers: new extern declaration - - 7/19 - ---- -execute_cmd.c - - execute_while_or_until: make sure we decrement `continuing' the way - we decrement `breaking' if the loop test indicates we will be - breaking out of the loop. That keeps `until continue' from - keeping `continuing' set to 1. Reported by Dan Douglas - - - 7/20 - ---- -trap.c - - run_pending_traps,_run_trap_internal: save and restore temporary_env, - set temporary_env to 0 before trap runs so traps don't inherit a - command's temporary env. Fixes bug with IFS assignment in tempenv - and trap reported by Andriy Martynets - -jobs.c - - run_sigchld_trap: save and restore temporary_env, set temporary_env - to 0 before trap runs so traps don't inherit a command's temporary - env (see above) - - 7/21 - ---- -execute_cmd.c - - execute_function: unwind-protect function_line_number, in case we - are executing a function inside another function. Reported by - Grisha Levit in context of evaled functions - and DEBUG traps - - execute_arith_for_command,execute_arith_command,execute_simple_command, - execute_cond_command: make sure line_number doesn't go < 0 when - adjusting it by function_line_number - - 7/23 - ---- -subst.c,command.h - - move the PF_ constants to command.h so other files can see them, now - that PF_ASSIGNRHS has meaning to string_list_dollar_at - -arrayfunc.h - - AV_ASSIGNRHS: new flag, indicate that ${a[@]} is being expanded on - the RHS of an assignment statement - -arrayfunc.c - - array_value_internal: if AV_ASSIGNRHS passed for ${a[@]}, pass - PF_ASSIGNRHS to string_list_dollar_at to support args separated by - spaces even if $IFS does not have the default value. Reported by - Dan Douglas - -subst.c - - string_list_dollar_at: if FLAGS argument includes PF_ASSIGNRHS, obey - rules for $@ on the RHS of an assignment statement: expand to - postitional parameters separated by spaces no matter what the first - character of $IFS is. Reported by Dan Douglas - - parameter_brace_expand_word: pass AV_ASSIGNRHS as flags value to - array_value if PF_ASSIGNRHS is set and we are expanding an array - variable subscripted by @ or * - - param_expand: pass pflags to string_list_dollar_at in case it contains - PF_ASSIGNRHS - - expand_word_internal: if we have an assignment statement argument to - a declaration builtin (W_ASSIGNARG), turn on W_ASSIGNRHS when we see - the `=' to enable special $@ behavior - - expand_word_internal: if W_ASSIGNARG enabled in word flags, pass that - flag and W_ASSIGNRHS to recursive call to expand_word_internal when - expanding double-quoted string; handles "$@" when IFS is not the - default value and word splitting will not be performed - -subst.c - - expand_word_internal: change case that handles '' (single-quoted - empty string) to only discard it if we will not be performing word - splitting (W_NOSPLIT|W_NOSPLIT2), since we need to add a quoted null - argument if the subsequent characters will cause word splitting. - This is how "" (double-quoted empty string) is handled after a bug - fix back in August 2010. Reported by Grisha Levit - , fix for Posix interp 888 - - 7/27 - ---- -subst.c - - param_expand: change fix from 6/23 (expanding $* in a context where - word splitting is not performed) to make sure that $* expands to - something before trying to quote the string. Bug and fix from - Andreas Schwab - -lib/readline/bind.c - - _rl_get_string_variable_value: fix a cut-and-paste error that caused - the emacs mode string to be displayed for both vi insert and command - mode strings. Report and fix from Steve Jones - - 7/28 - ---- -lib/readline/display.c - - update_line: we can't use PROMPT_ENDING_INDEX unless we're testing - against _rl_last_c_pos; if we are testing buffer indices, we need to - use prompt_last_invisible directly. Fixes mode string redisplay issue - with short prompt strings reported by Steve Jones - - 8/4 - --- -nojobs.c - - without_job_control: new function, resets child state that's - eventually used to decide whether or not to wait_for children - -execute_cmd.c - - initialize_subshell: call without_job_control in both the - JOB_CONTROL and no job control paths so we can reset the state in - subshells that will not cause them to wait_for children - inappropriately. Fixes bug reported by Dan Cross - - 8/5 - --- -configure.ac - - release version is now `rc2' - -bashline.c - - command_word_completion_function: if direxpand is set, make sure to - run hint_text through bash_directory_completion_hook, since - readline will do that and we want to be able to match the results - readline returns. Fixes bug reported by Pat Somaru - - -command.h - - W_COMPLETE: new flag word value - - PF_COMPLETE: new flags value for param_expand - -subst.h - - SX_STRIPDQ: new flag, used for string_extract_double_quoted - -bashline.c - - bash_filename_stat_hook,bash_directory_completion_hook: pass W_COMPLETE - flag to expand_prompt_string - -subst.c - - expand_word_internal: if W_COMPLETE in word->flags, pass PF_COMPLETE - to param_expand - - param_expand: if PF_COMPLETE in pflags, pass SX_COMPLETE to - extract_command_subst. This allows `"$(echo ~/' to perform - completion successfully - - string_extract_double_quoted: turn third argument into a flags arg, - old STRIPDQ is now set if flags&SX_STRIPDQ - - string_extract_double_quoted: changed callers, if third argument was - 1, pass SX_STRIPDQ instead - - expand_word_internal: if W_COMPLETE in word->flags, pass SX_COMPLETE - in flags to string_extract_double_quoted for case '"' - - string_extract_double_quoted: if SX_COMPLETE in flags, pass it to - extract_command_subst - - expand_word_internal: if W_COMPLETE in word->flags, make sure W_COMPLETE - is in temp word passed to recursive call to expand_word_internal to - expand double-quoted string. Fixes bug reported by John Passaro - - - 8/9 - --- -[bash-4.4-rc2 frozen] - - 8/10 - ---- -subst.c - - sub_append_string: use size_t variable to store string length to - avoid integer overflow. Report from Siteshwar Vashisht - - - sub_append_string: `size' argument is now pointer to size_t; changed - istring_index in expand_word_internal to accommodate change - -lib/sh/ufuncs.c - - include "posixselect.h" if HAVE_SELECT is defined, make sure that - fd_set and the rest are defined - - 8/11 - ---- -lib/readline/histexpand.c - - history_tokenize_word: use ISDIGIT instead of isdigit for more - argument checking - - "chardefs.h": include for ISDIGIT define and . Fix from - Mike Frysinger - -lib/sh/eaccess.c,externs.h - - sh_eaccess: first argument now const char * - - sh_stataccess,sh_euidaccess: first argument now const char *, since - sh_stat and sh_eaccess call them. - Fix from Mike Frysinger - -lib/glob/glob.c - - sh_eaccess: change local prototype - -general.[ch] - - all_digits,legal_identifier,valid_nameref_value,importable_function_name, - exportable_function_name,check_binary_file,file_exists,file_isdir, - file_iswdir,same_file,make_absolute,valid_nameref_value: first - argument (always identifier or filename) is now a `const char *'; - some second filename arguments now `const char *'. - Fix from Mike Frysinger - -configure.ac,config.h.in - - uintptr_t: make sure it's defined to an integer type wide enough to - hold a pointer - -lib/sh/tmpfile.c - - sh_seedrand: use `uintptr_t' to cast pointer value to int value, - instead of allowing truncation to take place, since srandom takes - an `unsigned int'. - Fix from Mike Frysinger - -arrayfunc.[ch] - - valid_array_reference,array_variable_name,array_variable_part, - array_value_internal,array_value,get_array_value: first argument - (always variable name) now a `const char *' - Fix from Mike Frysinger - - 8/19 - ---- -print_cmd.c - - xtrace_print_word_list: if (xtflags & 2), don't try to quote the - words in the LIST argument. Intended to be used in places where - the list has not yet been expanded - - xtrace_print_for_command_head: call xtrace_print_word_list with - flags argument of 2. Fixes issue reported by Aharon Robbins - - - xtrace_print_select_command_head: call xtrace_print_word_list with - flags argument of 2 - - 8/21 - ---- -lib/sh/netopen.c - - netopen: fix memory leak by freeing allocated path before error - return. Fix from Dmitry Goncharov - -doc/{bash.1,bashref.texi} - - change conditional commands description to make it clearer that - bash doesn't emulate /dev/fd if the OS provides it - - 8/22 - ---- -braces.c - - expand_amble: free partial and tem on failure to allocate memory - for merged partial+result strvec. Fix from Dmitry Goncharov - - - 8/23 - ---- -jobs.c - - wait_for: don't call get_tty_state when a job finishes if we're - running it as part of programmable completion. We test - rl_readline_state. Fixes bug reported by Jaro Punta - - - 8/24 - ---- -subst.c - - pat_subst: fix memory leak (mstr). Fix from Dmitry Goncharov - - - split_at_delims: fix memory leak (d2). Fix from Dmitry Goncharov - - - 8/26 - ---- -subst.c - - match_upattern,match_wpattern: make sure that a trailing `*' is - not escaped (preceded by an odd number of backslashes) before we - append a `*' when checking whether a pattern matches anywhere in - the string - -lib/readline/{input,signals}.c - - protect instances of SIGQUIT with #ifdef SIGQUIT; apparently - MinGW doesn't define it - - protect instances of SIGHUP with #ifdef SIGHUP; apparently - MinGW doesn't define it. From a report from Simon Sobisch - - -xmalloc.o - - allocerr: only try to find the break and report it if we're using - the bash malloc; there's no guarantee that any other malloc is - using sbrk() - -doc/{bash.1,bashref.texi} - - quote removal: add paragraph mentioning quote removal to beginning - of expansions section, referencing later paragraph. Report from - Michel Lanne - - 8/30 - ---- -lib/readline/input.c - - protect instances of SIGALRM and SIGWINCH with #ifdef; apparently - MinGW doesn't define them. From a report from Simon Sobisch - - -subst.c - - SPECIAL_VAR: make sure name is not the empty string before going on, - empty strings can result in unitialized reads - - CHECK_STRING_OVERRUN: semi-general macro to use in *extract* and - similar functions to to check whether a function called to parse an - embedded construct (like a backquoted command substitution) doesn't - consume the entire string because it's unterminated - - skip_double_quoted: make sure other extraction functions don't - consume the entire string (which they can if the construct is - unterminated) before incrementing the index and going on. Uses - CHECK_STRING_OVERRUN - - extract_dollar_brace_string: check for unterminated embedded - constructs consuming the entire string with CHECK_STRING_OVERRUN ('`') - - skip_matched_pair: use CHECK_STRING_OVERRUN to make sure unterminated - embedded "`", $(, ${ don't cause out-of-bounds reads - -parse.y - - parse_comsub: when parsing a here-document delimiter, make sure we - don't try to use `nestret' after freeing it. Fixes bug reported by - Franco Costantini - -[bash-4.4 frozen] - - 9/10 - ---- -trap.c - - run_debug_trap: only give the terminal to pipeline_pgrp if - subshell_environment doesn't include SUBSHELL_ASYNC|SUBSHELL_PIPE. - Fixes bug reported by Matthew Giassa - -execute_cmd.c - - execute_simple_command: if user_subshell is set, check and set - SUBSHELL_ASYNC if asynchronous is set as well as setting - SUBSHELL_PAREN +[bash-4.4 released] 9/17 ---- @@ -15536,3 +3841,35 @@ bashline.c 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 diff --git a/CWRU/old-changelogs/CWRU.chlog.v15 b/CWRU/old-changelogs/CWRU.chlog.v15 new file mode 100644 index 000000000..ffd692f3e --- /dev/null +++ b/CWRU/old-changelogs/CWRU.chlog.v15 @@ -0,0 +1,11699 @@ + 2/14/2011 + --------- +[bash-4.2 released] + + 2/15 + ---- +lib/glob/gmisc.c + - fix wmatchlen and umatchlen to avoid going past the end of the + string on an incomplete bracket expression that ends with a + NUL. Partial fix for bug reported by Clark Wang + + 2/16 + ---- +subst.h + - new string extract flag value: SX_WORD. Used when calling + extract_dollar_brace_string to skip over the word in + ${param op word} from parameter_brace_expand + +subst.c + - change parameter_brace_expand to add SX_WORD to flags passed to + extract_dollar_brace_string + - change parameter_brace_expand to use SX_POSIXEXP for all non-posix + word expansion operators that treat single quotes as special, not + just % and # + - change extract_dollar_brace_string to initialize dolbrace_state to + DOLBRACE_WORD if SX_WORD flag supplied and we shouldn't use + DOLBRACE_QUOTE. Fixes bug reported by Juergen Daubert + +doc/{bash.1,bashref.texi} + - document the exact expansions here strings undergo + + 2/17 + ---- +lib/readline/vi_mode.c + - make sure that `dd', `cc', and `yy' call vidomove_dispatch from + rl_domove_read_callback. Fixes bug reported by Clark Wang + + +lib/readline/callback.c + - make sure _rl_internal_char_cleanup is called after the + vi-motion callbacks (rl_vi_domove_callback) in rl_callback_read_char. + Companion to above fix + +doc/{bash.1,bashref.texi} + - make sure that the text describing the rhs of the == and =~ + operators to [[ states that only the quoted portion of the pattern + is matched as a string + + 2/18 + ---- +lib/glob/gmisc.c + - better fix for umatchlen/wmatchlen: keep track of the number of + characters in a bracket expression as the value to increase + matchlen by if the bracket expression is not well-formed. Fixes + bug reported by Clark Wang + +subst.c + - change expand_string_for_rhs so that it sets the W_NOSPLIT2 flag + in the word flags. We will not perform word splitting or quote + removal on the result, so we do not want to add quoted nulls if + we see "" or ''. Fixes bug reported by Mike Frysinger + + + 2/19 + ---- +variables.c + - new function, int chkexport(name), checks whether variable NAME is + exported and remakes the export environment if necessary. Returns + 1 if NAME is exported and 0 if not + - call chkexport(name) to get tzset to look at the right variable in + the environment when modifying TZ in sv_tz. Don't call tzset if + chkexport doesn't indicate that the variable is exported + +variables.h + - new extern declaration for chkexport + + +{parse.y,builtins/printf.def} + - call sv_tz before calling localtime() when formatting time strings + in prompt strings or using printf. Fixes bug reported by + Dennis Williamson + +execute_cmd.c + - modify fix of 2/9 to add casts when those variables are passed to + functions; some compilers throw errors instead of warnings. Report + and fix from Joachim Schmitz + +support/shobj-conf + - add a stanza for nsk on the Tandem from Joachim Schmitz + + +{shell,lib/readline/shell}.c + - Tandem systems should use getpwnam (getlogin()); for some reason + they don't do well with using getuid(). Fix from Joachim Schmitz + + + 3/1 + --- +variables.c + - make sure that the return value from find_variable is non-null + before trying to use it in chkexport. Fixes bug reported by + Evangelos Foutras + + 3/3 + --- +parse.y + - when adding $$ to the current token buffer in read_token_word(), + don't xmalloc a buffer for two characters and then strcpy it, just + copy the characters directly into the token buffer. Fix from + Michael Whitten + +execute_cmd.c + - fix expand_word_unsplit to add the W_NOSPLIT2 flag to the word to + be expanded, so "" doesn't add CTLNUL. Similar to fix of 2/18 to + expand_string_for_rhs. Fixes bug reported by Nathanael D. Noblet + and Matthias Klose + +parse.y + - fix extended_glob case of read_token_word to allocate an extra + space in the buffer for the next character read after the extended + glob specification if it's a CTLESC or CTLNUL. Report and fix from + Michael Witten + - fix shell expansions case of read_token_word to allocate an extra + space in the buffer for the next character read after the shell + expansion if it's a CTLESC or CTLNUL. Report and fix from + Michael Witten + - TENTATIVE: fix read_token_word to reduce the amount of buffer space + required to hold the translated and double-quoted value of $"..." + strings. Report and fix from Michael Witten + - change code around got_character and got_escaped_character labels to + make sure that we call RESIZE_MALLOCED_BUFFER before adding the + CTLESC before a CTLESC or CTLNUL, and before adding the character if + we're not adding a CTLESC. Report and fix from + Michael Witten + +subst.c + - new param flags value, PF_ASSIGNRHS, mirrors W_ASSIGNRHS, noting that + parameter expansion is on rhs of assignment statement. That inhibits + word splitting + - change param_expand to call string_list_dollar_at with quoted == 1 + if PF_ASSIGNRHS is set, so it will quote IFS characters in the + positional parameter before separating them with the first char of + $IFS. This keeps the rhs from being split inappropriately. Fixes + bug reported by Andres Perera + + 3/4 + --- +lib/readline/bind.c + - add a missing free of `names' in rl_function_dumper. Bug report + and fix from Michael Snyder + + 3/5 + --- +lib/readline/rltty.c + - change rl_deprep_terminal so it uses fileno (stdin) for the tty fd + if rl_instream is not set, like rl_prep_terminal + + 3/6 + --- +lib/readline/display.c + - fix rl_message to use a dynamically-allocated buffer instead of a + fixed-size buffer of 128 chars for the `local message prompt'. Bug + report and fix from Micah Cowan + + 3/7 + --- +jobs.c + - add sentinel to wait_sigint_handler so it only sets wait_sigint_received + if waiting_for_child is non-zero; otherwise, it restores the old + SIGINT handler and sends itself the SIGINT + - set waiting_for_child around the calls to waitchld that use it to + synchronously wait for a process + - change logic that decides whether or not the child process blocked + or handled SIGINT based on whether or not waitpid returns -1/EINTR + and the shell receives a SIGINT and the child does not exit. If + the child later exits due to SIGINT, cancel the assumoption that it + was handled + - instead of testing whether or not the child exited due to SIGINT + when deciding whether the shell should act on a SIGINT it received + while waiting, test whether or not we think the child caught + SIGINT. If it did, we let it go (unless the shell has it trapped); + if it did not catch it, the shell acts on the SIGINT. Fix from + Linus Torvalds , bug report originally + from Oleg Nesterov + + 3/8 + --- +shell.c + - initialize no_line_editing to 1 if READLINE is not defined -- we + can't have line editing without readline + + 3/12 + ---- +lib/readline/signals.c + - add SIGHUP to the set of signals readline handles + +lib/readline/doc/rltech.texi + - document that SIGHUP is now part of the set of signals readline + handles + +lib/readline/input.c + - if _rl_caught_signal indicates that read() was interrupted by a + SIGHUP or SIGTERM, return READERR or EOF as appropriate + - call rl_event_hook, if it's set, if call to read in rl_getc + returns -1/EINTR. If rl_event_hook doesn't do anything, this + continues the loop as before. This handles the other fatal + signals + +execute_cmd.c + - add a couple of QUIT; calls to execute_disk_command and + execute_simple_command to improve responsiveness to interrupts + and fatal signals + +input.c + - rearrange getc_with_restart so that the return values from read() + are handled right + +parse.y + - don't need to set terminate_immediately in yy_stream_get, since + getc_with_restart checks for terminating signals itself + - since readline returns READERR on SIGHUP or SIGTERM, don't need + to set terminate_immediately. Still doesn't handle other + signals well -- will have to check that some more + +bashline.c + - new function, bash_event_hook, for rl_event_hook. Just checks for + terminating signals and acts on them using CHECK_TERMSIG. + - set rl_event_hook to bash_event_hook + +builtins/read.def + - take out setting terminate_immediately; add calls to CHECK_TERMSIG + after read calls + +doc/{bash.1,bashref.texi} + - move the text describing the effect of negative subscripts used to + reference indexed array elements to the paragraphs describing + ${parameter[subscript]}, since that's where they are implemented. + Pointed out by Christopher F. A. Johnson + +arrayfunc.[ch],subst.c + - array_expand_index now takes a new first argument: a SHELL_VAR * + of the array variable being subscripted. Can be used later to fully + implement negative subscripts + + 3/14 + ---- +lib/glob/glob.c + - fix mbskipname to not turn the directory entry name into a wide char + string if the conversion of the pattern to a wide char string fails + - fix mbskipname to call skipname if either the pattern or the filename + can't be converted into a wide-char string + +lib/glob/xmbsrtowcs.c + - fix xdupmbstowcs2 to handle return value of 0 from mbsnrtowcs and + short-circuit with failure in that case. Fixes bug reported by + Roman Rakus + + 3/15 + ---- +bashline.c + - new variable, bash_filename_quote_characters to store the value + assigned to rl_filename_quote_characters so it can be restored + if changed. + - change bashline_reset and attempt_shell_completion to restore + rl_filename_quote_characters if not set to default + + 3/22 + ---- +lib/glob/glob.c + - wdequote_pathname falls back to udequote_pathname if xdupmbstowcs + fails to convert the pathname to a wide-character string + +lib/glob/xmbsrtowcs.c + - xdupmbstowcs2: change to fix problem with leading '\\' (results in + nms == 0, which causes it to short-circuit with failure right + away). Fixes bug pointed out by Werner Fink + - xdupmbstowcs2: compensate for mbsnrtowcs returning 0 by taking the + next single-byte character and going on + - xdupmbstowcs2: change memory allocation to increase by WSBUF_INC + bytes; try to avoid calls to realloc (even if they don't actually + result in more memory being allocated) + + 3/24 + ---- +doc/{bash.1,bashref.texi} + - slightly modify BASH_SUBSHELL description based on complaint from + Sam Liddicott + + 3/25 + ---- +trap.c + - change free_trap_strings to not call free_trap_string for signals + that are being ignored, like reset_or_restore_signal_handlers. + Fixes bug reported by Satoshi Takahashi + + 3/26 + ---- +lib/readline/rltypedefs.h + - remove old Function/VFunction/CPFunction/CPPFunction typedefs as + suggested by Tom Tromey + +lib/readline/rlstdc.h + - move defines for USE_VARARGS/PREFER_STDARG/PREFER_VARARGS from + config.h.in to here because declaration of rl_message in + readline.h uses the defines. This makes it hard for another packages + to use after the header files are installed, since config.h is not + one of the installed files. Suggested by Tom Tromey + + + 3/27 + ---- +print_cmd.c + - change indirection_string from a static buffer to a dynamic one + managed by indirection_level_string(), so we don't end up truncating + PS4. Suggested by Dennis Williamson + +lib/readline/shell.c + - change sh_set_lines_and_columns to use static buffers instead of + allocating the buffers to pass to setenv/putenv + +lib/readline/terminal.c + - change _rl_get_screen_size to not call sh_set_lines_and_columns if + ignore_env == 0 + - _rl_sigwinch_resize_terminal: new function to just retrieve terminal + size, ignoring environment + +lib/readline/rlprivate.h + - new external declaration for _rl_sigwinch_resize_terminal() (currently + unused) + +lib/readline/signals.c + - rl_sigwinch_handler: set _rl_caught_signal to SIGWINCH + - rl_sigwinch_handler: don't immediately call rl_resize_terminal; just + leave _rl_caught_signal set for RL_CHECK_SIGNALS to handle + - _rl_signal_handler: call rl_resize_terminal if sig == SIGWINCH. + Should fix hang when sending multiple repeated SIGWINCH reported by + Henning Bekel + + 3/29 + ---- +lib/sh/snprintf.c + - include math.h for any defines for isinf/isnan + - use code from gnulib documentation to implement isinf/isnan if they + are not defined + +configure.in + - don't check for isinf or isnan; c99 says they're macros anyway + +config.h.in + - remove defines for ISINF_IN_LIBC and ISNAN_IN_LIBC, no longer used + by snprintf.c + + 4/2 + --- +braces.c + - brace_gobbler: fix to understand double-quoted command substitution, + since the shell understands unquoted comsubs. Fixes bug reported + by Michael Whitten + +lib/readline/display.c + - include on MDOS + - get and set screen size using DJGPP-specific calls on MSDOS + - move cursor up clear screen using DJGPP-specific calls + - don't call tputs on DJGPP; there is no good terminfo support + +lib/readline/terminal.c + - include on MDOS + - get and set screen size using DJGPP-specific calls on MSDOS + - use DJGPP-specific initialization on MSDOS, zeroing all the + _rl_term_* variables + - don't call tputs on DJGPP; there is no good terminfo support + DJGPP support from Eli Zaretskii + + 4/6 + --- + +config-top.h + - change DEFAULT_PATH_VALUE to something more useful and modern + + 4/8 + --- +tests/printf2.sub + - make sure LC_ALL and LC_CTYPE are set so LANG assignment takes effect. + Reported by Cedric Arbogast + + 4/11 + ---- +include/chartypes.h + - fix a couple of dicey defines (though ones that don't cause any + compiler warnings) in IN_CTYPE_DOMAIN + +doc/{bashref.texi,bash.1} + - add note referring to duplicating file descriptors in sections + describing redirecting stdout and stderr and appending to stdout + and stderr. Suggested by Matthew Dinger + +pcomplete.c + - it_init_helptopics: new function to support completing on help topics, + not just builtins + - it_helptopics: new programmable completion list of help topics + - build list of helptopic completions in gen_action_completions on + demand + +pcomplete.h + - new extern declaration for it_helptopics + +builtins/complete.def + - the `helptopic' action now maps to CA_HELPTOPIC intead of CA_BUILTIN, + since there are more help topics than just builtins. Suggested by + Clark Wang + + 4/12 + ---- +print_cmd.c + - fix print_arith_for_command to add a call to PRINT_DEFERRED_HEREDOCS + before ending the body of the command, so heredocs get attached to + the right command instead of to the loop. From gentoo bug 363371 + http://bugs.gentoo.org/show_bug.cgi?id=363371 + +execute_cmd.c + - change coproc_pidchk to unset the appropriate shell variables when + the (currently single) known coproc pid terminates + - cleanup and new functions to fully support multiple coprocesses when + and if I decide to go there + + 4/13 + ---- +print_cmd.c + - fix print_group_command to add a call to PRINT_DEFERRED_HEREDOCS + after call to make_command_string_internal before printing closing + `}' + - fix make_command_string_internal to add a call to + PRINT_DEFERRED_HEREDOCS after recursive call to + make_command_string_internal in case cm_subshell before printing + closing `)' + + 4/14 + ---- +print_cmd.c + - change overlapping strcpy in named_function_string to memmove + +sig.h + - UNBLOCK_SIGNAL: convenience define, same as UNBLOCK_CHILD, just + restores an old signal mask + +trap.c + - set_signal: instead of setting the signal handler to SIG_IGN while + installing the new trap handler, block the signal and unblock it + after the new handler is installed. Fixes bug reported by Roman + Rakus + + 4/15 + ---- +doc/{bash.1,bashref.texi} + - make it clear that enabling monitor mode means that all jobs run in + separate process groups + + 4/18 + ---- +builtins/fc.def + - update fix of 4/15/2010 to not take saved_command_line_count into + account when stepping down the history list to make sure that + last_hist indexes something that is valid. Fixes bug reported by + + + 4/19 + ---- +builtins/fc.def + - fc_gethnum: make sure the calculation to decide the last history + entry is exactly the same as fc_builtin. Fixes bug uncovered by + fix of 4/18 to stop seg fault + + 4/22 + ---- +lib/readline/terminal.c + - change _rl_enable_meta_key to set a flag indicating that it sent the + enable-meta sequence + - _rl_disable_meta_key: new function to turn off meta mode after we + turned it on with _rl_enable_meta_key + +lib/readline/rlprivate.h + - extern declaration for _rl_disable_meta_key + +configure.in + - if not cross-compiling, set CFLAGS_FOR_BUILD from any CFLAGS inherited + from the environment. Fixes HP/UX build problem reported by + "Daniel Richard G." + + 4/26 + ---- +config-top.h + - define MULTIPLE_COPROCS to 0 so the code is still disabled but easy + to enable via configure option or editing this file + + 4/29 + ---- +lib/sh/eaccess.c + - freebsd provides faccessat, with the same misfeature as their eaccess + and access implementations (X_OK returns true for uid==0 regardless + of the actual file permissions), so reorganize code to check the + file permissions as with eaccess. Report and fix from Johan Hattne + + + 5/2 + --- +doc/{bash.1,bashref.texi} + - add forward reference to `Pattern Matching' from `Pathname + Expansion', suggested by Greg Wooledge + + 5/5 + --- +pcomplib.c + - the bash_completion project now distributes over 200 completions + for various programs, with no end in sight, so increase the value + of COMPLETE_HASH_BUCKETS from 32 to 128 + +pathexp.c + - quote_string_for_globbing: make sure CTLESC quoting CTLESC is + translated into \ even if the flags include QGLOB_REGEXP. + We don't want to process the second CTLESC as a quote character. + Fixes bug reported by Shawn Bohrer + + 5/6 + --- +builtins/printf.def + - change PRETURN to not call fflush if ferror(stdout) is true + - if a call to one of the stdio functions or printstr leaves + ferror(stdout) true, and PRETURN is going to be called, let PRETURN + print the error message rather than doubling up the messages. Fixes + problem reported by Roman Rakus + + 5/9 + --- +doc/{bash.1,bashref.texi} + - add note to the effect that lists inside compound command can be + terminated by newlines as well as semicolons. Suggested by + Roman Byshko + + 5/10 + ---- +subst.c + - remove_quoted_nulls: fix problem that caused it to skip over the + character after a CTLNUL, which had the effect of skipping every + other of a series of CTLNULs. Fixes bug reported by + Marten Wikstrom + + 5/11 + ---- +subst.c + - extract_process_subst: add SX_COMMAND flag to call to + extract_delimited_string, since we're expanding the same sort of + command as command substitution. Fixes bug reported in Ubuntu + bug 779848 + + 5/12 + ---- +configure.in + - set the prefer_shared and prefer_static variables appropriately + depending on the value of $opt_static_link + +aclocal.m4 + - AC_LIB_LINKFLAGS_BODY: change to not prefer shared versions of the + libraries it's searching for if the prefer_shared variable is "no". + Fixes problem reported by Cedric Arbogast + + 5/13 + ---- +lib/readline/readline.c + - _rl_internal_teardown: add call to _rl_disable_meta_key to make the + meta key active only for the duration of the call to readline() + - _rl_internal_setup: move call to _rl_enable_meta_key here from + readline_initialize_everything so the meta key is active only for + the duration of the call to readline(). Suggestion from Miroslav + Lichvar + +builtins/help.def + - help_builtin: change strncmp to strcmp so that `help read' no longer + matches `readonly'. Suggested by Clark Wang + +config.h.in + - add define for GLIBC21, checked using jm_GLIBC21 as part of the tests + for libintl + +lib/malloc/malloc.c + - internal_free: don't use the cached value of memtop when deciding + whether or not to adjust the break and give memory back to the kernel + when using the GNU C library, since glibc uses sbrk for its own + internal purposes. From Debian bug 614815, reported by Samuel + Thibault + +aclocal.m4 + - BASH_STRUCT_WEXITSTATUS_OFFSET: change AC_RUN_IFELSE to AC_TRY_RUN + to avoid warning about not using AC_LANG_SOURCE + + 5/14 + ---- +bashline.[ch] + - two new functions, bashline_set_event_hook and bashline_reset_event_hook, + to set rl_event_hook to bash_event_hook and back to NULL, respectively + - don't set rl_event_hook unconditionally + +sig.c + - termsig_sighandler: if the shell is currently interactive and + readline is active, call bashline_set_event_hook to cause + termsig_handler to be called via bash_event_hook when the shell + returns from the signal handler + + 5/15 + ---- +lib/readline/display.c + - _rl_col_width: Mac OS X has a bug in wcwidth: it does not return 0 + for UTF-8 combining characters. Added workaround dependent on + MACOSX. Fixes problem pointed out by Thomas De Contes + + + 5/16 + ---- +lib/readline/rlmbutil.h + - WCWIDTH: wrapper for wcwidth that returns 0 for Unicode combining + characters on systems where wcwidth is broken (e.g., Mac OS X). + +lib/readline/{complete,display,mbutil}.c + - use WCWIDTH instead of wcwidth + + 5/17 + ---- +lib/readline/display.c + - update_line: after computing ofd and nfd, see whether the next + character in ofd is a zero-width combining character. If it is, + back ofd and nfd up one, so the base characters no longer compare + as equivalent. Fixes problem reported by Keith Winstein + + +lib/readline/nls.c + - _rl_utf8locale: new flag variable, set to non-zero if the current + locale is UTF-8 + - utf8locale(): new function, returns 1 if the passed lspec (or the + current locale) indicates that the locale is UTF-8. Called from + _rl_init_eightbit + +lib/readline/rlprivate.h + - extern declaration for _rl_utf8locale + +locale.c + - locale_utf8locale: new flag variable, set to non-zero if the current + locale is UTF-8 (currently unused) + - locale_isutf8(): new function, returns 1 if the passed lspec (or the + current locale) indicates that the locale is UTF-8. Should be called + whenever the locale or LC_CTYPE value is modified + +aclocal.m4 + - BASH_WCWIDTH_BROKEN: new test for whether or not wcwidth returns + zero-width characters like unicode combining characters as having + display length 1; define WCWIDTH_BROKEN in this case + +config.h.in + - WCWIDTH_BROKEN: new define + +lib/readline/rlmbutil.h + - change WCWIDTH macro to use _rl_utf8locale and the full range of + Unicode combining characters (U+0300-U+036F) + + 5/19 + ---- +lib/readline/rlprivate.h + - _rl_search_context: new member, prevc, will hold character read + prior to lastc + +lib/readline/isearch.c + - _rl_isearch_dispatch: if the character causes us to index into + another keymap, save that character in cxt->prevc + - _rl_isearch_dispatch: if we index into another keymap, but don't + find a function that's special to i-search, and the character that + caused us to index into that keymap would have terminated the + search, push back cxt->prevc and cxt->lastc to make it appear as + if `prevc' terminated the search, and execute lastc as a command. + We have to push prevc back so we index into the same keymap before + we read lastc. Fixes bug report from Davor Cubranic + + + 5/20 + ---- +expr.c + - expr_bind_variable: pay attention to the return value from + bind_variable and check whether or not we should error out due to + a readonly or noassign variable. Fixes bug reported by Eric + Blake + + 5/26 + ---- + +lib/readline/search.c + - include histlib.h for ANCHORED_SEARCH defines + - rl_history_search_flags: new variable, holds ANCHORED_SEARCH flag for + the duration of a history search + - rl_history_search_reinit: takes a new flags variable, defines whether + or not the search is anchored; assigned to rl_history_search_flags + - rl_history_serarch_reinit: if ANCHORED_SEARCH flag passed, add ^ to + beginning of search string; otherwise search string is unmodified + - rl_history_search_internal: set rl_point appropriately based on + whether or not rl_history_search_flags includes ANCHORED_SEARCH + - rl_history_substr_search_forward: new function, for non-anchored + substring search forward through history for string of characters + preceding rl_point + - rl_history_substr_search_backward: new function, for non-anchored + substring search backward through history for string of characters + preceding rl_point. Original code from Niraj Kulkarni + + +lib/readline/readline.h + - extern declarations for rl_history_substr_search_{for,back}ward + +lib/readline/funmap.c + - history-substring-search-forward: new bindable command, invokes + rl_history_substr_search_forward + - history-substring-search-backward: new bindable command, invokes + rl_history_substr_search_backward + +lib/readline/doc/{rluser.texi,readline.3} + - document history-substring-search-forward and + history-substring-search-backward + + 5/27 + ---- +{nojobs,jobs}.c + - add support for DONT_REPORT_SIGTERM so that the shell doesn't print + a message when a job exits due to SIGTERM since that's the default + signal sent by the kill builtin. Suggested by Marc Herbert + + +config-top.h + - DONT_REPORT_SIGTERM: new user-modifiable setting. Commented out + by default + + 5/28 + ---- +lib/readline/bind.c + - _rl_skip_to_delim: skip to a closing double quote or other delimiter, + allowing backslash to quote any character, including the delimiter + - rl_parse_and_bind: call _rl_skip_to_delim instead of using inline + code + - rl_parse_and_bind: allow quoted strings as the values of string + variables. Variable values without double quotes have trailing + whitespace removed (which still allows embedded whitespace, for + better or worse). Fixes problem with string variables not matching + in `set' command if values happen to have trailing spaces or tabs + (debian bash bug #602762), but introduces slight incompatibility. + + 5/29 + ---- +doc/{bash.1,bashref.texi} + - clarify unset description to specify that without options, a + variable, then a shell function if there is no variable by that + name, is unset. Fixes discrepancy reported by Mu Qiao + + + 6/4 + ---- +doc/{bash.1,bashref.texi} + - clarify description of LINES and COLUMNS (and checkwinsize shopt + option) to make it clear that only interactive shells set a + handler for SIGWINCH and update LINES and COLUMNS. Original + report submitted by Jonathan Nieder + +arrayfunc.c + - expand_compound_array_assignment: defer expansion of words between + parens when performing compound assignmnt to an associative array + variable + - assign_compound_array_list: perform the same expansions when doing + a compound array assignment to an associative array variable as + when doing a straight array index assignment. The idea is that + foo=( [ind1]=bar [ind2]=quux) + is the same as + foo[ind1]=bar ; foo[ind2]=quux + + This fixes problems with double-expansion and quote removal being + performed on the array indices + + 6/13 + ---- +doc/{bash.1,bashref.texi} + - Add a little text to make it clear that the locale determines how + range expressions in glob patterns are handled. + + + 6/21 + ---- +builtins/read.def + - display a message and return error status if -a is used with an + existing associative array. Fixes bug reported by Curtis Doty + + + 6/24 + ---- +{jobs,nojobs}.c + - non-interactive shells now react to the setting of checkwinsize + and set LINES and COLUMNS after a foreground job exits. From a + suggestion by Leslie Rhorer + +doc/{bash.1,bashref.texi} + - checkwinsize: remove language saying that only interactive shells + check the window size after each command + +lib/readline/histfile.c + - history_backupfile: new file, creates a backup history file name + given a filename (appending `-') + - history_do_write: when overwriting the history file, back it up + before writing. Restore backup file on a write error. Suggested + by chkno@chkno.net + +bashline.c + - find_cmd_name: two new arguments, return the start and end of the + actual text string used to find the command name, without taking + whitespace into account + - attempt_shell_completion: small changes to make sure that completion + attempted at the beginning of a non-empty line does not find a + programmable completion, even if the command name starts at point + - attempt_shell_completion: small change to make sure that completion + does not find a progcomp when in whitespace before the command + name + - attempt_shell_completion: small change to make sure that completion + does not find a progcomp when point is at the first character of a + command name, even when there is leading whitespace (similar to + above). Fixes problems noted by Ville Skytta + +subst.c + - brace_expand_word_list: since the individual strings in the strvec + returned by brace_expand are already allocated, don't copy them to + newly-allocated memory when building the WORD_LIST, just use them + intact + +locale.c + - locale_mb_cur_max: cache value of MB_CUR_MAX when we set or change + the locale to avoid a function call every time we need to read it + +shell.h + - new struct to save shell_input_line and associated variables: + shell_input_line_state_t + - add members of sh_parser_state_t to save and restore token and the + size of the token buffer + +parse.y + - {save,restore}_input_line_state: new functions to save and restore + shell_input_line and associated variables + - {save,restore}_parser_state: add code to save and restore the token + and token buffer size + - xparse_dolparen: call save_ and restore_input_line_state to avoid + problems with overwriting shell_input_line when we recursively + call the parser to parse a command substitution. Fixes bug + reported by Rui Santos + +include/shmbutil.h + - use locale_mb_cur_max instead of MB_CUR_MAX in ADVANCE_CHAR and + similar macros + +lib/glob/smatch.c + - rangecmp,rangecmp_wc: change to take an additional argument, which + forces the use of strcoll/wscoll when non-zero. If it's 0, a new + variable `glob_asciirange' controls whether or not we use strcoll/ + wscoll. If glob_asciirange is non-zero, we use straight + C-locale-like ordering. Suggested by Aharon Robbins + + + 6/30 + ---- +execute_cmd.c + - execute_pipeline: make sure the lastpipe code is protected by + #ifdef JOB_CONTROL. Fixes problem reported by Thomas Cort + + + 7/2 + --- +lib/readline/complete.c + - EXPERIMENTAL: remove setting of _rl_interrupt_immediately around + completion functions that touch the file system. Idea from Jan + Kratochvil and the GDB development + team + +lib/readline/signals.c + - rl_signal_handler: if we're in callback mode, don't interrupt + immediately on a SIGWINCH + + 7/3 + --- +bashline.c + - set_directory_hook: and its siblings are a new set of functions to + set, save, and restore the appropriate directory completion hook + - change callers to use {set,save,restore}_directory_hook instead of + manipulating rl_directory_rewrite_hook directly + - dircomplete_expand: new variable, defaults to 0, if non-zero causes + directory names to be word-expanded during word and filename + completion + - change {set,save,restore}_directory_hook to look at dircomplete_expand + and change rl_directory_completion_hook or rl_directory_rewrite_hook + appropriately + +bashline.h + - extern declaration for set_directory_hook so shopt code can use it + + 7/6 + --- +builtins/shopt.def + - globasciiranges: new settable shopt option, makes glob ranges act + as if in the C locale (so b no longer comes between A and B). + Suggested by Aharon Robbins + + 7/7 + --- +doc/{bash.1,bashref.texi} + - document new `globasciiranges' shopt option + + 7/8 + --- +builtins/shopt.def + - direxpand: new settable option, makes filename completion expand + variables in directory names like bash-4.1 did. + - shopt_set_complete_direxpand: new function, does the work for the + above by calling set_directory_hook + +doc/{bash.1,bashref.texi} + - document new `direxpand' shopt option + + 7/15 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: when adding character to search string, use + cxt->lastc (which we use in the switch statement) instead of c, + since lastc can be modified earlier in the function + + 7/18 + ---- +lib/readline/rlprivate.h + - _rl_search_context: add another member to save previous value of + (multibyte) lastc: pmb is to mb as prevc is to lastc + +lib/readline/isearch.c: + - _rl_isearch_dispatch: if a key sequence indexes into a new keymap, + but doesn't find any bound function (k[ind].function == 0) or is + bound to self-insert (k[ind].function == rl_insert), back up and + insert the previous character (the one that caused the index into a + new keymap) and arrange things so the current character is the next + one read, so both of them end up in the search string. Fixes bug + reported by Clark Wang + - _rl_isearch_dispatch: a couple of efficiency improvements when adding + characters to the isearch string + + 7/24 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: save and restore cxt->mb and cxt->pmb + appropriately when in a multibyte locale + +doc/{bash.1,bashref.texi} + - correct description of {x}>file (and other redirection operators + that allocate a file descriptor) to note the the fd range is + greater than or equal to 10. Fixes problem reported by + Christian Ullrich + +lib/readline/signals.c + - rl_signal_handler: don't interrupt immediately if in callback mode + +lib/readline/callback.c + - rl_callback_read_char: install signal handlers only when readline + has control in callback mode, so readline's signal handlers aren't + called when the application is active (e.g., between the calls to + rl_callback_handler_install and rl_callback_read_char). If the + readline signal handlers only set a flag, which the application + doesn't know about, the signals will effectively be ignored until + the next time the application calls into the readline callback + interface. Fixes problem of calling unsafe functions from signal + handlers when in callback mode reported by Jan Kratochvil + + +execute_cmd.c + - fix_assignment_words: when in Posix mode, the `command' builtin + doesn't change whether or not the command name it protects is an + assignment builtin. One or more instances of `command' + preceding `export', for instance, doesn't make `export' treat its + assignment statement arguments differently. Posix interpretation + #351 + +doc/{bash.1,bashref.texi} + - document new Posix-mode behavior of `command' when preceding builtins + that take assignment statements as arguments + +builtins/printf.def + - printstr: if fieldwidth or precision are < 0 or > INT_MAX when + supplied explicitly (since we take care of the `-' separately), + clamp at INT_MAX like when using getint(). Fixes issue reported + by Ralph Coredroy + + 7/25 + ---- +lib/readline/chardefs.h + - isxdigit: don't define if compiling with c++; declared as a c++ + template function. Fixes bug reported by Miroslav Lichvar + + +builtins/printf.def + - getint: if garglist == 0, return whatever getintmax returns (0). + Fixes bug reported by Ralph Coredroy + + 7/28 + ---- +doc/{bash.1,bashref.texi} + - minor changes to the descriptions of the cd and pushd builtins + +lib/sh/zread.c + - zsyncfd: change variable holding return value from lseek to + off_t. Bug report and fix from Gregory Margo + + 8/1 + --- +expr.c + - don't check for division by 0 when in a context where no evaluation + is taking place. Fixes bug reported by dnade.ext@orange-ftgroup.com + + 8/6 + --- +execute_cmd.c + - execute_command_internal: the parent branch of the subshell code + (where the child calls execute_in_subshell) should not close all + open FIFOs with unlink_fifo_list if it's part of a shell function + that's still executing. Fixes bug reported by Maarten Billemont + + + 8/9 + --- +builtins/common.c + - get_exitstat: return EX_BADUSAGE (2) on a non-numeric argument + +builtins/return.def + - return_builtin: just call get_exitstat to get the return status, + let it handle proper parsing and handling of arguments. Fixes + issue most recently raised by Linda Walsh . + Reverses change from 9/11/2008 (see above) + + 8/16 + ---- +doc/{bash.1,bashref.texi} + - clean up `set -e' language to make it clearer that any failure of + a compound command will cause the shell to exit, not just subshells + and brace commands + + 8/17 + ---- +configure.in + - make the various XXX_FOR_BUILD variables `precious' to autoconf to + avoid stale data + - change how CC_FOR_BUILD is initialized when cross-compiling and not, + but do not change behavior + - initialize CFLAGS_FOR_BUILD to -g when cross-compiling + - initialize LIBS_FOR_BUILD to $(LIBS) when not cross-compiling, empty + when cross-compiling + - create AUTO_CFLAGS variable to hold basic CFLAGS defaults; used when + CFLAGS not inherited from environment (like effect of old + auto_cflags variable) + - substitute LIBS_FOR_BUILD into output Makefiles + [changes inspired by bug report from Nathan Phillip Brink + -- gentoo bug 378941] + +builtins/Makefile.in + - substitute LIBS_FOR_BUILD from configure, not strictly initialized + to $(LIBS) + + 8/27 + ---- +doc/{bash.1,bashref.texi} + - minor changes to the here string description to clarify the + expansions performed on the word + +support/shobj-conf + - handle compilation on Lion (Mac OS X 10.7/darwin11) with changes + to darwin stanzas. Fixes readline bug reported by Vincent + Sheffer + +lib/sh/strtrans.c + - ansic_wshouldquote: check a string with multi-byte characters for + characters that needs to be backslash-octal escaped for $'...' + - ansic_shouldquote: if is_basic fails for one character, let + ansic_wshouldquote examine the rest of the string and return what + it returns. From a patch sent by Roman Rakus + + 8/30 + ---- +lib/sh/strtrans.c + - ansic_quote: changes to quote (or not) multibyte characters. New + code converts them to wide characters and uses iswprint to check + valid wide chars. From a patch sent by Roman Rakus + + + 9/7 + --- +lib/sh/shquote.c + - sh_backslash_quote: change to be table-driven so we can use a + different table if we want to + - sh_backslash_quote: takes a second char table[256] argument; + +externs.h + - sh_backslash_quote: add second argument to function prototype + +bashline.c,braces.c,parse.y,builtins/printf.def + - change callers of sh_backslash_quote to add second argument + +bashline.c + - filename_bstab: table of characters to pass to sh_backslash_quote; + characters with value 1 will be backslash-quoted + - set_filename_bstab: turn on characters in filename backslash-quote + table according to passed string argument + - call set_filename_bstab every time rl_filename_quote_characters is + assigned a value + - bash_quote_filename: call sh_backslash_quote with filename_bstab + as second argument. This allows other characters in filenames to + be quoted without quoting, for instance, a dollar sign in a shell + variable reference + + 9/8 + --- +bashline.c + - complete_fullquote: new variable, controls table passed to + sh_backslash_quote. If non-zero (the default), the standard set + of shell metacharacters -- as in bash versions up to and including + bash-4.2 -- gets backslash-quoted by the completion code. If zero, + sh_backslash_quote gets the table with the characters in the + variable reference removed, which means they are removed from the + set of characters to be quoted in filenames + + 9/10 + ---- +bashline.c + - bash_filename_stat_hook: new function, designed to expand variable + references in filenames before readline passes them to stat(2) + to determine whether or not they are a directory + + 9/15 + ---- +builtins/declare.def + - if assign_array_element fails due to a bad (or empty) subscript, mark + it as an assignment error and don't attempt any further processing + of that declaration. Fixes segfault bug reported by Diego Augusto + Molina + + 9/19 + ---- +expr.c + - exppower: replace the simple exponentiation algorithm with an + implementation of exponentiation by squaring. Inspired by report + from Nicolas ARGYROU + +bashline.c + - bash_quote_filename: check for rtext being non-null before + dereferencing it + - set_saved_history: operate_and_get_next assumes that the previous + line was added to the history, even when the history is stifled and + at the max number of entries. If it wasn't, make sure the history + number is incremented properly. Partial fix for bug reported by + gregrwm + +doc/{bash.1,bashref.texi},lib/readline/doc/{hsuser,rluser}.texi + - minor editorial changes inspired by suggestions from + Roger Zauner + + 9/20 + ---- +lib/intl/localealias.c + - read_alias_file: close resource leak (fp) when returning on error + + 9/22 + ---- +execute_command.c + - execute_intern_function: implement Posix interpretation 383 by making + it an error to define a function with the same name as a special + builtin when in Posix mode. + http://austingroupbugs.net/view.php?id=383#c692 + + 9/25 + ---- +doc/{bash.1,bashref.texi} + - formatting and some content changes from Benno Schulenberg + + - document new posix-mode behavior from interp 383 change of 9/22 + + 9/30 + ---- +execute_cmd.c + - shell_execve: add strerror to error message about executable file + that shell can't execute as a shell script. From suggestion by + daysleeper + + 10/1 + ---- +bashhist.c + - maybe_add_history: act as if literal_history is set when parser_state + includes PST_HEREDOC, so we save the bodies of here-documents just + as they were entered. Fixes bug reported by Jonathan Wakely + + - bash_add_history: make sure that the second and subsequent lines of + a here document don't have extra newlines or other delimiting + chars added, since they have the trailing newline preserved, when + `lithist' is set and history_delimiting_chars isn't called + +execute_cmd.c + - execute_command_internal: avoid fd exhaustion caused by using + process substitution in loops inside shell functions by using + copy_fifo_list and close_new_fifos (). Fixes debian bash bug + 642504 + +lib/readline/complete.c + - new variable, rl_filename_stat_hook, used by append_to_match. If + filename completion is desired, and rl_filename_stat_hook points + to a function, call that function to expand the filename in an + application-specific way before calling stat. + +bashline.c + - bash_default_completion: if variable completion returns a single + match, use bash_filename_stat_hook and file_isdir to determine + whether or not the variable name expands to a directory. If it + does, set the filename_append_character to `/'. This is not + perfect, so we will see how it works out. Adds functionality + requested by Peter Toft and Patrick Pfeifer + + - rl_filename_stat_hook: assigned bash_filename_stat_hook, so things + like $HOME/Downloads (after completion) have a slash appended. + In general, this causes the stat hook to be called whenever + filename completion is appended. Adds functionality requested by + Patrick Pfeifer + +lib/readline/readline.h + - new extern declaration for rl_filename_stat_hook + +lib/readline/doc/rltech.texi + - rl_directory_rewrite_hook: now documented + - rl_filename_stat_hook: document + +pcomplete.c + - gen_action_completions: in the CA_DIRECTORY case, turn off + rl_filename_completion_desired if it was off before we called + rl_filename_completion_function and we didn't get any matches. + Having it on causes readline to quote the matches as if they + were filenames. Adds functionality requested by many, + including Clark Wang + +assoc.[ch] + - assoc_replace: new function, takes the same arguments as + assoc_insert, but returns the old data instead of freeing it + - assoc_insert: if the object returned by hash_insert doesn't have + the same value for its key as the key passed as an argument, we + are overwriting an existing value. In this case, we can free the + key. Fixes bug reported by David Parks + + 10/5 + ---- +print_cmd.c + - indirection_level_string: small change to only re-enable `x' + option after calling decode_prompt_string if it was on before. In + normal mode, it will be, but John Reiser + has a novel use for that code in conjunction with a pre-loaded + shared library that traces system call usage in shell scripts + + 10/10 + ----- +Makefile.in + - Fix from Mike Frysinger to avoid trying to + build y.tab.c and y.tab.h with two separate runs of yacc if + parse.y changes. Problem with parallel makes + - Fix from Mike Frysinger to avoid subdirectory + builds each trying to make version.h (and all its dependencies) + +lib/sh/Makefile.in + - remove some dependencies on version.h where it doesn't make sense + +variables.c + - initialize_shell_variables: while reading the environment, a shell + running in posix mode now checks for SHELLOPTS being readonly (it + gets set early on in main()) before trying to assign to it. It + saves an error message and the variable gets parsed as it should. + Fixes bug reported by Len Giambrone + + 10/14 + ----- +doc/{bash.1,bashref.texi} + - add to the "duplicating file descriptors" description that >&word + doesn't redirect stdout and stderr if word expands to `-' + - add to the "appending standard output and standard error" + description a note that >&word, where word is a number or `-', + causes other redirection operators to apply for sh and Posix + compatibility reasons. Suggested by Greg Wooledge + + + 10/15 + ----- +pcomplete.c + - change pcomp_filename_completion_function to only run the filename + dequoting function in the cases (as best as it can figure) where + readline won't do it via rl_filename_completion_function. Based + on reports from + + 10/19 + ----- +bashline.c + - attempt_shell_completion: add call to set_directory_hook() to make + sure the rewrite functions are correct. It's cheap and doesn't + hurt + - command_word_completion_function: if completing a command name that + starts with `.' or `..', temporarily suppress the effects of the + `direxpand' option and restore the correct value after calling + rl_filename_completion_function. If it's enabled, the directory + name will be rewritten and no longer match `./' or `../'. Fixes + problem reported by Michael Kalisz + + 10/22 + ----- +builtins/history.def + - push_history: make sure remember_on_history is enabled before we + try to delete the last history entry -- the `history -s' command + might not have been saved. Fixes bug reported by + lester@vmw-les.eng.vmware.com + +lib/readline/complete.c + - rl_callback_read_char: add calls to a macro CALLBACK_READ_RETURN + instead of straight return; add same call at end of function. + Placeholder for future work in deinstalling signal handlers when + readline is not active + + 10/25 + ----- +expr.c + - exp2: catch arithmetic overflow when val1 == INTMAX_MIN and val2 == -1 + for DIV and MOD and avoid SIGFPE. Bug report and pointer to fix + from Jaak Ristioja + - expassign: same changes for arithmetic overflow for DIV and MOD + + 10/28 + ----- +subst.c + - parameter_brace_expand: allow pattern substitution when there is an + expansion of the form ${var/} as a no-op: replacing nothing with + nothing + - parameter_brace_patsub: don't need to check for PATSUB being NULL; + it never is + +flags.c + - if STRICT_POSIX is defined, initialize history_expansion to 0, since + history expansion (and its treatment of ! within double quotes) is + not a conforming posix environment. From austin-group issue 500 + +lib/readline/histexpand.c + - history_expand: when processing a string within double quotes + (DQUOTE == 1), make the closing double quote inhibit history + expansion, as if the word were outside double quotes. In effect, + we assume that the double quote is followed by a character in + history_no_expand_chars. tcsh and csh seem to do this. This + answers a persistent complaint about history expansion + + 10/29 + ----- +make_cmd.c + - make_arith_for_command: use skip_to_delim to find the next `;' + when breaking the string between the double parens into three + separate components instead of a simple character loop. Fixes + bug reported by Dan Douglas + + 11/2 + ---- +Makefile.in + - make libbuiltins.a depend on builtext.h to serialize its creation + and avoid conflict between multiple invocations of mkbuiltins. + Fix from Mike Frysinger + + 11/5 + ---- +findcmd.c + - user_command_matches: if stat(".", ...) returns -1, set st_dev + and st_ino fields in dotinfo to 0 to avoid same_file matches + - find_user_command_in_path: check stat(2) return the same way + +lib/glob/glob.c + - glob_vector: don't call strlen(pat) without checking pat == 0 + - glob_dir_to_array: make sure to free `result' and all allocated + members before returning error due to malloc failure + - glob_vector: make sure to free `nextname' and `npat' on errors + (mostly when setting lose = 1) + - glob_vector: if flags & GX_MATCHDIRS but not GX_ALLDIRS, make + sure we free `subdir' + - glob_filename: when expanding ** (GX_ALLDIRS), make sure we + free temp_results (return value from glob_vector) + +lib/glob/xmbsrtowcs.c + - xdupmbstowcs: fix call to realloc to use sizeof (char *) instead + of sizeof (char **) when assigning idxtmp + +execute_cmd.c + - print_index_and_element: return 0 right away if L == 0 + - is_dirname: fix memory leak by freeing `temp' + - time_command: don't try to deref NULL `command' when assigning + to `posix_time' + - shell_execve: null-terminate `sample' after READ_SAMPLE_BUF so it's + terminated for functions that expect that + +builtins/read.def + - read_builtin: don't call bind_read_variable with a potentially-null + string + +pcomplete.c + - gen_command_matches: don't call dispose_word_desc with a NULL arg + - gen_compspec_completions: fix memory leak by freeing `ret' before + calling gen_action_completions (tcs, ...). happens when + performing directory completion as default and no completions + have been generated + - gen_progcomp_completions: make sure to set foundp to 0 whenever + returning NULL + - it_init_aliases: fix memory leak by freeing alias_list before + returning + +bashline.c + - command_word_completion_function: don't call restore_tilde with a + NULL directory_part argument + - bash_directory_expansion: bugfix: don't throw away results of + rl_directory_rewrite_hook if it's set and returns non-zero + - bind_keyseq_to_unix_command: free `kseq' before returning error + +arrayfunc.c + - assign_array_element_internal: make sure `akey' is freed if non-null + before returning error + - assign_compound_array_list: free `akey' before returning error + - array_value_internal: free `akey' before returning error + - unbind_array_element: free `akey' before returning error + +subst.c + - array_length_reference: free `akey' before returning error in case + of expand_assignment_string_to_string error + - array_length_reference: free `akey' after call to assoc_reference + - skip_to_delim: if skipping process and command substitution, free + return value from extract_process_subst + - parameter_brace_substring: free `val' (vtype == VT_VARIABLE) before + returning if verify_substring_values fails + - parameter_brace_expand: remove two duplicate lines that allocate + ret in parameter_brace_substring case + - parameter_brace_expand: convert `free (name); name = xmalloc (...)' + to use `xrealloc (name, ...)' + - parameter_brace_expand: free `name' before returning when handling + ${!PREFIX*} expansion + - split_at_delims: fix memory leak by freeing `d2' before returning + +redir.c + - redirection_error: free `filename' if the redirection operator is + REDIR_VARASSIGN by assigning allocname + +eval.c + - send_pwd_to_eterm: fix memory leak by freeing value returned by + get_working_directory() + +builtins/cd.def + - change_to_directory: fix memory leak by freeing return value from + resetpwd() + - cd_builtin: fix memory leak by freeing value returned by dirspell() + - cd_builtin: fix memory leak by freeing `directory' if appropriate + before overwriting with return value from resetpwd() + +builtins/type.def + - describe_command: free `full_path' before overwriting it with return + value from sh_makepath + +builtins/complete.def + - compgen_builtin: fix memory leak by calling strlist_dispose (sl) + before overwriting sl with return value from completions_to_stringlist + +builtins/hash.def + - list_hashed_filename_targets: fix memory leak by freeing `target' + +make_cmd.c + - make_arith_for_command: free `init', `test', and `step' before + returning error on parse error + +jobs.c + - initialize_job_control: don't call move_to_high_fd if shell_tty == -1 + +general.c + - check_dev_tty: don't call close with an fd < 0 + - legal_number: deal with NULL `string' argument, return invalid + +lib/sh/fmtulong.c + - fmtulong: if the `base' argument is invalid, make sure we index + buf by `len-1' at maximum + +print_cmd.c + - print_deferred_heredocs: don't try to dereference a NULL `cstring' + - cprintf: make sure to call va_end (args) + +variables.c + - push_dollar_vars: fix call to xrealloc to use sizeof (WORD_LIST *) + instead of sizeof (WORD_LIST **) + +lib/sh/zmapfd.c + - zmapfd: if read returns error, free result and return -1 immediately + instead of trying to reallocate it + + 11/6 + ---- +execute_cmd.c + - cpl_reap: rewrote to avoid using pointer after freeing it; now builds + new coproc list on the fly while traversing the old one and sets the + right values for coproc_list when done + + 11/12 + ----- +builtins/set.def + - if neither -f nor -v supplied, don't allow a readonly function to + be implicitly unset. Fixes bug reported by Jens Schmidt + + +lib/readline/callback.c + - change CALLBACK_READ_RETURN to clear signal handlers before returning + from rl_callback_read_char so readline's signal handlers aren't + installed when readline doesn't have control. Idea from Jan + Kratochvil and the GDB development + team + +pcomplete.h + - COPT_NOQUOTE: new complete/compgen option value + +builtins/complete.def + - noquote: new complete/compgen option; will be used to disable + filename completion quoting + +pcomplete.c + - pcomp_set_readline_variables: pay attention to COPT_NOQUOTE; turns + of rl_filename_quoting_desired if set; turns it on if unset (value + is inverted, since default is on) + +doc/bash.1,lib/readline/doc/rluser.texi + - document new -o noquote option to complete/compgen/compopt + +pathexp.c + - quote_string_for_globbing: if QGLOB_REGEXP, make sure characters + between brackets in an ERE bracket expression are not inappropriately + quoted with backslashes. This is a pretty substantial change, + should be stressed when opening bash up for alpha and beta tests. + Fixes bug pointed out by Stephane Chazleas + + +doc/{bash.1,bashref.texi} + - document that regexp matches can be inconsistent when quoting + characters in bracket expressions, since usual quoting characters + lose their meaning within brackets + - note that regular expression matching when the pattern is stored + in a shell variable which is quoted for expansion causes string + matching + +redir.h + - RX_SAVEFD: new flag value; notes that a redirection denotes an + fd used to save another even if it's not >= SHELL_FD_BASE + +redir.c + - do_redirection_internal: when deciding whether or not to reset the + close-on-exec flag on a restored file descriptor, trust the value + of redirect->flags & RX_SAVCLEXEC even if the fd is < SHELL_FD_BASE + if the RX_SAVEFD flag is set + - add_undo_redirect: set the RX_SAVEFD flag if the file descriptor + limit is such that the shell can't duplicate to a file descriptor + >= 10. Fixes a limitation that tripped a coreutils test reported + by Paul Eggert + + 11/19 + ----- +doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi + - make it clear that bash runs HISTFILESIZE=$HISTSIZE after reading + the startup files + - make it clear that bash runs HISTSIZE=500 after reading the + startup files + - make it clear that setting HISTSIZE=0 causes commands to not be + saved in the history list + - make it clear that setting HISTFILESIZE=0 causes the history file + to be truncated to zero size + +variables.c + - sv_histsize: change so setting HISTSIZE to a value less than 0 + causes the history to be `unstifled' + - sv_histsize: change so setting HISTFILESIZE to a value less than 0 + results in no file truncation + - make it clear that numeric values less than 0 for HISTFILESIZE or + HISTSIZE inhibit the usual functions + + 11/23 + ----- +parse.y + - save_input_line_state: add missing `return ls' at the end, since the + function is supposed to return its argument. Pointed out by + Andreas Schwab + +builtins/read.def + - skip over NUL bytes in input, as most modern shells seem to. Bug + report by Matthew Story + +lib/readline/vi_mode.c + - rl_vi_replace: set _rl_vi_last_key_before_insert to invoking key + + 11/25 + ----- +builtins/read.def + - read_builtin: if xrealloc returns same pointer as first argument, + don't bother with the remove_unwind_protect/add_unwind_protect pair + - read_builtin: set a flag (`reading') around calls to zread/zreadc + and readline() + - sigalrm: change to set flag (`sigalrm_seen') and only longjmp if + currently in read(2) (reading != 0) + - CHECK_ALRM: new macro, checks sigalrm_seen and longjmps if non-zero, + behavior of old SIGALRM catching function + - read_builtin: call CHECK_ALRM in appropriate places while reading + line of input. Fixes bug reported by Pierre Gaston + + +lib/readline/vi_mode.c + - rl_vi_replace: initialize characters before printing characters in + vi_replace_keymap to their default values in vi_insertion_keymap, + since we're supposed to be in insert mode replacing characters + - rl_vi_replace: call rl_vi_start_inserting to set last command to + `R' for undo + - rl_vi_replace: set _rl_vi_last_key_before_insert to `R' for future + use by _rl_vi_done_inserting + - vi_save_insert_buffer: new function, broke out code that copies text + into vi_insert_buffer from _rl_vi_save_insert + - _rl_vi_save_replace: new function, saves text modified by + rl_vi_replace (using current point and vi_replace_count to figure + it out) to vi_replace_buffer + - _rl_vi_save_insert: call vi_save_insert_buffer + - _rl_vi_done_inserting: if _rl_vi_last_key_before_insert == 'R', call + _rl_vi_save_replace to save text modified in replace mode (uses + vi_save_insert_buffer) + - _rl_vi_replace_insert: new function, replaces the number of chars + in vi_insert_buffer after rl_point with contents ov vi_insert_buffer + - rl_vi_redo: call _rl_vi_replace_insert if last command == 'R' and + there's something in vi_insert_buffer. Fixes bug with `.' not + redoing the most recent `R' command, reported by Geoff Clare + in readline area on savannah + + 11/26 + ----- +lib/readline/rlprivate.h + - RL_SIG_RECEIVED(): evaluate to non-zero if there is a pending signal + to be handled + - RL_SIGINT_RECEIVED(): evaluate to non-zero if there is a pending + SIGINT to be handled + +lib/readline/complete.c + - remove all mention of _rl_interrupt_immediately + - rl_completion_matches: check RL_SIG_RECEIVED after each call to + the entry function, call RL_CHECK_SIGNALS if true to handle the + signal + - rl_completion_matches: if RL_SIG_RECEIVED evaluates to true, free + and zero out the match_list this function allocated + - rl_completion_matches: if the completion entry function is + rl_filename_completion_function, free the contents of match_list, + because that function does not keep state and will not free the + entries; avoids possible memory leak pointed out by + Garrett Cooper + - gen_completion_matches: if RL_SIG_RECEIVED evalutes to true after + calling rl_attempted_completion_function, free the returned match + list and handle the signal with RL_CHECK_SIGNALS; avoids + possible memory leak pointed out by Garrett Cooper + + - gen_completion_matches: if RL_SIG_RECEIVED evaluates to true after + calling rl_completion_matches, free the returned match list and + handle the signal with RL_CHECK_SIGNALS + +lib/readline/util.c + - rl_settracefp: new utility function to set the tracing FILE * + +lib/readline/signals.c + - _rl_sigcleanup: pointer to a function that will be called with the + signal and a void * argument from _rl_handle_signal + - _rl_sigcleanarg: void * that the rest of the code can set to have + passed to the signal cleanup function + - _rl_handle_signal: if _rl_sigcleanup set, call as + (*_rl_sigcleanup) (sig, _rl_sigcleanarg) + +lib/readline/rlprivate.h + - extern declarations for _rl_sigcleanup and _rl_sigcleanarg + +lib/readline/complete.c + - _rl_complete_sigcleanup: signal cleanup function for completion code; + calls _rl_free_match_list on _rl_sigcleanarg if signal == SIGINT + - rl_complete_internal: before calling display_matches if what_to_do + == `?', set _rl_sigcleanup to _rl_complete_sigcleanup so the match + list gets freed on SIGINT; avoids possible memory leak pointed out + by Garrett Cooper + - rl_complete_internal: in default switch case, call _rl_free_match_list + before returning to avoid memory leak + +doc/bashref.texi + - start at a set of examples for the =~ regular expression matching + operator, touching on keeping the pattern in a shell variable and + quoting portions of the pattern to remove their special meaning + + 12/1 + ---- +lib/glob/gmisc.c + - extglob_pattern: new function, returns 1 if pattern passed as an + argument looks like an extended globbing pattern + +lib/glob/glob.c + - skipname: return 0 immediately if extglob_pattern returns non-zero, + let the extended globbing code do the right thing with skipping + names beginning with a `.' + - mbskipname: return 0 immediately if extglob_pattern returns non-zero, + let the extended globbing code do the right thing with skipping + names beginning with a `.'. Fixes bug reported by Yongzhi Pan + + + 12/2 + ---- +lib/glob/smatch.c + - patscan, patscan_wc: no longer static so other parts of the glob + library can use them, renamed to glob_patscan, glob_patscan_wc + +lib/glob/glob.c + - extern declarations for glob_patscan, glob_patscan_wc + - wchkname: new function, does skipname on wchar_t pattern and dname, + old body of mbskipname after converting to wide chars + - extglob_skipname: new function, checks all subpatterns in an extglob + pattern to determine whether or not a filename should be skipped. + Calls skipname for each subpattern. Dname is only skipped if all + subpatterns indicate it should be. Better fix for bug reported by + Yongzhi Pan + - wextglob_skipname: wide-char version of extglob_skipname, calls + wchkname instead of calling back into mbskipname for each + subpattern to avoid problems with char/wchar_t mismatch + - skipname: call extglob_skipname if extglob_pattern returns non-zero + - mbskipname: call wextglob_skipname if extglob_pattern returns non-zero + - mbskipname: short-circuit immediately if no multibyte chars in + pattern or filename + +execute_cmd.c + - execute_cond_node: added parens to patmatch assignment statement to + make intent clearer + + 12/3 + ---- +configure.in,config.h.in + - check for imaxdiv, define HAVE_IMAXDIV if present + +expr.c + - expassign, exp2: use imaxdiv if available. Doesn't help with checks + for overflow from 10/25 + + 12/6 + ---- +lib/readline/complete.c + - compute_lcd_of_matches: if we're ignoring case in the matches, only + use what the user typed as the lcd if it matches the first match + (after sorting) up to the length of what was typed (if what the + user typed is longer than the shortest of the possible matches, use + the shortest common length of the matches instead). If it doesn't + match, use the first of the list of matches, as if case were not + being ignored. Fixes bug reported by Clark Wang + + + 12/7 + ---- +builtins/cd.def + - cd_builtin: add code to return error in case cd has more than one + non-option argument, conditional on CD_COMPLAINS define (which is + not defined anywhere) + +doc/{bash.1,bashref.texi} + - note that additional arguments to cd following the directory name + are ignored. Suggested by Vaclav Hanzl + + 12/10 + ----- +lib/readline/input.c + - rl_read_key: don't need to increment key sequence length here; doing + it leads to an off-by-one error + +lib/readline/macro.c + - rl_end_kbd_macro: after off-by-one error with rl_key_sequence_length + fixed, can decrement current_macro_index by rl_key_sequence_length + (length of key sequence that closes keyboard macro) + +lib/readline/readline.c + - _rl_dispatch_subseq: fix extra increment of rl_key_sequence_length + when ESC maps to a new keymap and we're converting meta characters + to ESC+key + - _rl_dispatch_subseq: better increment of rl_key_sequence_length + before we dispatch to a function in the ISFUNC case (where the + second increment above should have happened) + - rl_executing_keyseq: the full key sequence that ended up executing + a readline command. Available to the calling application, maintained + by _rl_dispatch_subseq, indexed by rl_key_sequence_length + - rl_executing_key: the key that was bound to the currently-executing + readline command. Same as the `key' argument to the function + +lib/readline/readline.h + - rl_executing_keyseq: extern declaration + - rl_executing_key: extern declaration + - rl_key_sequence_length: declaration moved here from rlprivate.h, + now part of public interface + +lib/readline/rlprivate.h + - new extern declaration for _rl_executing_keyseq_size, buffer size + for rl_executing_keyseq + +lib/readline/doc/rltech.texi + - documented new variables: rl_executing_key, rl_executing_keyseq, + rl_key_sequence_length + + 12/13 + ----- +bashline.c + - bash_execute_unix_command: replace ad-hoc code that searches + cmd_xmap for correct command with call to rl_function_of_keyseq + using rl_executing_keyseq; now supports key sequences longer + than two characters. Fixes bug reported by Michael Kazior + + + 12/15 + ----- +make_cmd.c + - make_function_def: don't null out source_file before calling + make_command so it can be used later on when the function definition + is executed + +execute_cmd.c + - execute_intern_function: second argument is now FUNCTION_DEF * + instead of COMMAND * + - execute_command_internal: call execute_intern_function with the + new second argument (the entire FUNCTION_DEF instead of just the + command member) + - execute_intern_function: if DEBUGGER is defined, call + bind_function_def before calling bind_function, just like + make_function_def does (might be able to take out the call in + make_function_def depending on what the debugger does with it). + Fixes bug reported by + +expr.c + - more minor changes to cases of INTMAX_MIN % -1 and INTMAX_MIN / 1; + fix typos and logic errors + + 12/16 + ----- +bashline.c + - find_cmd_start: change flags to remove SD_NOSKIPCMD so it skips over + command substitutions and doesn't treat them as command separators + - attempt_shell_completion: instead of taking first return from + find_cmd_name as command name to use for programmable completion, + use loop to skip over assignment statements. Fixes problem reported + by Raphael Droz + - attempt_shell_completion: if we don't find a command name but the + command line is non-empty, assume the other words are all assignment + statements and flag that point is in a command position so we can + do command name completion + - attempt_shell_completion: if the word being completed is the first + word following a series of assignment statements, and the + command line is non-empty, flag that point is in a command position + so we can do command name completion + +lib/readline/history.c + - history_get_time: atol -> strtol + + 12/18 + ----- +parse.y + - parser_in_command_position: external interface to the + command_token_position macro for use by other parts of the shell, + like the completion mechanism + +externs.h + - extern declaration for parser_in_command_position + + 12/19 + ----- + +builtins/read.def + - read_builtin: make sure all calls to bind_read_variable are passed + a non-null string. Fixes bug reported by Dan Douglas + + +bashline.c + - attempt_shell_completion: mark that we're in a command position if + we're at the start of the line and the parser is ready to accept + a reserved word or command name. Feature most recently suggested + by Peng Yu + + 12/21 + ----- +lib/readline/bind.c + - _rl_escchar: return the character that would be backslash-escaped + to denote the control character passed as an argument ('\n' -> 'n') + - _rl_isescape: return 1 if character passed is one that has a + backslash escape + - _rl_untranslate_macro_value: new second argument: use_escapes, if + non-zero translate to backslash escapes where possible instead of + using straight \C-x for control character `x'. Change callers + - _rl_untranslate_macro_value: now global + +lib/readline/rlprivate.h + - _rl_untranslate_macro_value: extern declaration + +lib/readline/{macro.c,readline.h} + - rl_print_last_kbd_macro: new bindable function, inspired by patch + from Mitchel Humpherys + +lib/readline/funmap.c + - print-last-kbd-macro: new bindable command, bound to + rl_print_last_kbd_macro + +lib/readline/doc/{rluser.texi,readline.3},doc/bash.1 + - print-last-kbd-macro: document. + +lib/readline/text.c + - _rl_insert_next: if we're defining a macro, make sure the key gets + added to the macro text (should really audit calls to rl_read_key() + and make sure the right thing is happening for all of them) + +bashline.[ch] + - print_unix_command_map: new function, prints all bound commands in + cmd_xmap using rl_macro_dumper in a reusable format + +builtins/bind.def + - new -X option: print all keysequences bound to Unix commands using + print_unix_command_map. Feature suggested by Dennis Williamson + (2/2011) + +doc/{bash.1,bashref.texi} + - document new `bind -X' option + + 12/24 + ----- + +doc/{bash.1,bashref.texi} + - add a couple of sentences to the description of the case modification + operators making it clearer that each character of parameter is + tested against the pattern, and that the pattern should only attempt + to match a single character. Suggested by Bill Gradwohl + + + 12/28 + ----- +shell.c + - init_noninteractive: instead of calling set_job_control(0) to + unconditionally turn off job control, turn on job control if + forced_interactive or jobs_m_flag is set + - shell_initialize: call initialize_job_control with jobs_m_flag as + argument so `bash -m script' enables job control while running the + script + +jobs.c + - initialize_job_control: if the `force' argument is non-zero, turn on + job control even if the shell is not currently interactive + (interactive == 0) + + 12/29 + ----- + +flags.h + - new extern declaration for jobs_m_flag + +builtins/{cd,set}.def,doc/{bash.1,bashref.texi} + - added text clarifying the descriptions of cd -L and -P, suggested by + Padraig Brady + - slight change to the description of `set -P' about resolving symbolic + links + +lib/readline/doc/rluser.texi + - Added an example to the programmable completion section: _comp_cd, + a completion function for cd, with additional verbiage. Text + includes a reference to the bash_completion project + + 1/1/2012 + -------- +jobs.c + - set_job_status_and_cleanup: note that a job is stopped due to + SIGTSTP (any_tstped) if job_control is set; there's no need to + test interactive + + 1/5 + --- +quit.h + - LASTSIG(): new macro, expands to signal number of last terminating + signal received (terminating_signal or SIGINT) + +trap.c + - first_pending_trap: returns lowest signal number with a trap pending + - trapped_signal_received: set to the last trapped signal the shell + received in trap_handler(); reset to 0 in run_pending_traps + +builtins/read.def + - read_builtin: changes to posix-mode (posixly_correct != 0) to make + `read' interruptible by a trapped signal. After the trap runs, + read returns 128+sig and does not assign the partially-read line + to the named variable(s). From an austin-group discussion started + by David Korn + + 1/11 + ---- +doc/{bash.1,bashref.texi} + - slight changes to the descriptions of the compat32 and compat40 shell + options to clarify their meaning + + 1/12 + ---- +lib/readline/{colors.[ch],parse-colors.[ch]} + - new files, part of color infrastructure support + +Makefile.in,lib/readline/Makefile.in + - arrange to have colors.o and parse-colors.o added to readline + library + +{configure,config.h}.in + - check for stdbool.h, define HAVE_STDBOOL_H if found + + 1/14 + ---- +lib/readline/bind.c + - colored_stats: new bindable variable, enables using colors to + indicate file type when listing completions + +lib/readline/complete.c + - _rl_colored_stats: new variable, controlled by colored-stats bindable + variable + - colored_stat_start, colored_stat_end: new functions to set and reset + the terminal color appropriately depending on the type of the + filename to be printed + - print_filename: changes to print colors if `colored-stats' variable + set. Changes contributed by Raphael Droz + + +lib/readline/readline.c + - rl_initialize_everything: add call to _rl_parse_colors to parse + color values out of $LS_COLORS. May have to add to rl_initialize + to make more dynamic if LS_COLORS changes (which doesn't happen + very often, if at all) + +lib/readline/rlprivate.h + - _rl_colored_stats: new extern declaration + +lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 + - colored-stats: document new bindable readline variable + +lib/readline/colors.c + - _rl_print_color_indicator: call rl_filename_stat_hook before calling + lstat/stat so we can get color indicators for stuff like + $HOME/Applications + +lib/readline/complete.c + - stat_char: call rl_filename_stat_hook before calling lstat/stat + +findcmd.[ch],execute_cmd.c + - search_for_command: now takes a second `flags' argument; changed + header function prototype and callers + - search_for_command: if (flags & 1), put the command found in $PATH + into the command hash table (previous default behavior) + +execute_cmd.c + - is_dirname: call search_for_command with flags argument of 0 so it + doesn't try to put something in the command hash table + +bashline.c + - bash_command_name_stat_hook: a hook function for readline's + filename_stat_hook that does $PATH searching the same way that + execute_cmd.c:execute_disk_command() does it, and rewrites the + passed filename if found. Does not put names into command hash + table. This allows command name completion to take advantage + of `visible-stats' and `colored-stats' settings. + - executable_completion: new function, calls the directory completion + hook to expand the filename before calling executable_file or + executable_or_directory; change command_word_completion_function to + call executable_completion. This allows $HOME/bin/[TAB] to do + command completion and display alternatives + + 1/17 + ---- +pcomplete.c + - gen_command_matches: now takes a new second argument: the command + name as deciphered by the programmable completion code and used + to look up the compspec; changed callers (gen_compspec_completions) + - gen_shell_function_matches: now takes a new second argument: the + command that originally caused the completion function to be + invoked; changed callers (gen_compspec_completions)) + - build_arg_list: now takes a new second argument: the command name + corresponding to the current compspec; changed callers + (gen_command_matches, gen_shell_function_matches) + - build_arg_list: now uses `cmd' argument to create $1 passed to + invoked command or shell function + - gen_compspec_completions: if we skipped a null command at the + beginning of the line (e.g., for completing `>'), add a new word for + it at the beginning of the word list and increment nw and cw + appropriately. This is all a partial fix for the shortcoming + pointed out by Sung Pae + + 1/18 + ---- + +{configure,config.h}.in + - new check: check for AUDIT_USER_TTY defined in , + define HAVE_DECL_AUDIT_USER_TTY if both are found + +lib/readline/rlconf.h + - ENABLE_TTY_AUDIT_SUPPORT: new define, allows use of the Linux kernel + tty auditing system if it's available and enabled + +lib/readline/util.c + - _rl_audit_tty: new function, send a string to the kernel tty audit + system + +lib/readline/rlprivate.h + - _rl_audit_tty: new extern declaration + +lib/readline/readline.c + - readline: call _rl_audit_tty with line to be returned before returning + it if the Linux tty audit system is available and it's been enabled + in rlconf.h Original patch from Miroslav Trmac; recent request + from Miroslav Lichvar + + 1/21 + ---- + +lib/readline/readline.c: + - _rl_dispatch_subseq: add an inter-character timeout for multi-char + key sequences. Suggested by . Still needs + work to make a user-settable variable + +parse.y + - shell_getc: make code that uses the pop_alias dependent on ALIAS + define + +variables.h + - sv_tz: extern define should only depend on HAVE_TZSET + +expr.c + - expr_streval: if ARRAY_VARS is not defined, set lvalue->ind to -1; + move assignment to `ind' inside define + - expr_bind_array_element: declaration and uses need to be #ifdef + ARRAY_VARS + +arrayfunc.h + - AV_ALLOWALL, AV_QUOTED, AV_USEIND: define to 0 if ARRAY_VARS not + defined; used in subst.c unconditionally + +sig.h + - make the signal blocking functions not dependent on JOB_CONTROL + +sig.c + - sigprocmask: make the replacement definition not dependent on + JOB_CONTROL + +trap.c + - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on + HAVE_POSIX_SIGNALS and BSD signals + + 1/24 + ---- + +print_cmd.c + - print_redirection_list: change the conditions under which + r_duplicating_output_word is mapped to r_err_and_out to more or + less match those used in redir.c. Fixes bug pointed out by + Dan Douglas + + + 1/29 + ---- +lib/readline/signals.c + - _rl_block_sigwinch,_rl_release_sigwinch: don't compile in bodies + unless SIGWINCH is defined. Fixes bug reported by Pierre Muller + + +doc/{bash.1,bashref.texi} + - small modifications to the introduction to the REDIRECTION section + to describe how redirections can modify file handles + - small modification to the section describing base#n to make it + clearer that n can be denoted using non-numerics. From a posting + by Linda Walsh + + 2/2 + --- +builtins/printf.def + - printf_builtin: make sure vbuf is intialized and non-null when -v + is supplied, since other parts of the code assume that it's not + null (e.g., bind_printf_variable()). Fixes bug reported by Jim + Avera + + 2/4 + --- +lib/readline/undo.c + - _rl_free_undo_list: new function, old body of rl_free_undo_list, + frees undo entries in UNDO_LIST * passed as argument + - rl_free_undo_list: call _rl_free_undo_list + +lib/readline/rlprivate.h + - _rl_free_undo_list: new extern declaration + - _rl_keyseq_timeout: new extern declaration (see below) + +lib/readline/misc.c + - rl_clear_history: new function. Clears the history list and frees + all associated data similar to history.c:clear_history(), but + takes rl_undo_list into account and frees and UNDO_LISTs saved as + `data' members of a history list entry + +lib/readline/doc/rltech.texi + - rl_clear_history: documented + +lib/readline/readline.c + - _rl_keyseq_timeout: new variable to hold intra-key timeout value + from 1/21 fix; specified in milliseconds. Default value is 500 + - _rl_dispatch_subseq: change to use _rl_keyseq_timeout as intra-key + timeout if it's greater than 0; no timeout if <= 0 + - _rl_dispatch_subseq: don't check for queued keyboard input if we have + pushed or pending input, or if we're reading input from a macro + +lib/readline/bind.c + - keyseq-timeout: new bindable variable, shadows _rl_keyseq_timeout + - string_varlist: add keyseq-timeout + - sv_seqtimeout: new function to modify value of _rl_keyseq_timeout; + clamps negative values at 0 for now + - _rl_get_string_variable_value: return value for keyseq-timeout + +doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} + - keyseq-timeout: documented + +lib/readline/isearch.c + - _rl_isearch_dispatch: modification to fix from 7/18 to not use + cxt->keymap and cxt->okeymap, since by the time this code is + executed, they are equal. Use `f' to check for rl_insert or + unbound func + - _rl_isearch_dispatch: if we're switching keymaps, not in + callback mode, and don't have pending or pushed input, use + _rl_input_queued to resolve a potentially ambiguous key sequence. + Suggested by Roger Zauner + - _rl_isearch_dispatch: if we have changed keymaps and resolved to + an editing function (not self-insert), make sure we stuff the + right characters back onto the input after changing the keymap + back so the right editing function is executed after the search + is terminated. Rest of fix for bug reported by Roger Zauner + + + 2/5 + --- +builtins/gen-helpfiles.c + - new file: reads struct builtin and writes the long docs to files + in the `helpdirs' subdirectory. The filename is given in the + previously-unused `handle' member of the struct builtin. Links + with `tmpbuiltins.o', which is created by Makefile to have the + right long documentation. When not cross-compiling, gets the + right #defines based on configuration options from config.h instead + of trying to parse conditional parts of def files. Fixes + shortcoming pointed out by Andreas Schwab + +builtins/Makefile.in + - tmpbuiltins.c: new generated file, created to enable creation of + separate helpfiles based on correct #defines instead of trying to + parse conditional parts of def files + - gen-helpfiles: new program to generate helpfiles, links with + tmpbuiltins.o + - HELPFILES_TARGET: new target, substituted by configure to `helpdoc' + if separate helpfiles requested + - targets: new target, libbuiltins.a and $(HELPFILES_TARGET) + - CREATED_OBJECTS: new variable, holds created object files for + make clean; changed make clean to remove created objects + - helpdoc: changed to call gen-helpfiles instead of mkbuiltins + +Makefile.in + - when building libbuiltins.a, recursively call make with `targets' + argument to make sure separate helpfiles get built + +configure.in + - substitute `helpdoc' as value of HELPFILES_TARGET if + --enable-separate-helpfiles supplied as configure argument + +builtins/mkbuiltins.c + - `-nofunctions': new argument, causes mkbuiltins to not write value + for function implementing a particular builtin to struct builtin + and to write document file name to `handle' member of struct builtin + - no longer writes separate helpfiles; that is left to gen-helpfiles + + 2/8 + --- +subst.c + - make sure last_command_exit_value is set to a non-zero value before + any calls to report_error, since `-e' set will short-circuit + report_error. Fixes bug reported by Ewan Mellor + + +variables.c + - make_local_array_variable: added second argument; if non-zero, + function will return an existing local associative array variable + instead of insisting on an indexed array + +variable.h,subst.c + - make_local_array_variable: changed prototype and caller + +builtins/declare.def + - declare_internal: add second arg to call to make_local_array_variable; + making_array_special, which indicates we're processing an + assignment like declare a[b]=c. Fixes seg fault resulting from + a being an already-declared local associative array variable in a + function. Ubuntu bash bug 928900. + + 2/14 + ---- + +execute_cmd.c + - execute_command_internal: if redirections into or out of a loop fail, + don't try to free ofifo_list unless saved_fifo is non-zero. It's + only valid if saved_fifo is set + + 2/15 + ---- +{arrayfunc,braces,variables}.c + - last_command_exit_value: make sure it's set before any calls to + report_error, since -e will cause that to exit the shell + +builtins/common.c + - get_job_by_name: call internal_error instead of report_error so this + doesn't exit the shell + + 2/18 + ---- +builtins/evalstring.c + - parse_and_execute: make sure the file descriptor to be redirected to + is 1 before calling cat_file. One fix for bug reported by Dan Douglas + + +parse.y + - read_token_word: don't return NUMBER if a string of all digits + resolves to a number that overflows the bounds of an intmax_t. + Other fix for bug reported by Dan Douglas + + 2/19 + ---- +lib/sh/strtrans.c + - ansicstr: use 0x7f as the boundary for characters that translate + directly from ASCII to unicode (\u and \U escapes) instead of + UCHAR_MAX, since everything >= 0x80 requires more than one byte. + Bug and fix from John Kearney + +builtins/printf.def + - tescape: ditto for printf \u and \U escape sequences + + 2/20 + ---- +lib/sh/unicode.c + - u32toutf8: fix to handle encodings up to six bytes long correctly + (though technically UTF-8 only has characters up to 4 bytes long). + Report and fix from John Kearney + - u32toutf8: first argument is now an unsigned 32-bit quantity, + changed callers (u32cconv) to pass c instead of wc + - u32reset: new function, resets local static state to uninitialized + (locale information, currently) + +locale.c + - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the + cached locale information used by u32cconv. From a report from + John Kearney + + 2/21 + ---- +doc/{bash,builtins}.1 + - minor changes from Bjarni Ingi Gislason + +lib/sh/unicode.c + - u32cconv: only assume you can directly call wctomb on the passed + value if __STDC_ISO_10646__ is defined and the value is <= + 0x7fffffff + - stub_charset: return locale as default instead of "ASCII", let + rest of code decide what to do with it + +lib/readline/parens.c + - _rl_enable_paren_matching: make paren matching work in vi insert + mode. Bug report from + + 2/22 + ---- +lib/sh/shquote.c + - sh_backslash_quote: quote tilde in places where it would be + expanded. From a report from John Kearney + + 2/23 + ---- +execute_cmd.c + - execute_pipeline: wrap the discard_unwind_frame call in #ifdef + JOB_CONTROL, since the frame is only created if JOB_CONTROL is + defined. Bug and fix from Doug Kehn + + 2/25 + ---- +error.c + - report_error: make sure last_command_exit_value is non-zero before + we call exit_shell, since the exit trap may reference it. Call + exit_shell with last_command_exit_value to allow exit statuses + other than 1 + +unicode.c + - stub_charset: use local static buffer to hold charset, don't change + value returned by get_locale_var. Based on idea and code from + John Kearney + - u32toutf16: function to convert unsigned 32-bit value (unicode) to + UTF-16. From John Kearney + - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t + is two bytes, send result to wcstombs, return if not encoding error. + From John Kearney + - u32cconv: return UTF-8 conversion if iconv conversion to local + charset is unsupported + + 3/2 + --- +lib/readline/complete.c + - print_filename: if there is no directory hook, but there is a stat + hook, and we want to append a slash to directories, call the stat + hook before calling path_isdir on the expanded directory name. + Report and pointer to fix from Steve Rago + + 3/3 + --- +builtins/evalstring.c + - parse_and_execute: fix to change of 2/18: make sure the file + descriptor being redirected to is 0 before calling cat_file when + we see something like $(< file). Real fix for bug reported by + Dan Douglas + +subst.c + - parameter_brace_patsub: run the replacement string through quote + removal even if the expansion is within double quotes, because + the parser and string extract functions treat the quotes and + backslashes as special. If they're treated as special, quote + removal should remove them (this is the Posix position and + compatible with ksh93). THIS IS NOT BACKWARDS COMPATIBLE. + + 3/4 + --- +lib/readline/complete.c + - rl_menu_complete: fix to make show-all-if-ambiguous and + menu-complete-display-prefix work together if both are set. Fix + from Sami Pietila + + 3/5 + --- +bashline.c + - dircomplete_expand_relpath: new variable, if non-zero, means that + `shopt -s direxpand' should expand relative pathnames. Zero by + default, not user-settable yet + - bash_directory_completion_hook: if we have a relative pathname that + isn't changed by canonicalization or spell checking after being + appended to $PWD, then don't change what the user typed. Controlled + by dircomplete_expand_relpath + + 3/7 + --- +m4/timespec.m4 + - new macros, cribbed from gnulib and coreutils: find out whether we + have `struct timespec' and what file includes it + +m4/stat-time.m4 + - new macros, cribbed from gnulib and coreutils: find out whether the + mtime/atime/ctime/etctime fields of struct stat are of type + struct timespec, and what the name is + +include/stat-time.h + - new file, cribbed from gnulib, with additions from coreutils: include + the right file to get the struct timespec define, or provide our own + replacement. Provides a bunch of inline functions to turn the + appropriate members of struct stat into `struct timespec' values, + zeroing out the tv_nsec field if necessary + +test.c + - include "stat-time.h" for the nanosecond timestamp resolution stuff + - stat_mtime: new function, returns struct stat and the mod time + normalized into a `struct timespec' for the filename passed as the + first argument + - filecomp: call stat_mtime instead of sh_stat for each filename + argument to get the mtime as a struct timespec + - filecomp: call timespec_cmp instead of using a straight arithmetic + comparison for the -nt and -ot operators, using timespec returned by + stat_mtime. Added functionality requested by by Werner Fink + for systems that can support it + + 3/10 + ---- +include/posixdir.h + - REAL_DIR_ENTRY: remove dependency on _POSIX_SOURCE, only use feature + test macros to decide whether dirent.d_ino is present and usable; + define D_INO_AVAILABLE. Report and fix from Fabrizion Gennari + + - D_FILENO_AVAILABLE: define if we can use dirent.d_fileno + +lib/sh/getcwd.c + - use D_FILENO_AVAILABLE to decide whether or not to compile in + _path_checkino and whether or not to call it. Report and initial + fix from Fabrizion Gennari + +lib/readline/signals.c + - make sure all occurrences of SIGWINCH are protected by #ifdef + +sig.c + - make sure all occurrences of SIGCHLD are protected by #ifdef + +nojobs.c + - make sure SA_RESTART is defined to 0 if the OS doesn't define it + +version.c + - show_shell_version: don't use string literals in printf, use %s. + Has added benefit of removing newline from string to be translated + +trap.c + - queue_sigchld_trap: new function, increments the number of pending + SIGCHLD signals by the argument, which is by convention the number + of children reaped in a call to waitchld() + +trap.h + - queue_sigchld_trap: new extern declaration + +jobs.c + - waitchld: if called from the SIGCHLD signal handler (sigchld > 0), + then call queue_sigchld_trap to avoid running the trap in a signal + handler context. Report and original fix from Siddhesh Poyarekar + + +lib/sh/unicode.c + - u32tocesc: take an unsigned 32-bit quantity and encode it using + ISO C99 string notation (\u/\U) + - u32cconv: call u32tocesc as a fallback instead of u32cchar + - u32cconv: call u32tocesc if iconv cannot convert the character. + Maybe do the same thing if iconv_open fails + - u32reset: call iconv_close on localconv if u32init == 1 + + 3/11 + ---- +config-top.h + - CHECKWINSIZE_DEFAULT: new define, set to initial value of + check_window_size (shopt checkwinsize): 0 for off, 1 for on. + Default is 0 + +{jobs,nojobs}.c + - check_window_size: default initial value to CHECKWINSIZE_DEFAULT + + 3/13 + ---- +doc/bashref.texi + - change text referring to the copying restrictions to that + recommended by the FSF (no Front-Cover Texts and no Back-Cover + Texts) + +lib/readline/doc/{history,rlman,rluserman}.texi + - change text referring to the copying restrictions to that + recommended by the FSF (no Front-Cover Texts and no Back-Cover + Texts) + + 3/15 + ---- +array.c + - LASTREF_START: new macro to set the starting position for an array + traversal to `lastref' if that's valid, and to the start of the array + if not. Used in array_reference, array_insert, array_remove + - array_remove: try to be a little smarter with lastref instead of + unconditionally invalidating it + + 3/16 + ---- +array.c + - array_insert: fix memory leak by deleting element to be added in the + case of an error + + 3/18 + ---- +lib/sh/mbschr.c + - mbschr: don't call mbrlen unless is_basic is false; devolves to a + straight character-by-character run through the string + + 3/19 + ---- +stringlib.c + - substring: use memcpy instead of strncpy, since we know the length + and are going to add our own NUL terminator + + 3/20 + ---- +subst.c + - parameter_brace_expand_rhs: if expand_string_for_rhs returns a quoted + null string (a list with one element for which + QUOTED_NULL(list->word->word) returns true), return the quoted null + and set the flags in the returned word to indicate it. Fixes bug + reported by Mark Edgar + +lib/sh/tmpfile.c + - use random(3) instead of get_random_number to avoid perturbing the + random sequence you get using $RANDOM. Bug report and fix from + Jurij Mihelic + + 3/21 + ---- +config-top.h + - OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT: define to 1 to optimize + sequential indexed array assignment patterns. Defined to 1 by + default + +array.c + - array_insert: if OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT is defined, + start the search at lastref (see change from 3/15) + + 3/27 + ---- +print_cmd.c + - debug_print_word_list: new debugging function, prints a word list + preceded by an optional string and using a caller-specified + separator + + 4/1 + --- +command.h + - W_ASSNGLOBAL: new flag, set to indicate declare -g + +execute_cmd.c + - fix_assignment_words: note that we have a -g argument to an assignment + builtin and set the W_ASSNGLOBAL flag in the variable word + +subst.c + - dump_word_flags: print out W_ASSNGLOBAL if present + - do_assignment_internal: only set ASS_MKLOCAL if W_ASSIGNARG is set + and W_ASSNGLOBAL is not. Don't want to create a local variable even + if variable_context is non-zero if ASSNGLOBAL is set. Fixes bug + reported by Bill Gradwohl + + 4/7 + --- +lib/readline/readline.c + - _rl_dispatch_subseq: make the `keyseq-timeout' variable apply to + ESC processing when in vi mode. After hitting ESC, readline will + wait up to _rl_keyseq_timeout*1000 microseconds (if set) for + additional input before dispatching on the ESC and switching to + command/movement mode. Completes timeout work suggested by + ; this prompted by report from Barry Downes + + +lib/sh/shmbchar.c + - sh_mbsnlen: new function, returns the number of (possibly multibyte) + characters in a passed string with a passed length, examining at most + maxlen (third argument) bytes + +externs.h + - sh_mbsnlen: extern declaration for new function + +shell.c + - exit_shell: call maybe_save_shell_history if remember_on_history is + set, not just in interactive shells. That means the history is + saved if history is enabled, regardless of whether or not the shell + is interactive + +doc/{bash.1,bashref.texi} + - TMOUT: fix description to make it explicit that TMOUT is the timeout + period for a complete line of input, not just any input. Fixes + problem reported in Ubuntu bug 957303: + https://bugs.launchpad.net/ubuntu/+source/bash/+bug/957303 + - HISTFILE: document change to write history list to history file in + any shell with history enabled, not just interactive shells. This + seems to be more logical behavior. Suggested by Greg Wooledge + + + 4/12 + ---- +lib/readline/colors.h + - only include stdbool.h if HAVE_STDBOOL_H is defined + - if HAVE_STDBOOL_H is not defined, provide enough definition for the + library to use `bool', `true', and `false' + +lib/readline/parse-colors.[ch] + - don't try to include at all; rely on colors.h to do it + +lib/sh/snprintf.c + - vsnprintf_internal: only treat '0' as a flag to indicate zero padding + if `.' hasn't been encountered ((flags&PF_DOT) == 0); otherwise treat + it as the first digit of a precision specifier. Fixes bug reported + by Petr Sumbera + + 4/15 + ---- +lib/sh/snprintf.c + - vsnprintf_internal: if the '0' and '-' flags both occur, the '0' + flag is ignored -- Posix. Start of a series of fixes based on + tests and patches from Petr Sumbera + - PUT_PLUS: make sure PF_PLUS flag is specified before putting the `+' + - vsnprintf_internal: when '+' is read as a flag, don't set right- + justify flag if the LADJUST (`-') flag has already been supplied + - floating: make sure to output space padding before the `+', zero + padding after + - exponent: make sure to output space padding before the `+', zero + padding after + - exponent: only subtract one from the width for the decimal point + if we're really going to print one + - floating: use presence of PF_PLUS flag to decide whether to account + for the `+' in the padded field width. Ditto for exponent() + + 4/16 + ---- +lib/sh/snprintf.c + - vsnprint_internal: only reduce precision by 1 when processing the `g' + format if it's > 0. A precision of 0 should stay 0; otherwise it + gets set to -1 (NOT_FOUND) and converted to the default + - number, lnumber: if an explicit precision is supplied, turn off the + zero-padding flag and set the pad character back to space + - number, lnumber: only account for a `+' when performing the field + width calculation if the coversion is base 10; we don't add a `+' + for other bases + + 4/18 + ---- +tests/printf3.sub + - try using "perl -e 'print time'" to get the current time in seconds + since the epoch if "date +%s" is not available (solaris 8-10) + + 4/19 + ---- +tests/run-printf + - use cat -v instead of relying on diff -a being available to convert + control characters to ascii and avoid the dreaded "Binary files + /tmp/xx and printf.right differ" + + 4/20 + ---- +lib/sh/strftime.c + - incoporated new version from Aharon Robbins + + 4/22 + ---- +doc/{bash.1,bashref.texi} + - slight change to the description of /dev/tcp and /dev/udp + +subst.c + - match_wpattern: logic fix to the calculation of `simple' (was |=, + needs to be &=). Bug report from Mike Frysinger , + fix from Andreas Schwab + +bashline.c + - bash_filename_stat_hook: add code from bash_directory_completion_hook + that performs pathname canonicalization in the same way that cd and + other builtins will do + + 4/25 + ---- +execute_cmd.c + - execute_pipeline: change the call to move_to_high_fd to make it use + getdtablesize() and to not stomp on existing open file descriptors, + like the fd the shell is using to read a script. Bug report from + Greg Wooledge + + 5/6 + --- +subst.c + - expand_word_internal: case '$': after calling param_expand and + setting had_quoted_null, set TEMP to null. The code that builds the + returned string at the end of the function will take care of making + and returning a quoted null string if there's nothing else in + ISTRING. If there is, the quoted null should just go away. Part of + fix for bug reported by Ruediger Kuhlmann + - expand_word_internal: when processing ISTRING to build return value, + only set W_HASQUOTEDNULL in the returned word flags if the word is + a quoted null string AND had_quoted_null is set. Rest of fix + + 5/9 + --- +variables.c + - bind_variable_internal: if we get an array variable here (implicit + assignment to index 0), call make_array_variable_value, which + dummies up a fake SHELL_VAR * from array[0]. This matters when + we're appending and have to use the current value + - bind_variable_internal: after computing the new value, treat assoc + variables with higher precedence than simple array variables; it + might be that a variable has both attributes set + +arrayfunc.c + - bind_array_var_internal: break code out that handles creating the + new value to be assigned to an array variable index into a new + function, make_array_variable_value. This handles creating a + dummy SHELL_VAR * for implicit array[0] assignment. Fixes bug + reported by Dan Douglas + +arrayfunc.h + - make_array_variable_value: new extern declaration + + 5/19 + ---- +variables.c + - bind_int_variable: if an assignment statement like x=y comes in + from the expression evaluator, and x is an array, handle it like + x[0]=y. Fixes bug reported by Dan Douglas + + 5/24 + ---- + +braces.c + - mkseq: handle possible overflow and break the sequence generating + loop if it occurs. Fixes OpenSUSE bug 763591: + https://bugzilla.novell.com/show_bug.cgi?id=763591 + + 5/25 + ---- +Makefile.in + - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools + buildversion, mksignames, mksyntax + - LDFLAGS_FOR_BUILD: add to compilation recipes for test tools + recho, zecho, printenv, xcase + +builtins/Makefile.in + - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools + gen-helpfiles, psize.aux + +variables.c + - bind_int_variable: if LHS is a simple variable name without an array + reference, but resolves to an array variable, call + bind_array_variable with index 0 to make x=1 equivalent to x[0]=1. + Fixes bug reported by Dan Douglas + + 5/27 + ---- +subst.c + - expand_word_internal: make sure has_dollar_at doesn't get reset before + recursive calls to param_expand or expand_word_internal, since it has + to save state of what came before. Use temp variable and make sure + has_dollar_at is incremented if recursive call processes "$@". + Fixes bug reported by gregrwm and + supplemented by Dan Douglas + +doc/{bash.1,bashref.texi} + - changes to the description of substring expansion inspired by + suggestions from Bill Gradwohl + +doc/bashref.texi + - added substring expansion examples inspired by suggestions from + Bill Gradwohl + +variables.c + - find_shell_variable: search for a variable in the list of shell + contexts, ignore the temporary environment + - find_variable_tempenv: search for a variable in the list of shell + contexts, force search of the temporary environment + - find_variable_notempenv: search for a variable in the list of shell + contexts, don't force search of the temporary environment + +variables.h + - find_shell_variable: extern declaration + - find_variable_tempenv: extern declaration + - find_variable_notempenv: extern declaration + +arrayfunc.c + - bind_array_variable: call find_shell_variable instead of calling + var_lookup directly + +findcmd.c + - search_for_command: call find_variable_tempenv instead of + find_variable_internal directly + - _find_user_command_internal: call find_variable_tempenv instead of + find_variable_internal directly + +builtins/setattr.def + - set_var_attribute: call find_variable_notempenv instead of + find_variable_internal directly + - show_name_attributes: call find_variable_tempenv instead of + find_variable_internal directly + + 6/1 + --- +sig.c + - termsig_handler: don't try to save the shell history on a terminating + signal any more, since it just causes too many problems on Linux + systems using glibc and glibc malloc + +lib/readline/vi_mode.c + - rl_vi_change_to: change to correctly redo `cc', since `c' is not a vi + motion character. From Red Hat bug 813289 + - rl_vi_delete_to: change to correctly redo `dd', since `d' is not a vi + motion character + - rl_vi_yank_to: change to correctly redo `yy', since `y' is not a vi + motion character + + 6/4 + --- +lib/sh/mktime.c + - current versions of VMS do not need to include . Fix from + John E. Malmberg + + 6/5 + --- +lib/sh/eaccess.c + - sh_stat: instead of using a static buffer to do the DEV_FD_PREFIX + translation, use a dynamically-allocated buffer that we keep + resizing. Fixes potential security hole reported by David Leverton + + + 6/5 + --- +braces.c + - expand_seqterm: check errno == ERANGE after calling strtoimax for + rhs and incr. Part of a set of fixes from Scott McMillan + + - expand_seqterm: incr now of type `intmax_t', which changes + arguments to mkseq + - mkseq: a better fix for detecting overflow and underflow since it's + undefined in C and compilers `optimize' out overflow checks. Uses + ADDOVERFLOW and SUBOVERFLOW macros + - mkseq: use sh_imaxabs (new macro) instead of abs() for intmax_t + variables + - mkseq: don't allow incr to be converted to -INTMAX_MIN + - mkseq: make sure that strvec_create isn't called with a size argument + greater than INT_MAX, since it only takes an int + + 6/6 + --- +braces.c + - mkseq: try and be smarter about not overallocating elements in + the return array if the increment is not 1 or -1 + + 6/7 + --- +parse.y + - history_delimiting_chars: if the parser says we're in the middle of + a compound assignment (PST_COMPASSIGN), just return a space to avoid + adding a stray semicolon to the history entry. Fixes bug reported + by "Davide Brini" + + 6/8 + --- +bashline.c + - bash_directory_completion_hook: don't attempt spelling correction + on the directory name unless the direxpand option is set and we are + going to replace the directory name with the corrected one in the + readline line. Suggested by Linda Walsh + +lib/sh/shquote.c + - sh_backslash_quote: now takes a third argument: flags. If non-zero, + tildes are not backslash-escaped. Have to handle both printf %q, + where they should be escaped, and filename completion, where they + should not when used as usernames + +externs.h + - sh_backslash_quote: declaration now takes a third argument + +builtins/printf.def + - printf_builtin: call sh_backslash_quote with 1 as third argument + so tildes get escaped + +{bashline,bracecomp}.c + - call sh_backslash_quote with 0 as third argument so tildes are not + escaped in completed words + +doc/bash.1 + - add `coproc' to the list of reserved words. From a report by + Jens Schweikhardt + + 6/10 + ---- +execute_cmd.c + - line_number_for_err_trap: now global, so parse_and_execute can save + and restore it with unwind-protect + +builtins/evalstring.c + - parse_prologue: save and restore line_number_for_err_trap along + with line_number + - restore_lastcom: new function, unwind-protect to restore + the_printed_command_except_trap + - parse_prologue: use restore_lastcom to save and restore the value + of the_printed_command_except_trap around calls to parse_and_execute + (eval/source/.) + + 6/15 + ---- +lib/readline/complete.c + - complete_fncmp: change filename comparison code to understand + multibyte characters, even when doing case-sensitive or case-mapping + comparisons. Fixes problem reported by Nikolay Shirokovskiy + + + 6/20 + ---- +builtins/mapfile.def + - mapfile: move the line count increment and check for having read + the specified number of lines to the end of the loop to avoid + reading an additional line with zgetline. Fixes bug reported by + Dan Douglas + + 6/21 + ---- + +execute_cmd.c + - execute_pipeline: make sure `lastpipe_flag' is initialized to 0 on + all systems, since it's tested later in the function. Fixes bug + reported by John E. Malmberg + + 6/22 + ---- +mailcheck.c + - file_mod_date_changed: return 0 right away if mailstat() does not + return success. Fixes bug with using uninitialized values reported + by szymon.kalasz@uj.edu.pl + +builtins/set.def + - the `monitor' option is not available when the shell is compiled + without job control, since the underlying `m' flag is not available + +nojobs.c + - job_control: now declared as int variable, initialized to 0, never + modified + +jobs.h + - job_control: extern declaration no longer dependent on JOB_CONTROL + +execute_cmd.c + - execute_pipeline: made necessary changes so `lastpipe' shell option + is now available in all shells, even those compiled without + JOB_CONTROL defined + + 6/23 + ---- +lib/glob/glob.c + - glob_filename: check for interrupts before returning if glob_vector + returns NULL or an error. Bug reported by Serge van den Boom + , fix from Andreas Schwab + - call run_pending_traps after each call to QUIT or test of + interrupt_state, like we do in mainline shell code + - glob_vector: don't call QUIT; in `if (lose)' code block; just free + memory, return NULL, and let callers deal with interrupt_state or + other signals and traps + + 6/25 + ---- +lib/readline/input.c + - rl_read_key: restructure the loop that calls the event hook a little, + so that the hook is called only after rl_gather_tyi returns no input, + and any pending input is returned first. This results in better + efficiency for processing pending input without calling the hook + on every input character as bash-4.1 did. From a report from + Max Horn + + 6/26 + ---- +trap.c + - signal_is_pending: return TRUE if SIG argument has been received and + a trap is waiting to execute + +trap.h + - signal_is_pending: extern declaration + +lib/glob/glob.c + - glob_vector: check for pending SIGINT trap each time through the loop, + just like we check for interrupt_state or terminating_signal, and + set `lose = 1' so we clean up after ourselves and interrupt the + operation before running the trap. This may require a change later, + maybe call run_pending_traps and do that if run_pending_traps returns? + +variables.c + - sv_histtimefmt: set history_comment_character to default (`#') if + it's 0 when we're turning on history timestamps. The history code + uses the history comment character to prefix timestamps, and + leaving it at 0 effectively removes them from the history. From a + report to help-bash by Dennis Williamson + + 6/27 + ---- +lib/readline/signals.c + - rl_maybe_restore_sighandler: new function, sets handler for SIG to + HANDLER->sa_handler only if it's not SIG_IGN. Needs to be called + on same signals set using rl_maybe_set_sighandler, which does not + override an existing SIG_IGN handler (SIGALRM is ok since it does + the check inline; doesn't mess with SIGWINCH) + + 6/30 + ---- +variables.h + - additional defines for the new `nameref' variable attribute + (att_nameref): nameref_p, nameref_cell, var_setref + +variables.c + - find_variable_nameref: resolve SHELL_VAR V through chain of namerefs + - find_variable_last_nameref: resolve variable NAME until last in a + chain of possibly more than one nameref starting at shell_variables + - find_global_variable_last_nameref: resolve variable NAME until last + in a chain of possibly more than one nameref starting at + global_variables + - find_nameref_at_context: resolve SHELL_VAR V through chain of namerefs + in a specific variable context (usually a local variable hash table) + - find_variable_nameref_context: resolve SHELL_VAR V through chain of + namerefs following a chain of varible contexts + - find_variable_last_nameref_context: resolve SHELL_VAR V as in + find_variable_last_context, but return the final nameref instead of + what the final nameref resolves to + - find_variable_tempenv, find_variable_notempenv, find_global_variable, + find_shell_variable, find_variable: modified to follow namerefs + - find_global_variable_noref: look up a global variable without following + any namerefs + - find_variable_noref: look up a shell variable without following any + namerefs + - bind_variable_internal: modify to follow a chain of namerefs in the + global variables table; change to handle assignments to a nameref by + following nameref chain + - bind_variable: modify to follow chain of namerefs when binding to a + local variable + - unbind_variable: changes to unset nameref variables (unsets both + nameref and variable it resolves to) + +subst.c + - parameter_brace_expand_word: change to handle expanding nameref whose + value is x[n] + - parameter_brace_expand_indir: change to expand in ksh93-compatible + way if variable to be indirected is nameref and a simple (non-array) + expansion + - param_expand: change to expand $foo where foo is a nameref whose value + is x[n] + +execute_cmd.c + - execute_for_command: changes to implement ksh93 semantics when index + variable is a nameref + +builtins/setattr.def + - show_var_attributes: change to add `n' to flags list if att_nameref + is set + +builtins/set.def + - unset_builtin: changes to error messages to follow nameref variables + +builtins/declare.def + - document new -n option + - declare_internal: new `-n' and `+n' options + - declare_internal: handle declare -n var[=value] and + declare +n var[=value] for existing and non-existant variables. + Enforce restriction that nameref variables cannot be arrays. + Implement semi-peculiar ksh93 semantics for typeset +n ref=value + + 7/5 + --- +variables.c + - unbind_variable: unset whatever a nameref resolves to, leaving the + nameref variable itself alone + - unbind_nameref: new function, unsets a nameref variable, not the + variable it references + +variables.h + - unbind_nameref: extern declaration + +builtins/set.def + - unset_builtin: modify to add -n option, which calls unbind_nameref + leaving unbind_variable for the usual case. This required slight + changes and additions to the test suite + +doc/{bash.1,bashref.texi} + - document namerefs and typeset/declare/local/unset -n + + 7/13 + ---- +lib/sh/casemod.c + - include shmbchar.h for is_basic and supporting pieces + - sh_casemod: use _to_wupper and _to_wlower to convert wide character + case instead of TOUPPER and TOLOWER. Fixes bug reported by + Dennis Williamson , fix from + Andreas Schwab + - cval: short-circuit and return ascii value if is_basic tests true + - sh_casemod: short-circuit and use non-multibyte case modification + and toggling code if is_basic tests true + +lib/readline/signals.c + - _rl_{block,release}_sigint: remove the code that actually blocks and + releases the signals, since we defer signal handling until calls to + RL_CHECK_SIGNALS() + +lib/readline/{callback,readline,util}.c + - if HAVE_POSIX_SIGSETJMP is defined, use sigsetjmp/siglongjmp without + saving and restoring the signal mask instead of setjmp/longjmp + +lib/readline/rltty.c + - prepare_terminal_settings: don't mess with IXOFF setting if + USE_XON_XOFF defined + +doc/{bash.1,bashref.texi} + - add some text to the description of set -e clarifying its effect + on shell functions and shell function execution. Suggested by + Rainer Blome + +bashline.c + - edit_and_execute_command: increment current_command_line_count before + adding partial line to command history (for command-oriented-history + because of rl_newline at beginning of function), then reset it to 0 + before adding the dummy history entry to make sure the dummy entry + doesn't get added to previous incomplete command. Partial fix for + problem reported by Peng Yu + + 7/24 + ---- +configure.in + - interix: define RECYCLES_PIDS. Based on a report from Michael + Haubenwallner + + 7/26 + ---- +jobs.c + - make_child: call bgp_delete on the newly-created pid unconditionally. + Some systems reuse pids before cycling through an entire set of + CHILD_MAX/_SC_CHILD_MAX unique pids. This is no longer dependent + on RECYCLES_PIDS. Based on a report from Michael Haubenwallner + + +support/shobj-conf + - Mac OS X: drop MACOSX_DEPLOYMENT_TARGET=10.3 from the LDFLAGS. We + can finally kill Panther + + 7/28 + ---- +subst.c + - command_substitute: make sure last_made_pid gets reset if make_child + fails + +execute_cmd.c + - execute_command_internal: case cm_simple: decide whether or not to + wait_for a child if already_making_children is non-zero, indicates + that there is an unwaited-for child. More of fix for bug report + from Michael Haubenwallner + +jobs.c + - make_child: call delete_old_job (new_pid) unconditionally, don't + bother to check whether or not pid wrap occurred. Rest of fix for + bug report from Michael Haubenwallner + + + 7/29 + ---- +shell.c + - subshell_exit: new function, exits the shell (via call to sh_exit()) + after calling any defined exit trap + +externs.h + - subshell_exit: new extern declaration + +execute_cmd.c + - execute_command_internal: make sure to call subshell_exit for + {} group commands executed asynchronously (&). Part of fix for + EXIT trap bug reported by Maarten Billemont + +sig.c + - reset_terminating_signals: make sure to set termsigs_initialized back + to 0, so a subsequent call to initialize_terminating_signals works + right. Rest of fix for bug reported by Maarten Billemont + + +{execute_cmd,general,jobs,mailcheck,mksyntax,test}.c +builtins/{cd,fc,pushd,ulimit}.def +lib/malloc/getpagesize.h +lib/sh/{clktck,fpurge,inet_aton,mailstat,oslib,pathcanon,pathphys,spell,strerror}.c + - make inclusion of dependent on HAVE_SYS_PARAM_H + consistently + + 8/6 + --- +lib/readline/histexpand.c + - history_expand_internal: now takes an additional argument saying + whether the history expansion occurs within a quoted string, set to + the open quote character + - history_expand_internal: use new argument instead of checking prev + char and initializing quoted_search_delimiter, pass qc directly to + get_history_event, where it allows a matching quote to terminate a + string defining an event + - history_expand: change single-quote handling code so that if + history_quotes_inhibit_expansion is 0, single quotes are treated + like double quotes + - history_expand: change call to history_expand_internal to pass new + argument of `"' if double-quoted string, `'' if single-quoted string; + this lets history_expand decide what is a quoted string and what + is not + + 8/7 + --- +configure.in + - AC_CANONICAL_BUILD: invoke for later use + +lib/readline/macro.c + - _rl_prev_macro_key: new function, inverse of _rl_next_macro_key: + backs up the index into the current macro by 1 + +lib/readline/rlprivate.h + - _rl_prev_macro_key: extern declaration + + +lib/readline/readline.c + - _rl_dispatch_subseq, _rl_subseq_result: don't call _rl_unget_char + if we're currently reading from a macro; call _rl_prev_macro_key + instead. Fixes bug reported by Clark Wang + + 8/13 + ---- +builtins/evalstring.c + - evalstring(): new function, wrapper around parse_and_execute. + make sure we handle cases where parse_and_execute can call `return' + and short-circuit without cleaning up properly. We call + parse_and_execute_cleanup() then jump to the previous-saved return + location + +builtins/common.h + - extern declaration for evalstring() + +builtins/eval.def + - eval_builtin: make sure we handle `eval " ... return"' in contexts + where `return' is valid by calling evalstring(). Fixes bug with + `eval return' in sourced files reported by Clark Wang + + +trap.c + - run_pending_traps: call evalstring instead of parse_and_execute. + XXX - still needs to handle saving and restoring token state in the + presence of `return'; could use unwind_protects for that + +builtins/mapfile.def + - run_callback: call evalstring instead of parse_and_execute + + 8/15 + ---- +bashline.c + - bash_filename_stat_hook: make sure we don't free local_dirname + before using it to canonicalize any expanded filename. Make sure + it always points to *dirname and only free it if we're replacing + it. + +lib/readline/complete.c + - append_to_match: make sure we call rl_filename_stat_hook with + newly-allocated memory to avoid problems with freeing it twice + + 8/17 + ---- +variables.c,config-top.h + - if ARRAY_EXPORT is defined to 1 when variables.c is compiled, the + code that allows indexed arrays to be exported is enabled and + included + + 8/19 + ---- +shell.c + - call start_debugger from main() only if dollar_vars[1] != 0 (close + enough to a non-interactive shell, since we can be interactive with + -i while running a shell script). Fixes oddity reported by + Techlive Zheng + + 8/20 + ---- +arrayfunc.c + - quote_array_assignment_chars: don't bother quoting if the word has + not been marked as an assignment (W_ASSIGNMENT) + - quote_array_assignment_chars: turn on W_NOGLOB in the word flags + so assignment statements don't undergo globbing. Partial fix for + problems reported by Dan Douglas + + 8/21 + ---- +command.h + - W_NOBRACE: new word flag that means to inhibit brace expansion + +subst.c + - brace_expand_word_list: suppress brace expansion for words with + W_NOBRACE flag + + 8/22 + ---- +builtins/read.def + - read_builtin: don't call dequote_string on what we've read, even if + we saw an escape character, unless (input_string && *input_string). + We may have escaped an IFS whitespace character. Fixes seg fault + reported by + +execute_cmd.c + - execute_command_internal: set the_printed_command_except trap when + about to execute a ( ... ) user subshell. For now, set it only if + ERR is trapped; can relax that later. Fixes bug reported by + Mike Frysinger + + 8/23 + ---- +jobs.c + - remove references to first_pid and pid_wrap, since we're not using + them for anything anymore + + 8/24 + ---- +subst.c + - changes for W_NOBRACE everywhere appropriate: so it can be displayed + for debugging, and passed out of expand_word_internal + +doc/{bash.1,bashref.texi} + - small changes to make it clearer that the = and == operators are + equivalent, and will cause pattern matching when used with [[. + From a question from Michal Soltys + +doc/bashref.texi + - some small formatting changes from Karl Berry + + 8/27 + ---- +lib/readline/doc/{history,rlman,rluserman}.texi + - some small formatting changes from Karl Berry + +arrayfunc.c + - assign_array_element_internal, assign_compound_array_list, + unbind_array_element, array_value_internal: changes to make + assignment statements to negative indices (a[-1]=2) and unsetting + array elements using negative indices (unset 'a[-1]') work. + From suggestions by Dennis Williamson + and Chris F. A. Johnson + +subst.c + - array_length_reference: changes to make length references to array + elements using negative indices (${#a[-1]}) work + + 8/28 + ---- +doc/{bash.1,bashref.texi} + - document new treatment of negative indices to indexed arrays when + assigning, referencing, calculating length, and unsetting + + 8/29 + ---- +shell.c + - show_shell_usage: add -l to list of shell invocation options (short + for --login). From Red Hat bug 852469 + +configure.ac + - renamed from configure.in, as latest autoconf versions want. Patches + Stefano Lattarini + +MANIFEST,Makefile.in,doc/bashref.texi,support/mkconffiles + - configure.in -> configure.ac + + 9/1 + --- + +parse.y + - read_token_word: allow words like {array[ind]} to be valid redirection + words for constructs like {x} + +lib/readline/display.c + - update_line: if the first difference between the old and new lines + is completely before any invisible characters in the prompt, we + should not adjust _rl_last_c_pos, since it's before any invisible + characters. Fixed in two places + - prompt_modechar: return a character indicating the editing mode: + emacs (@), vi command (:), or vi insert (+) + - _rl_reset_prompt: new function, just calls rl_expand_prompt. Will be + inlined, placeholder for more changes + - expand_prompt: if show-mode-in-prompt is enabled, add a character to + the front of the prompt indicating the editing mode, adjusting the + various variables as appropriate to keep track of the number of + visible characters and number of screen positions + +lib/readline/bind.c + - show-mode-in-prompt: new bindable boolean variable, shadowed by + _rl_show_mode_in_prompt variable + - hack_special_boolean_var: call _rl_reset_prompt when toggling or + setting show-mode-in-prompt + +lib/readline/readline.c + - readline_internal_setup: make sure the correct vi mode keymap is set + before expanding the prompt string for the first time + +lib/readline/misc.c + - rl_emacs_editing_mode: make sure to call _rl_reset_prompt if we're + showing the editing mode in the prompt + +lib/readline/rlprivate.h + - _rl_reset_prompt, _rl_show_mode_in_prompt: extern declarations + +lib/readline/vi_mode.c + - rl_vi_insertion_mode: call _rl_reset_prompt + - rl_vi_movement_mode: call _rl_reset_prompt. Finishes changes for + showing mode in prompt string, originally requested by Miroslav + Koskar and most recently by Jordan Michael + Ziegler + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - document new show-mode-in-prompt variable, off by default + + 9/3 + --- + +jobs.c + - set_childmax: new function, external mechanism for other parts of + the shell to set js.c_childmax, the number of saved exited child + statuses to remember +jobs.h + - set_childmax: extern declaration + +variables.c + - CHILD_MAX: new special variable, with sv_childmax function to + run when it changes. Setting CHILD_MAX to a value greater than + zero but less than some maximum (currently 8192) sets the number of + exited child statuses to remember. set_childmax (jobs.c) ensures + that the number does not drop below the posix-mandated minimum + (CHILD_MAX) + +doc/{bash.1,bashref.texi} + - CHILD_MAX: document new meaning and action when variable is set + + 9/5 + --- +redir.c + - redir_varassign: call stupidly_hack_special_variables after + assigning fd number to specified variable, so we can use constructs + like {BASH_XTRACEFD}>foo. Suggested by Pierre Gaston + + + 9/8 + --- +expr.c + - readtok: invalidate previous contents of `curlval' before freeing + and reallocating tokstr (which, chances are, will get the same + pointer as before and render curlval inconsistent). Fixes other + bug reported by Dan Douglas + + 9/9 + --- +lib/readline/complete.c + - rl_username_completion_function: protect call to setpwent() with + #ifdef (HAVE_GETPWENT)/#endif. Fixes bug reported by + Gerd Hofmann + +lib/readline/display.c + - rl_message: second and subsequent calls to rl_message can result in + local_prompt being overwritten with new values (e.g., from the + successive calls displaying the incremental search string). Need + to free before overwriting if it's not the same as the value saved + in saved_local_prompt. Fixes memory leak reported by + Wouter Vermaelen + +lib/readline/{terminal.c,rlprivate.h} + - move CUSTOM_REDISPLAY_FUNC and CUSTOM_INPUT_FUNC defines from + terminal.c to rlprivate.h so other files can use them + +expr.c + - expr_streval: if noeval is non-zero, just return 0 right away, + short-circuiting evaluation completely. readtok will leave curtok + set correctly without re-entering the evaluator at all. Rest of + fix for bug reported by Dan Douglas + + 9/11 + ---- + +parse.y + - parse_comsub: make sure the `reserved word ok in this context' flag + is preserved after we read `do' followed by whitespace. Fixes bug + reported by Benoit Vaugon + + 9/13 + ---- +configure.ac,config.h.in + - enable-direxpand-default: new configure option, turns the `direxpand' + shell option on by default + +bashline.c + - dircomplete_expand, dircomplete_expand_relpath: initialize to 1 if + DIRCOMPLETE_EXPAND_DEFAULT is defined and non-zero + +doc/bashref.texi + - enable-direxpand-default: document new configure option + + 9/14 + ---- +shell.c + - --protected: make option valid only when wordexp is compiled into + the shell. Fix from Roman Rakus + +configure.ac + - HP NonStop (*-nsk*): compile --without-bash-malloc. Change from + Joachim Schmitz + + 9/16 + ---- +subst.c,execute_cmd.c,lib/glob/sm_loop.c,lib/sh/shquote.c + - minor code cleanups from Joachim Schmitz + +lib/readline/colors.h + - workaround for HP NonStop compiler issue with from + Joachim Schmitz + + 9/17 + ---- +builtins/printf.def + - printf_builtin: handle localtime returning NULL, as can happen when + encountering overflow. Bug report and initial fix from + Eduardo A. Bustamante López + +doc/{bash.1,bashref.texi} + - emphasize that brace expansion using character ranges ({a..c}) acts + as if the C locale were in use. Prompted by message from + Marcel Giannelia + + 9/20 + ---- +lib/sh/wcsnwidth.c + - wcsnwidth: new function, variant of wcwidth, returns the number of + wide characters from a string that will be displayed to not exceed + a specified max column position + + 9/21 + ---- +builtins/help.def + - show_builtin_command_help: break code that displays the short-doc + for each builtin in two columns into a new function: dispcolumn + - wdispcolumn: multibyte-char version of dispcolumn; uses wide + chars and printf "%ls" format. Fixes problem reported by + Nguyá»n Thái Ngá»c Duy + + 9/22 + ---- +execute_cmd.c + - execute_disk_command: before running the command-not-found hook, + call kill_current_pipeline() to make sure we don't add processes + to an existing pipeline or wait for processes erroneously + + 9/23 + ---- +lib/readline/input.c + - rl_input_available_hook: new hook function, called from + _rl_input_available (or _rl_input_queued) to return whether or not + input is available wherever the input source is + +lib/readline/doc/rltech.texi + - rl_input_available_hook: document + + 9/27 + ---- +lib/glob/sm_loop.c: + - GMATCH: after one or more `*', an instance of ?(x) can match zero or + 1 times (unlike ?, which has to match one character). The old code + failed if it didn't match at least once. Fixes `a*?(x)' bug. + - GMATCH: if we hit the end of the search string, but not the end of + the pattern, and the rest of the pattern is something that can + match the NUL at the end of the search string, we should successfully + match. Fixes `a*!(x)' bug reported by + + 10/2 + ---- +command.h + - add c_lock member to coproc structure for future use to tell who is + manipulating it + +execute_cmd.c + - execute_coproc: block SIGCHLD while parent is forking coproc + process and adding pid to sh_coproc struct to avoid race condition + where child is reaped before the pid is assigned and the coproc is + never marked as having died. Fixes race condition identified by + Davide Baldini + - add assignments to c_lock member of struct coproc in various + functions that manipulate it; was used to identify race condition + - coproc_pidchk: don't call coproc_dispose to avoid using malloc and + other functions in a signal handler context + - coproc_dispose: call BLOCK_SIGNAL/UNBLOCK_SIGNAL for SIGCHLD while + manipulating the sh_coproc struct + + 10/6 + ---- +lib/readline/complete.c + - rl_display_match_list: if printing completions horizontally, don't + bother with spacing calculations if limit == 1, which means we are + printing one completion per line no matter what. Fixes bug + reported by David Kaasen + + 10/7 + ---- +builtins/declare.def + - declare_internal: add error checking for nameref attribute and + variable assignments: self-references, attempts to make an array + variable a nameref + +subst.c + - parameter_brace_expand: handle parameter_brace_expand_word returning + &expand_param_fatal or &expand_param_error and return the appropriate + error value + - parameter_brace_expand_word: if a nameref variable's value is not a + valid identifier, return an error + - param_expand: if a nameref variable's value is not a valid identifier, + return an error + +test.c + - unary_operator: add new -R variable, returns true if variable is set + and has the nameref attribute. From ksh93 + +builtins/test.def + - add -R to description of conditional commands for help test + +doc/{bash.1,bashref.texi} + - document new -R unary conditional operator + + 10/13 + ----- +trap.c + - check_signals_and_traps: new function, convenience function for the + rest of the shell to check for pending terminating and interrupt + signals, and to check for and process any pending traps + - any_signals_trapped: new function, returns non-zero if any signals + are trapped and -1 if not + +trap.h + - extern declaration for check_signals_and_traps + +bashline.c + - bashline_reset: make sure we reset the event hook + - bash_event_hook: call check_signals_and_traps instead of just + checking for terminating signals so we can run pending traps and + react to interrupts, and reset the event hook when we're done + + + 10/14 + ----- +trap.c + - trap_handler: if executing in a readline signal handler context, + call bashline_set_event_hook to install bash_event_hook to process + the signal (if bash cares about it) + +sig.c + - sigint_sighandler: call bashline_set_event_hook to set the event + hook if we're executing in a readline signal handler context + +lib/readline/input.c + - rl_getc: call RL_CHECK_SIGNALS if read returns -1/EINTR and the caught + signal is SIGINT or SIGQUIT rather than waiting until the next time + around the loop + - rl_getc: call rl_event_hook after calling RL_CHECK_SIGNALS to allow + an application signal handler to set the event hook in its own + signal handler (e.g., like bash trap_handler or sigint_sighandler) + + +parse.y + - yy_readline_get: don't set interrupt_immediately before we call + readline(). Inspired by report from lanshun zhou + + +input.c + - getc_with_restart: add call to run_pending_traps after call to + CHECK_TERMSIG + +lib/sh/zread.c + - zread: call check_signals_and_traps if read() returns -1/EINTR + instead of just ignoring the EINTR and deferring handling any + signal that generated it + +builtins/mapfile.def + - mapfile: don't set interrupt_immediately before calling zgetline() + (which uses zread internally) + +builtins/read.def + - read_builtin: don't set interrupt_immediately before calling zread + (moved code around so that it was only being set right around calls + to zread to avoid signal handler conflicts). Inspired by report + from lanshun zhou + - edit_line: don't set interrupt_immediately around call to readline() + - include shmbutil.h + - read_builtin: don't call read_mbchar unless is_basic(c) returns + false for the character we just read + + 10/15 + ----- +sig.c + - throw_to_top_level: if interrupt_state is non-zero, make sure that + last_command_exit_value reflects 128+SIGINT if it's not already + greater than 128 + + 10/20 + ----- +builtins/wait.def + - WAIT_RETURN: set wait_signal_received back to 0 for the potential + next call to wait + +quit.h + - CHECK_WAIT_INTR: macro to check whether trap_handler handled a + signal and set wait_signal_received; longjmp to wait_intr_buf in + that case + +jobs.c + - wait_for, waitchld: call CHECK_WAIT_INTR at the same places we call + CHECK_TERMSIG to check for terminating signals + - wait_sigint_handler: don't longjmp out of the wait builtin unless + interrupt_immediately is set; otherwise just SIGRETURN from the + handler + - wait_sigint_handler: if interrupt_immediately not set, but we are + executing in the wait builtin and SIGINT is not trapped, treat it + as a `normally received' SIGINT: restore the signal handler and + send SIGINT to ourselves + - waitchld: when in posix mode and running SIGCHLD traps, don't longjmp + to wait_intr_buf (and let wait be interrupted) if we're running from + a signal handler. Wait for CHECK_WAIT_INTR to do the longjmp. + run_pending_traps will run the SIGCHLD trap later + +nojobs.c + - reap_zombie_children, wait_for_single_pid, wait_for: call + CHECK_WAIT_INTR where we call CHECK_TERMSIG + - wait_sigint_handler: don't longjmp out of the wait builtin unless + interrupt_immediately is set; otherwise just SIGRETURN from the + handler + +trap.c + - trap_handler: make sure wait_signal_received is set if the wait + builtin is executing, and only longjmp if interrupt_immediately is + set. This whole set of fixes was prompted by report from + lanshun zhou + + 10/24 + ----- +lib/glob/glob.c + - glob_filename: only check directory_name for globbing chars if + it's of non-zero length + +lib/sh/strchrnul.c + - new simpler implementation + +subst.c + - command_substitute: call set_shellopts after turning off errexit + in subshells so it's reflected in $SHELLOPTS + + 11/7 + ---- +builtins/evalstring.c + - parse_and_execute: treat ERREXIT case like reader_loop does: set + variable_context to 0 before longjmping back to top_level. Don't + run the unwind-protect context to avoid side effects from popping + function contexts. Part of fix for problem reported by Nikolai + Kondrashov + +execute_cmd.c + - execute_simple_command: call unlink_fifo_list only if this is the + last element of a pipeline (or not in a pipeline), rather than for + every child. Fixes difference in behavior between /dev/fd and + FIFOs reported by Zev Weiss + - execute_null_command: do the same thing in the parent branch after + make_child + + 11/14 + ----- +subst.c + - parameter_brace_expand: a variable is null if it's special ($@, $*), + the expansion occurs within double quotes, and the expansion turns + into a quoted null. Fixes debian bug 692447 reported by + Matrosov Dmitriy + +jobs.c + - run_sigchld_trap: make sure `running_trap' sentinel is set + appropriately + - waitchld: only run the sigchld trap if we're not in a signal + handler, not running a trap, and executing the wait builtin. + Otherwise, queue for later handling. We still run one instance + of the trap handler per exited child. Bulk of fix for bug + reported by Elliott Forney + +trap.c + - queue_sigchld_trap: set catch_flag so run_pending_traps notices, + and set trapped_signal_received for completeness. Rest of fix + for bug reported by Elliott Forney + +lib/malloc/malloc.c + - block_signals: renamed to _malloc_block_signals, made public + - unblock_signals: renamed to _malloc_unblock_signals, made public + +lib/malloc/imalloc.h + - extern declarations for _malloc_{un,}block_signals + +lib/malloc/table.c + - mregister_alloc, mregister_free: block signals around table + manipulation + + 11/15 + ----- +trap.c + - run_pending_traps: set SIG_INPROGRESS flag around calls to + run_sigchld_handler so other parts of the shell know that the + SIGCHLD trap handler is executing + - run_pending_traps: if we get a situation where we are looking at + running a SIGCHLD trap but the trap string is IMPOSSIBLE_TRAP_HANDLER + and the SIG_INPROGRESS flag is set, just skip it. This is possible + if run_pending_traps is called from a SIGCHLD trap handler run by + run_sigchld_trap + +doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} + - corrected description of the effect of `set history-size 0'. Report + from Vesa-Matti J Kari + +include/stdc.h + - CPP_STRING: new define, replaces __STRING + +lib/malloc/{malloc.c,imalloc.h} + - replace __STRING with CPP_STRING + + 11/16 + ----- +lib/readline/bind.c + - sv_histsize: if argument evaluates to a value < 0, unstifle the + history + + 11/22 + ----- +redir.c + - do_redirection_internal: if we have REDIR_VARASSIGN set in the + redirection flags and we set up `redirector' using fcntl or dup2, + don't add a redirect to make sure it stays open. Let the + script programmer manage the file handle. Fixes bug reported by + Sam Liddicott + + 11/24 + ----- +jobs.c + - wait_for_any_job: new function, waits for an unspecified background + job to exit and returns its exit status. Returns -1 on no background + jobs or no children or other errors. Calls wait_for with new + sentinel value ANY_PID + - wait_for: changes to handle argument of ANY_PID: don't look up or + try to modify the child struct, only go through the wait loop once. + Return -1 if waitpid returns no children + +jobs.h + - ANY_PID: new define + +builtins/wait.def + - new option: -n. Means to wait for the next job and return its exit + status. Returns 127 if there are no background jobs (or no + children). Feature most recently requested by Elliott Forney + + +doc/{bash.1,bashref.texi} + - document new `wait -n' option + +execute_cmd.c + - execute_command_internal: save make_command_string () result in a + temp variable before calling savestring() on it; avoids evaluating + make_command_string() result twice. Fix from John E. Malmberg + + + 11/28 + ----- + +builtins/declare.def + - declare_internal: if an array variable is declared using `declare -a' + or `declare -A', but not assigned a value, set the `invisible' + attribute so the variable does not show up as set. Fix for bug + about variable initialization reported by Tim Friske + +builtins/{mapfile,read}.def + - after calling find_or_make_array_variable, make sure the invisible + flag is turned off, in case the variable was declared previously + using `declare -a' or `declare -A'. Side effect of above change to + declare_internal + +subst.c + - shell_expand_word_list: handle the W_ASSNGLOBAL flag and put -g into + the list of options passed to make_internal_declare as appropriate. + Fix for bug reported by Tim Friske + + 11/30 + ----- +test.c + - unary_op: make sure -v and -n check that the variable is not marked + as invisible before calling var_isset. Fix for bug reported by Tim + Friske + + 12/2 + ---- +subst.c + - process_substitute: turn off the `expanding_redir' flag, which + controls whether or not variables.c:find_variable_internal uses the + temporary environment to find variables. We want to use the + temp environment, since we don't have to worry about order of + evaluation in a subshell. Fixes bug reported by Andrey Borzenkov + + + 12/4 + ---- +lib/glob/glob.c + - glob_filename: changes to avoid null filenames and multiple entries + returned for patterns like **/** (globstar enabled). Fixes bug + reported by Ulf Magnusson + + 12/10 + ----- +lib/glob/glob.c + - glob_filename: finish up a series of changes to make globstar-style + globbing more efficient, avoid more duplicate filenames, and be more + compatible with other shells that implement it + o collapse a sequence of **/**/** to one ** + o note when the directory name is all ** or ends in ** so we + can treat it specially when the filename is ** + All inspired by report from Andrey Borzenkov + +lib/sh/zread.c + - zreadn: new function, like zread, but takes an additional argument + saying how many bytes to read into the local buffer. Can be used to + implement `read -N' without so many one-byte calls to zreadc. Code + from Mike Frysinger + + 12/12 + ----- +lib/glob/sm_loop.c + - PATSCAN (glob_patscan): if passed string already points to end of + pattern, return NULL immediately. Fixes problem with + extglob_skipname reported by Raphaël Droz + + 12/13 + ----- +execute_cmd.c + - execute_coproc: handle the command's exit status being inverted + (an oversight). Fixes bug reported by DJ Mills + and Andreas Schwab + + 12/14 + ----- +lib/readline/readline.c + - bind_arrow_keys_internal: add MINGW key bindings for Home, End, + Delete, and Insert keys. Fix from Pierre Muller + + +builtins/printf.def + - printf_builtin: '%()T' conversion: if there is no argument supplied, + behave as if -1 had been supplied (current time). ksh93-like feature + suggested by Clark Wang + +doc/{bash.1,bashref.texi} + - document new printf %()T default argument behavior + + 12/15 + ----- +lib/readline/display.c + - displaying_prompt_first_line: new variable, indicates whether or + not the first line of output is displaying the prompt. Always true + in normal mode, sometimes false in horizontal scrolling mode + - rl_redisplay: set displaying_prompt_first_line to true unless we + are in horizontal mode; set to false in horizontal mode if the left + margin of the displayed line is greater than the end of the prompt + string + - rl_redisplay: when in horizontal scroll mode, don't adjust + _rl_last_c_pos by the wrap offset unless the line is displaying + a prompt containing invisible chars + - update line: don't adjust _rl_last_c_pos by the wrap offset unless + the line is displaying a prompt containing invisible chars + - update_line: if shrinking the line by reducing the number of + displayed characters, but we have already moved the cursor to the + beginning of the line where the first difference starts, don't + try to delete characters + +builtins/read.def + - unbuffered_read: set to 2 if invoked as `read -N' + - if unbuffered_read is set to 2, compute the number of chars we + need to read and read that many with zreadn. Posix mode still + uses zreadintr. Code from Mike Frysinger + +doc/{bash.1,bashref.texi} + - read: make it clear that if read times out, it saves any input + read to that point into the variable arguments. Report from + Fiedler Roman + +subst.c + - command_substitute: change direct assignment of exit_immediately_on_error + to use change_flag ('e', FLAG_OFF) instead + +flags.c + - use errexit_flag as the variable modified by changes to the -e + option, reflect those changes to exit_immediately_on_error + +execute_cmd.c + - execute_builtin: new global variable, builtin_ignoring_errexit, set + to 0 by default and set to 1 if eval/source/command executing in a + context where -e should be ignored + - execute_builtin: set exit_immediately_on_error to errextit_flag + after executing eval/source/command in a context where -e should + be ignored + +flags.c + - if builtin_ignoring_errexit is set, changes to errexit_flag are + not reflected in the setting of exit_immediately_on_error. Fixes + bug reported by Robert Schiele + + 12/23 + ----- +include/posixjmp.h + - setjmp_nosigs: new define, call setjmp in such a way that it will + not manipulate the signal mask + +{expr,test,trap}.c + - setjmp_nosigs: call instead of setjmp; don't need to manipulate + signal mask + +builtins/read.def + - read_builtin: setjmp_nosigs: call instead of setjmp; don't need + to manipulate signal mask + +builtins/evalstring.c: + - parse_and_execute: setjmp_nosigs: call instead of setjmp; don't need + to manipulate signal mask + - parse_string: setjmp_nosigs: call instead of setjmp; don't need + to manipulate signal mask + - parse_and_execute: save and restore the signal mask if we get a + longjmp that doesn't cause us to return or exit (case DISCARD) + + 12/24 + ----- +general.c + - bash_tilde_expand: only set interrupt_immediately if there are no + signals trapped; we want to jump to top level if interrupted but + not run any trap commands + + 12/25 + ----- +jobs.c + - run_sigchld_trap: no longer set interrupt_immediately before calling + parse_and_execute, even if this is no longer run in a signal handler + context + +input.c + - getc_with_restart: add call to QUIT instead of CHECK_TERMSIG + +parse.y + - yy_stream_get: now that getc_with_restart calls QUIT, don't need to + set interrupt_immediately (already had call to run_pending_traps) + +execute_cmd.c + - execute_subshell_builtin_or_function,execute_function,execute_in_subshell: + setjmp_nosigs: call instead of setjmp when saving return_catch; don't + need to manipulate signal mask + - execute_subshell_builtin_or_function,execute_in_subshell: + setjmp_nosigs: call instead of setjmp where appropriate when saving + top_level; don't need to manipulate signal mask if we're going to + exit right away + +subst.c + - command_substitute: setjmp_nosigs: call instead of setjmp when saving + return_catch; don't need to manipulate signal mask + - command_substitute: setjmp_nosigs: call instead of setjmp where + appropriate when saving top_level; don't need to manipulate signal + mask if we're going to exit right away + +trap.c + - run_exit_trap: setjmp_nosigs: call instead of setjmp when saving + return_catch; don't need to manipulate signal mask + - run_exit_trap: setjmp_nosigs: call instead of setjmp where + appropriate when saving top_level; don't need to manipulate signal + mask if we're going to exit right away + - _run_trap_internal: setjmp_nosigs: call instead of setjmp when saving + return_catch; don't need to manipulate signal mask + +builtins/evalfile.c + - _evalfile: setjmp_nosigs: call instead of setjmp when saving + return_catch; don't need to manipulate signal mask + +builtins/evalstring.c + - evalstring: setjmp_nosigs: call instead of setjmp when saving + return_catch; don't need to manipulate signal mask + +shell.c + - main: setjmp_nosigs: call instead of setjmp where appropriate when + saving top_level; don't need to manipulate signal mask if we're + going to exit right away + - run_one_command: setjmp_nosigs: call instead of setjmp where + appropriate when saving top_level; don't need to manipulate signal + mask if we're going to exit right away + - run_wordexp: setjmp_nosigs: call instead of setjmp where + appropriate when saving top_level; don't need to manipulate signal + mask if we're going to exit right away + +eval.c + - reader_loop: save and restore the signal mask if we get a longjmp + that doesn't cause us to return or exit (case DISCARD) + + 12/26 + ----- +parse.y + - shell_input_line_{index,size,len}: now of type size_t; in some cases + the unsigned property makes a difference + - STRING_SAVER: saved_line_{size,index} now of type size_t + - shell_getc: don't allow shell_input_line to grow larger than SIZE_MAX; + lines longer than that are truncated until read sees a newline; + addresses theoretical buffer overflow described by Paul Eggert + + - set_line_mbstate: size_t changes like shell_getc + - shell_getc: if shell_input_line is larger than 32K, free it and + start over to avoid large memory allocations sticking around + +variables.c + - bind_global_variable: new function, binds value to a variable in + the global shell_variables table + +variables.h + - bind_global_variable: new extern declaration + +builtins/declare.def + - declare_internal: if -g given with name=value, but variable is not + found in the global variable table, make sure to call + bind_global_variable so the variable is created and modified at + global scope. Fixes a bug where declare -g x=y could modify `x' + at a previous function scope + +command.h + - W_ASSIGNARRAY: new word flag, compound indexed array assignment + +subst.h + - ASS_MKGLOBAL: new assignment flag, forcing global assignment even in + a function context, used by declare -g + +execute_cmd.c + - fix_assignment_words: set W_ASSIGNARRAY flag if -a option given to + declaration builtin + +subst.c + - do_assignment_internal: explicitly handle case where we are + executing in a function and we want to create a global array or + assoc variable + - shell_expand_word_list: call make_internal_declare if -a option + given to declaration builtin (W_ASSIGNARRAY); handle -g option with + it (W_ASSNGLOBAL). Fixes inconsistency noticed by Vicente Couce + Diaz , where declare -ag foo=(bar) could modify + array variable foo at previous function scope, not global scope + + 12/27 + ----- +bashline.c + - Minix needs the third argument to tputs to be a void funtion taking + an int argument, not an int-returning function. Fix from + John E. Malmberg as part of VMS bash port + + 12/29 + ----- +configure.ac,version.c,patchlevel.h + - bash-4.3-devel: new version, new shell compatibility level (43) + +subst.c + - parameter_brace_patsub: put the bash-4.2 code back in from the + change of 3/3 that runs the replacement string through quote + removal, make it dependent on shell_compatibility_level <= 42 + +builtins/shopt.def + - compat42: new shopt option + - set_compatibility_level: change logic to set and unset various + compat variables and shell_compatibility_level + +COMPAT + - new documentation for bash-4.3 compatibility changes + +doc/{bash.1,bashref.texi} + - compat42: document new shopt option + +builtins/shopt.def + - set_compatibility_opts: new function, sets the various shopt + compat variables based on the value of shell_compatibility_level + +builtins/common.h + - set_compatibility_opts: new extern declaration + +variables.c + - BASH_COMPAT: new special variable; sets the shell compatibility + level. Accepts values in decimal (4.2) or integer (42) form; + Unsetting variable, setting it to empty string, or setting it to + out-of-range value sets the shell's compatibility level to the + default for the current version. Valid values are 3.1/31 through + the current version + - sv_shcompat: new function implementing logic for BASH_COMPAT + +variables.h + - sv_shcompat: new extern declaration + +doc/{bash.1,bashref.texi} + - BASH_COMPAT: description of new variable + +lib/readline/complete.c + - _rl_colored_stats: default back to 0 for 4.3 release branch + + 1/5/2013 + -------- +quit.h + - remove spurious call to itrace in CHECK_WAIT_INTR + +bashline.c + - bash_event_hook: if we're going to jump to top_level, make sure we + clean up after readline() by calling rl_cleanup_after_signal(). + Fixes bug reported against devel branch by Raphaël Droz + + - bash_event_hook: reset the event hook before checking for signals + or traps in case we longjmp + +doc/{bash.1,bashref.texi} + - small additions to the set -e section to make it more clear that + contexts where -e is ignored extend to compound commands as well + as shell functions + +lib/readline/readline.h + - rl_signal_event_hook: new extern declaration + +lib/readline/input.c + - rl_signal_event_hook: new variable, hook function to call when a + function (currently just read(2)) is interrupted by a signal and + not restarted + - rl_getc: call rl_signal_event_hook instead of rl_event_hook + +lib/readline/doc/rltech.texi + - rl_signal_event_hook: document new function + +bashline.c + - changes to set rl_signal_event_hook instead of rl_event_hook + +lib/readline/readline.h + - change readline version numbers to 6.3 + + 1/6 + --- +doc/{bash.1,bashref.texi} + - a couple of changes to the descriptions of the ERR trap and its + effects based on a message from Rob Nagler + + 1/9 + --- +expr.c + - expassign: invalidate curlval before freeing and NULLing tokstr to + avoid aliasing issues. Fixes bug reported by Eduardo A. Bustamante + López and Dan Douglas + +braces.c + - array_concat: don't be so aggressive in trying to short-circuit. We + can only short-circuit if we have a single-element array where the + element is an empty string (array[0] == "" array[1] = 0x0). Existing + practice requires us to replicate arrays and prefix or append empty + strings. Fixes bug reported by Eduardo A. Bustamante López + + + 1/11 + ---- +execute_cmd.c + - execute_builtin: since mapfile uses evalstring() to run its callbacks + internally, just like eval, so it needs to handle the case where the + temp environment given to mapfile persists throughout the entire + set of callback commands. This might be a problem with trap also, but + trap isn't run in the same way. Fixes bug reported by Dan Douglas + + + 1/13 + ---- +redir.c + - redirection_error: before expanding the redirection word (if + expandable_redirection_filename returns true), disable command + substitution during expansion. Fixes bug reported by Dan Douglas + + +subst.c + - expand_word_internal: case '\\': if the next character is an IFS + character, and the expansion occurs within double quotes, and the + character is not one for which backslash retains its meaning, add + the (escaped) '\' and the (escaped) character. Fixes bug reported + by Dan Douglas + + 1/15 + ---- +builtins/cd.def + - cd_builtin: make sure call to internal_getopt handles -e option. + Fixes bug reported by + + 1/17 + ---- +subst.c + - expand_word_list_internal: make sure tempenv_assign_error is + initialized to 0 + +execute_cmd.c + - execute_simple_command: make sure tempenv_assign_error is reset to 0 + after it's tested to see if an error should force the shell to exit. + Fixes problem where a the failure of a tempenv assignment preceding + a non-special builtin `sticks' and causes the next special builtin + to exit the shell. From a discussion on bug-bash started by + douxin + + 1/20 + ---- +subst.c + - parameter_brace_expand_rhs: call stupidly_hack_special_variables + after assigning with ${param[:]=word} even if IFS is changing. + Suggested by Dan Douglas [TENTATIVE, needs work + on IFS side effects] + +command.h + - W_GLOBEXP (which was unused) is now W_SPLITSPACE (which isn't used + yet) + +{execute_cmd,subst,variables}.c + - removed all code that mentioned W_GLOBEXP + - removed mention of gnu_argv_flags and code that set it + + 1/22 + ---- +subst.c + - param_expand: set W_SPLITSPACE if we expand (unquoted) $* and + IFS is unset or null so we can be sure to split this on spaces + no matter what happens with IFS later + - expand_word_internal: note that param_expand returns W_SPLITSPACE + in the returned word flags and keep track of that state with + `split_on_spaces' + + 1/23 + ---- +subst.c + - expand_word_internal: if split_on_spaces is non-zero, make sure + we split `istring' on spaces and return the resultant word. The + previous expansions should have quoted spaces in the positional + parameters where necessary. Suggested by Dan Douglas + + +execute_cmd.c + - execute_command_internal: make sure any subshell forked to run a + group command or user subshell at the end of a pipeline runs any + EXIT trap it sets. Fixes debian bash bug 698411 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411 + +subst.c + - shell_expand_word_list: fix code that creates args for and calls + make_internal_declare to avoid calling it twice (missing `else' + in 12/26 change) + - do_assignment_internal: fix code from 12/26 change to fix problem + where an existing assoc variable could be converted to an array + without checking `mkassoc' + + 1/24 + ---- +builtins/evalfile.c + - _evalfile: add missing `close (fd)' calls before returning to + avoid fd leaks. Bug and fix from Roman Rakus + + 1/25 + ---- +builtins/read.def + - read_builtin: don't try to play tricks with the top of the unwind- + protect stack after read gets a SIGALRM; save input_string to new + memory, run the stack, then restore input_string and assign the + variables. Part of fix for bug reported by konsolebox + ; the rest of the fix is with the changes in + trap and signal handling and doing away with interrupt_immediately + + 1/26 + ---- +redir.c + - redirection_expand, write_here_string, write_here_document: before + calling any of the word expansion functions, after setting + expanding_redir to 1 (which bypasses the temp environment in the + variable lookup functions), call sv_ifs to reset the cached IFS- + related variables set by subst.c:setifs(). This ensures that + redirections will not get any IFS values that are set in the + temporary environment, as Posix specifies. Then, after the word + expansions, after resetting expanding_redir to 0, call sv_ifs + again to make sure the cached IFS values are set from any + assignments in the temporary environment. We force executing_builtin + to 1 to `fool' the variable lookup functions into using any temp + environment, then reset it to its old value after sv_ifs returns. + This is what allows read() to use the (cached) IFS variables set + in the temp environment. Fixes inconsistency reported by Dan Douglas + + + 1/29 + ---- +lib/readline/display.c + - update_line: fix off-by-one error when updating vis_lbreaks array + in a multibyte locale that occurs when moving multibyte chars from + one line down to another. Bug report and fix from Egmont + Koblinger + + 1/30 + ---- +configure.ac + - changed version to 4.3-alpha + +redir.c + - redir_open: handle open returning -1/EINTR, which seems to happen + a lot with FIFOs and SIGCHLD, and call QUIT to handle other + signals that can interrupt open(2). Bug report and initial fix + from Mike Frysinger + + 1/31 + ---- +subst.c + - parameter_brace_expand: make sure to propagate the PF_ASSIGNRHS flag + to parameter_brace_expand_word + - parameter_brace_expand_word: make sure that if the PF_ASSIGNRHS flag + is set and we are expanding ${a[@]} or ${a[*]} we set quoted to + include Q_DOUBLE_QUOTES before calling array_value_internal, mirroring + what we do for $@ and $*. Fixes inconsistency reported by Dan + Douglas + +configure.ac + - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it + will find $host-prefixed versions of utilities. Report and fix from + Mike Frysinger + +builtins/setattr.def + - set_var_attribute: check whether bind_variable (called when the + variable whose attributes are being modified is found in the temp + environment) just modified a read-only global variable, and don't + bother marking the temporary variable for propagation if so. The + propagation is superfluous and will result in a strange error + message + + 2/2 + --- +variables.c + - initialize_shell_variables: don't try to import function definitions + with invalid names from the environment if already in posix mode, + but create them as (invisible) exported variables so they pass + through the environment. Print an error message so user knows + what's wrong. Fixes bug reported by Tomas Trnka + + 2/9 + --- + +builtins/read.def + - sigalrm_seen, alrmbuf: now global so the rest of the shell (trap.c) + can use them + - sigalrm: just sets flag, no longer longjmps to alrmbuf; problem was + longjmp without manipulating signal mask, leaving SIGALRM blocked + +quit.h + - move CHECK_ALRM macro here from builtins/read.def so trap.c: + check_signals() can call it + +trap.c + - check_signals: add call to CHECK_ALRM before QUIT + - check_signals_and_traps: call check_signals() instead of including + CHECK_ALRM and QUIT inline. Integrating check for read builtin's + SIGALRM (where zread call to check_signals_and_traps can see it) + fixes problem reported by Mike Frysinger + + 2/12 + ---- +lib/glob/xmbsrtowcs.c + - xdupmbstowcs2: fixed but where end of string was not handled + correctly, causing loop to go past end of string in a bunch of cases. + Fixes bug reported by "Dashing" + + + 2/13 + ---- +builtins/pushd.def + - popd_builtin: treat any argument that isn't -n or of the form + [-+][[:digit:]]* as an error. Fixes problem reported by Bruce + Korb + + 2/14 + ---- +configure.ac + - add check for sig_atomic_t; already a placeholder for it in + config.h.in + + 2/15 + ---- +subst.c + - do_compound_assignment: don't call assign_compound_array_list with + a NULL variable in case make_local_xxx_variable returns NULL + (it will if you try to shadow a readonly or noassign variable). + Fixes bug reported by Richard Tollerton + + 2/16 + ---- +variables.c + - make_local_variable: print error messager if an attempt is made to + create a local variable shadowing a `noassign' variable. Previously + we just silently refused to do it + +trap.[ch] + - get_original_signal: now global so rest of the shell can use it + +sig.c + - initialize_shell_signals: install a signal handler for SIGTERM + that does nothing except set a sigterm_received flag instead of + ignoring it with SIG_IGN, as long as SIGTERM is not ignored when + the shell is started. Use get_original_signal early to get the + original handler, since we will do that later anyway + - set_signal_handler: if installing sigterm_sighandler as the SIGTERM + handler, make sure to add SA_RESTART flag to make it as close to + SIG_IGN as possible + +sig.h + - sigterm_sighandler: new extern declaration + +quit.h + - RESET_SIGTERM: set sigterm_receved to 0 + - CHECK_SIGTERM: check sigterm_received; if it's non-zero, treat it + as a fatal signal and call termsig_handler to exit the shell + +jobs.c + - make_child: call RESET_SIGTERM just before fork() so we can detect + if the child process received a SIGTERM before it's able to change + the signal handler back to what it was when the shell started + (presumably SIG_DFL). Only has effect if the shell installed + sigterm_sighandler for SIGTERM, interactive shells that were not + started with SIG_IGN as the SIGTERM handler + - make_child: call RESET_SIGTERM in the parent after fork() so the + rest of the shell won't react to it + +execute_cmd.c + - execute_simple_command: call CHECK_SIGTERM after make_child in child + to catch SIGTERM received after fork() and before restoring old + signal handlers + - execute_disk_command: call CHECK_SIGTERM after make_child in child + process after restoring old signal handlers and again just before + calling shell_execve. Fixes race condition observed by + Padraig Brady when testing with his `timeout' + program + +lib/readline/display.c + - open_some_spaces: new function, subset of insert_some_chars that just + opens up a specified number of spaces to be overwritten + - insert_some_spaces: now just calls to open_some_spaces followed by + _rl_output_some_chars + - update_line: use col_temp instead of recalculating it using + _rl_col_width in the case where we use more columns with fewer bytes + - update_line: use open_some_spaces and then output the right number + of chars instead of trying to print new characters then overwrite + existing characters in two separate calls. This includes removing + some dodgy code and making things simpler. Fix from Egmont + Koblinger + - use new variable `bytes_to_insert' instead of overloading temp in + some code blocks (nls - nfd, bytes that comprise the characters + different in the new line from the old) + + 2/18 + ---- +redir.c + - do_redirection_internal: add undoable redirection for the implicit + close performed by the <&n- and >&n- redirections. Fixes bug + reported by Stephane Chazelas + + 2/19 + ---- +sig.c + - termsig_handler: an interactive shell killed by SIGHUP and keeping + command history will try to save the shell history before exiting. + This is an attempt to preserve the save-history-when-the-terminal- + window-is-closed behavior + + 2/21 + ---- +braces.c + - brace_expand: if a sequence expansion fails (e.g. because the + integers overflow), treat that expansion as a simple string, including + the braces, and try to process any remainder of the string. The + remainder may include brace expansions. Derived from SuSE bug + 804551 example (https://bugzilla.novell.com/show_bug.cgi?id=804551) + + 2/23 + ---- +{quit,sig}.h,sig.c + - sigterm_received declaration now in sig.h; type is sig_atomic_t + - sigwinch_received type now sig_atomic_t + - sig.h includes bashtypes.h and if SIG_DFL not defined + (same logic as trap.h) to pick up sig_atomic_t + +unwind_prot.c + - include sig.h before quit.h (reverse order) + + 2/27 + ---- +builtins/shopt.def + - reset_shopt_options: make sure check_window_size is reset to the + default from config.h, not unconditionally to 0 + +jobs.[ch] + - last_made_pid, last_asynchronous_pid: now volatile. Change from SuSE + +jobs.c + - wait_for: if we're using sigaction to install a handler for SIGCHLD, + make sure we specify SA_RESTART + +lib/{tilde,readline}/shell.c + - get_home_dir: instead of looking in the password file every time, + look once and cache the result + +sig.[ch] + - sigwinch_received, sigterm_received: now `volatile' qualified + +sig.c,quit.h + - interrupt_state,terminating_signal: now sig_atomic_t + + 3/1 + --- +MANIFEST,examples/* + - removed around 120 files without FSF copyrights; requested by + Karl Berry in early January + + 3/2 + --- +lib/malloc/malloc.c + - morecore: only check whether SIGCHLD is trapped if SIGCHLD is defined + +doc/bashref.texi + - Fixed most of the examples in the GNU Parallel section to use better + shell idioms following complaints on bug-bash; added a couple of + examples and smoothed out the text + +quit.h + - include "sig.h" for sig_atomic_t + +lib/readline/display.c + - update_line: when inserting one or more characters at the end of + the display line in a non-multibyte environment, just write from the + first difference to the end of the line and return. We don't have + to adjust _rl_last_c_pos. This is needed to adjust from the old + two-part copy to a single call to _rl_output_some_chars (change of + 2/16) + + 3/4 + --- +Makefile.in,doc/Makefile.in + - PACKAGE_TARNAME, docdir: new variables substituted by autoconf + - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary + documentation files to be installed into $(docdir) + - install: add new rule to install $(OTHER_DOCS) + - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS) + +doc/bash.1 + - add URL to `POSIX' file in `SEE ALSO' section; put pointer to that + section in --posix and set -o posix descriptions + +examples/ + - removed around 110 examples at the request of the FSF due to copyright + issues + + 3/5 + --- +builtins/setattr.def + - readonly: modified help text slightly to make it clearer that + functions aren't changed or displayed unless the -f option is given. + Report from + + 3/9 + --- +include/typemax.h + - SIZE_MAX: define to 65535 (Posix minimum maximum) if not defined + +parse.y + - include "typemax.h" for possible SIZE_MAX definition, make sure we + include it after shell.h + +{braces,expr}.c + - include "typemax.h" for possible INTMAX_MIN and INTMAX_MAX definitions + + 3/10 + ---- +bashline.c + - bash_default_completion: make sure completion type of `!' (same as + TAB but with show-all-if-ambiguous set) and glob-word-completion + sets rl_filename_completion_desired to 0 so extra backslashes don't + get inserted by `quoting' the completion. We can't kill all the + matches because show-all-if-ambiguous needs them. Bug report from + Marcel (Felix) Giannelia + +[bash-4.3-alpha frozen] + + 3/14 + ---- +general.c + - trim_pathname: use memmove instead of memcpy since the source and + destination pathnames may overlap. Report and fix from Matthew + Riley + + 3/18 + ---- +configure.ac + - socklen_t is defined as `unsigned int' if configure can't find it + + 3/20 + ---- +lib/readline/complete.c + - S_ISVTX: since it's not defined on all platforms (Minix), make sure + its use is protected with #ifdef + + 3/21 + ---- +doc/{bash.1,bashref.texi} + - Added mention of ${!name[@]} and ${!name[*]} expansions to get all + indices of an array. Suggested by Jonathan Leffler + + + 3/24 + ---- +subst.h + - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that + single quotes (for now) will be treated as ordinary characters + +subst.c + - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now + + 3/25 + ---- +support/config.{guess,sub} + - updated to versions from autoconf-2.69 + + 3/31 + ---- +lib/sh/shquote.c + - sh_single_quote: short-circuit quoting a single "'" instead of + creating a long string with empty single-quoted strings + +parser.h + - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single- + quote results of $'...' expansion because quote removal will be + done later. Right now this is only done for ${word/pat/rep} + +parse.y + - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern + substitution word expansion so we don't treat single quote specially + in the pattern or replacement string + - parse_matched_pair: if we're parsing a dollar-brace word expansion + (${...}) and we're not treating single quote specially within + double quotes, single-quote the translation of $'...' ansi-c + escaped strings. Original report and fix from Eduardo A. + Bustamante López + +subst.c + - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the + DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat + single quotes specially within a double-quoted string + +execute_cmd.c + - fix_assignment_words: skip over assignment statements preceding a + command word before trying to figure out whether or not assignment + statements following a possible declaration command should be + treated specially. Fixes bug reported by Dan Douglas + + + 4/4 + --- +lib/readline/readline.c + - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether + the key is a text modification command) if the key sequence length + is 1. That keeps the arrow keys from setting the last command + when called in vi command mode. Fixes bug reported by Ian A. + Watson + + 4/6 + --- +lib/readline/bind.c + - rl_parse_and_bind: when parsing a double-quoted string as the value + of a variable, make sure we skip past the leading double quote. + Fix from Andreas Schwab + +variables.c + - hash_lookup: set new local variable last_table_searched to the table + a successful lookup appears in; tested in make_local_variable to + solve the problem below + - make_local_variable: if we find a variable with the tempenv flag + set at the same `level' as variable_context', but not found in the + temporary_env (temp environment preceding the builtin), return it. + The temp environment preceding the function call has already been + merged (in execute_function) into the list of variable contexts the + function sees as shell_variables by the time this is called. Fixes + inconsistency pointed out by Dan Douglas + +subst.c + - expand_arith_string: expanded out contents of expand_string, + expand_string_internal, expand_string_if_necessary to create a + WORD_DESC and call call_expand_word_internal() on it directly. + We don't want process substitution to be performed ( 1<(2) ) should + mean something different in an arithmetic expression context. + It doesn't work to just turn on the DQUOTE flag, since that means + that things like ${x["expression"]} are not expanded correctly. + Fixes problem pointed out by Dan Douglas + + 4/13 + ---- +subst.c + - process_substitute: run the EXIT trap before exiting, as other + shells seem to. Fixes problem pointed out by Dan Douglas + + +lib/readline/readline.c + - readline_internal_setup: call rl_vi_insertion_mode to enter vi + mode instead of rl_vi_insert_mode to avoid resetting the saved last + command information. Posix says that `.' can repeat a command + that was entered on a previous line so we need to save the info. + Fixes bug reported by Ian A. Watson + + 4/14 + ---- +lib/readline/complete.c + - rl_completion_matches: make sure xrealloc returns something non-null + (can happen when interrupted by a signal) before trying to add + matches to match_list + +subst.c + - array_remove_pattern: return NULL right away if array_variable_part + returns an invisible variable + - array_length_reference: handle array_variable_part returning an + invisible variable + - get_var_and_type: handle array_variable_part returning an invisible + variable + + 4/15 + ---- +execute_cmd.c + - execute_command_internal: make sure to run the EXIT trap for group + commands anywhere in pipelines, not just at the end. From a point + raised by Andreas Schwab + +variables.c + - bind_int_variable: make sure invisible flag is unset. Fixes problems + like "declare -ai a; : $(( a[4]=4 ));" + +arrayfunc.c + - array_variable_part: return variable even if invisible flag set, + callers must handle invisible vars + + 4/18 + ---- +builtins/set.def + - unset_builtin: if -n flag given, call unset_nameref instead of + unset_variable + +variables.c + - find_variable_nameref: print warning message if nameref circular + reference detected, return NULL and let caller deal with it + +builtins/declare.def + - declare_builtin: only disallow global references at this point if + we are at the global scope + + 5/16 + ---- +configure.ac + - update release status to beta + + 5/23 + ---- +trap.c + - run_pending_traps: save and restore pipeline around calls to + evalstring() in case we get a trap while running a trap. Have to + figure out the recursive running traps issue elsewhere. Fixes + bug reported by Roman Rakus + - run_pending_traps: make sure to set running_trap to the appropriate + signal value when running a trap command + - run_pending_traps: short-circuit immediately if running_trap set + when invoked. Could change this later to only skip if it would + run the same trap as currently being run (running_trap == sig + 1) + +configure.ac + - add warning if bison not found + +lib/readline/doc/rltech.texi + - new section with an example program illustrating the callback + interface. Suggested by Peng Yu + +examples/loadables/Makefile.in + - remove references to `cut' and `getconf', which were removed in + early March + + 5/28 + ---- +lib/sh/pathphys.c + - sh_realpath: correct inverted two arguments to call to sh_makepath. + Report and fix from Julien Thomas + + 6/7 + --- +execute_cmd.c + - executing_line_number: the else clauses that are conditional on + various options being defined can simply be if clauses -- they are + mutually exclusive and all have `return' in the body. Fixes bug + reported by Flavio Medeiros + + 6/25 + ---- +lib/readline/readline.c + - readline_internal_setup: only sent the meta-key enable string to the + terminal if we've been told to use one and the terminal has been + successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0). + Suggested by Dan Mick + +lib/readline/signals.c + - _rl_signal_handler: call any defined signal hook after calling + rl_resize_terminal when handling a SIGWINCH. We already have called + the original SIGWINCH handler but will not be resending the signal + to ourselves + + 6/27 + ---- +lib/readline/doc/history.3, doc/bash.1 + - fix description of the `$' modifier to note that it expands to the + last *word*, which is not always the last argument. Report from + ariyetz@gmail.com via gnu.org RT + + 6/29 + ---- +lib/glob/smatch.c + - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead + of 0 (0 if not defined) + +configure.ac,config.h.in + - --enable-glob-asciiranges-default: new option, controls the value of + GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on + by default + +doc/bashref.texi + - document new --enable-glob-asciiranges-default configure option + +variables.c + - assign_in_env: implement += value appending semantics for assignments + preceding command names + + 7/4 + --- +expr.c + - set lasttok = NUM in all of the functions that result in a number, + even if it's a boolean, to avoid errors with constructs like + 1 * x = 1, which should be an asignment error. Fixes problem + pointed out by Dan Douglas + +parse.y + - decode_prompt_string: don't bother to call strcpy if + polite_directory_format returns its argument unchanged. It's not + necessary and Mac OS X 10.9 aborts because of a supposed overlapping + string copy. Bug and fix from simon@hitzemann.org + +subst.c + - parameter_brace_find_indir: new function, code from + parameter_brace_expand_indir that looks up the indirectly-referenced + variable, but does not expand it + - parameter_brace_expand_indir: call parameter_brace_find_indir to + look up indirected variable reference + - get_var_and_type: call parameter_brace_find_indir if it looks like we + are trying to manipulate an indirect variable reference like + ${!b%%foo}. This makes a difference if !b references an array + variable. Bug report from Dan Douglas + + 7/6 + --- +lib/sh/casemod.c + - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX, + since cval can convert something to a wchar_t greater than UCHAR_MAX. + Fixes bug reported by Tomasz Tomasik + + 7/8 + --- +lib/readline/history.c + - add_history_time: if history_length == 0, referencing history_length + - 1 will result in an array bounds error, so make history_length be + at least 1 before going on. Fixes bug reported by Geng Sheng Liu + + +builtins/setattr.def + - show_func_attributes: display definition (if NODEFS argument is 0) and + attributes for a particular function; used by `declare -fp name' + +builtins/declare.def + - declare_internal: call show_func_attributes if -f supplied with -p. + Fixes inconsistency observed by Linda Walsh + +builtins/common.h + - new extern declaration for show_func_attributes + +builtins/read.def + - read_builtin: check the first supplied variable name for validity + before attempting to read any input, since we know we will have to + at least use that one. Don't check any other names yet. Suggested + by jidanni@jidanni.org + + 7/10 + ---- +redir.c + - do_redirection_internal: when closing a file descriptor with + r_close_this ([n]<&-) count close errors as redirection errors if + errno ends up as EIO or ENOSPC. Originally reported back in April + 2012 by Andrey Zaitsev + + 7/11 + ---- +redir.c + - do_redirection_internal: before calling check_bash_input, make sure + that we don't call check_bash_input for an asynchronous process that + is replacing stdin with something else. The seek backwards affects + the parent process as well, since parents and children share the + file pointer. Fixes problem originally reported in March 2013 by + Martin Jackson + + 7/13 + ---- +doc/{bash.1,bashref.texi} + - slight change to add a description of `shopt -o' suggested by Bruce + Korb + + 7/19 + ---- +lib/readline/histfile.c + - history_do_write: if close returns < 0, make sure we restore the + backup history file and return a non-zero value + - history_truncate_file: if write or close return < 0, make sure we + return a non-zero value + +[bash-4.3-beta frozen] + + 7/21 + ---- +lib/readline/isearch.c + - rl_display_search: now takes an entire search context flags word as + the second argument, instead of just reverse flag; changed callers + - rl_display_search: if the search has failed, add `failed ' to the + beginning of the search prompt + - _rl_isearch_dispatch: if the search has failed, display the entire + search string with an indication that the search failed but with the + last matching line. Suggested by jidanni@jidanni.org + +command.h + - W_ASSIGNINT: new word flag; used internally for make_internal_declare + and set by fix_assignment_words + +execute_cmd.c + - fix_assignment_words: set W_ASSIGNINT if compound assignment and -i + given as option. We don't do anything with the value yet + +subst.c + - shell_expand_word_list: rework the way the option list that is + passed to make_internal_declare is created + + 8/1 + --- +doc/{bash.1,bashref.texi} + - minor changes to description of $! based on a report from Chris + Down + +arrayfunc.c + - assign_array_element_internal: before trying to get an array's max + index to process a negative subscript, make sure the array exists. + Bug report from Geir Hauge + + 8/2 + --- +arrayfunc.c + - assign_array_element_internal: before using array_max_index() when + processing a negative subscript, make sure the variable is an array. + if it's not, use 0 as array_max_index assuming it's a string. + Fixes bug report from Geir Hauge + + 8/3 + --- +Makefile.in + - pcomplete.o: add dependency on $(DEFDIR)/builtext.h. Suggested by + Curtis Doty + + 8/5 + --- +lib/glob/sm_loop.c + - strcompare: short-circuit and return FNM_NOMATCH if the lengths of the + pattern and string (pe - p and se - s, respectively) are not equal + - strcompare: don't bother trying to set *pe or *se to '\0' if that's + what they already are. Fixes bug reported by Geir Hauge + + + 8/6 + --- +doc/{bash.1,bashref.texi},builtins/hash.def,lib/readline/doc/rluser.texi + - minor typo changes from Geir Hauge + +bultins/help.def + - show_longdoc: avoid trying to translate the empty string because it + often translates to some boilerplate about the project and + translation. Report and fix from Geir Hauge + + 8/8 + --- +builtins/help.def + - help_builtin: try two passes through the list of help topics for each + argument: one doing exact string matching and one, if the first pass + fails to find a match, doing string prefix matching like previous + versions. This prevents `help read' from matching both `read' and + `readonly', but allows `help r' to match everything beginning with + `r'. Inspired by report from Geir Hauge + + 8/13 + ---- +builtins/fc.def + - fc_builtin,fc_gethnum: calculate `real' end of the history list and + use it if -0 is specified as the beginning or end of the history + range to list. Doesn't work for fc -e or fc -s by design. Feature + requested by Mike Fied + + 8/16 + ---- +trap.c + - _run_trap_internal: use {save,restore}_parser_state instead of + {save,restore}_token_state. It's more comprehensive + + 8/23 + ---- +doc/bash.1 + - disown: remove repeated text. Report and fix from Thomas Hood + + + 8/25 + ---- +lib/readline/rltty.c + - set_special_char: fix prototype (last arg is rl_command_func_t *) + +sig.c + - set_signal_handler: return oact.sa_handler only if sigaction + succeeds; if it doesn't, return SIG_DFL (reasonable default). From + https://bugzilla.redhat.com/show_bug.cgi?id=911404 + +bashline.c + - attempt_shell_completion: fix to skip assignment statements preceding + command name even if there are no programmable completions defined. + From https://bugzilla.redhat.com/show_bug.cgi?id=994659 + - attempt_shell_completion: if still completing command word following + assignment statements, do command completion even if programmable + completion defined for partial command name entered so far + + 8/26 + ---- +pcomplete.c + - pcomp_filename_completion_function: make sure rl_filename_dequoting_function + is non-NULL before trying to call it. Bug and fix from + Andreas Schwab + +bashline.c + - bash_command_name_stat_hook: if *name is not something we're going + to look up in $PATH (absolute_program(*name) != 0), just call the + usual bash_filename_stat_hook and return those results. This makes + completions like $PWD/exam[TAB] add a trailing slash + + 9/2 + --- +builtins/read.def + - read_builtin: before comparing what we read to the delim, make sure + we are not supposed to be ignoring the delimiter (read -N). We + set the delim to -1, but it's possible to read a character whose + int value ends up being between -1 and -128. Fixes bug + reported by Stephane Chazelas + +doc/{bash.1,bashref.texi} + - word splitting: crib some language from Posix to make it clear that + characters in IFS are treated as field *terminators*, not field + *separators*. Addresses issue raised by DJ Mills + + +lib/readline/{util.c,rldefs.h} + - _rl_stricmp,_rl_strnicmp: now take const char * string arguments; + changed prototype declarations + + 9/5 + --- +doc/{bash.1,bashref.texi} + - [[: modify description of pattern matching to make it clear that the + match is performed as if the extglob option were enabled. From Red + Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=1002078 + + 9/12 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: if we read an ESC and it's supposed to + terminate the search, make sure we check for typeahead with + _rl_pushed_input_available, since installing a hook function causes + typeahead to be collected in `ibuffer' (input.c). If there is any, + make sure we still use the ESC as a prefix character. Bug and fix + from Mike Miller + + 9/16 + ---- +builtins/{caller,cd,kill,pushd,wait}.def + - builtin_usage(): make sure call to this sets return status to + EX_USAGE + + 9/18 + ---- +terminal.c + - rl_change_environment: new application-settable variable; if non- + zero (the default), readline will modify LINES and COLUMNS in the + environment when it handles SIGWINCH + - _rl_get_screen_size: if rl_change_environment is non-zero, use setenv + to modify LINES and COLUMNS environment variables + +readline.h + - rl_change_environment: new extern declaration for applications + + 9/22 + ---- +configure.ac + - relstatus: bumped version to bash-4.3-beta2 + + 9/24 + ---- + +lib/readline/readline.c + - bind_arrow_keys_internal: added more key bindings for the numeric key + pad arrow keys on mingw32. Patch from Pierre Muller + + + 10/19 + ----- + +bashline.c + - maybe_restore_tilde: version of restore_tilde that honors `direxpand'; + calls restore_tilde after saving directory expansion hook if + necessary. Report from Andreas Schwab + +builtins/cd.def + - -@: new option, allows cd to use `extended attributes' present in + NFSv4, ZFS; idea taken from ksh93. Attributes associated with a + file are presented as a directory containing the attributes as + individual files. Original patch contributed by Cedric Blancher + + + 10/20 + ----- +aclocal.m4 + - BASH_CHECK_MULTIBYTE: check for wcwidth being broken with unicode + combining characters needs a value to use when cross-compiling. + Bug report from Bert Sutherland + +doc/{bash.1,bashref.texi} + - document new -@ option to cd builtin + + 10/28 + ----- +lib/glob/{{gmisc,glob}.c,glob.h} + - extglob_pattern renamed to extglob_pattern_p, declared in glob.h + +subst.c + - expand_word_internal: typo fix: case to fix " $@\ " bug in bash-4.2 + had a typo (& isexp instead of &&) + + 10/29 + ----- +input.c + - getc_with_restart: make sure local_index and local_bufused are + reset to 0 before returning EOF, in case we are running an interactive + shell without line editing and ignoreeof is set. Report and fix + from Yong Zhang + +lib/readline/search.c + - _rl_nsearch_init: take out extra third argument to rl_message; it + only matches prototype (and maybe format) in cases where + PREFER_STDARG and USE_VARARGS are both undefined, which is rare + + 10/31 + ----- +subst.c + - process_substitute: when opening the named pipe in the child, open + without O_NONBLOCK to avoid race conditions. Happens often on AIX. + Bug report and fix from Michael Haubenwallner + + +builtins/ulimit.def + - RLIMIT_NTHR: if RLIMIT_PTHREAD is not defined, but RLIMIT_NTHR is, + use RLIMIT_NTHR (NetBSD) + + 11/5 + ---- +locale.c + - set_default_locale_vars,set_locale_var: if TEXTDOMAINDIR has been + set, and default_dir has a non-null value, call bindtextdomain(3) + when TEXTDOMAIN is assigned a value. Fixes problem reported by + Michael Arlt + + 11/6 + ---- +builtins/cd.def + - cdxattr: only create synthetic pathname in `buf' if NDIRP argument + is non-null + - change_to_directory: if we have specified -@ and cdxattr returns + failure, fail immediately. Fixes bug reported by Joshuah Hurst + + + 11/12 + ----- +redir.c + - print_redirection: change r_err_and_out (&>) and its append form, + r_append_err_and_out (&>>) cases to separate redirection operator + from filename by a space, in case we have a process substitution. + Fixes bug reported by admn ombres + + 11/15 + ----- +execute_cmd.c + - execute_simple_command: don't close process substitution fds until + we are finished executing any current shell function. Partial fix + for bug reported by John Dawson + +support/shobj-conf + - add support for Darwin 13 (Mac OS X 10.9, Mavericks). Based on a + report by Ludwig Schwardt + + 11/20 + ----- +[bash-4.3-rc1 frozen] + + 11/24 + ----- +builtins/printf.def + - bind_printf_variable: make sure that the variable assigned to is + no longer marked as invisible. Fixes bug reported by NBaH + + + 11/28 + ----- +jobs.c + - delete_old_job: fix off-by-one error in job index in call to + internal_warning. Bug report from Peter Cordes + + 11/30 + ----- +doc/bashref.texi + - add string to description of special parameters with name of + special parameter prefixed by a $, so you can search for $#, + for instance + + 12/2 + ---- +lib/readline/{histexpand.c + - get_history_event: account for current_history() possibly returning + NULL. Report and fix from Pankaj Sharma + + + 12/11 + ----- + +lib/readline/parse-colors.c + - get_funky_string: don't call abort if we see something we can't + parse; just return an error + - _rl_parse_colors: if we encounter an error while parsing $LS_COLORS + we need to leave _rl_color_ext_list as NULL after freeing its + elements, then turn off _rl_colored_stats. Report and fix from Martin + Wesdorp + + 12/13 + ----- + +lib/readline/parse-colors.c + - _rl_parse_colors: if we encounter an unrecognized prefix, throw an + error but try to recover and go on to the next specification + +variables.c + - make_local_variable: for new variables this function creates, set + the att_invisible attribute. All callers from declare_internal. + Indirectly, this is a fix for bug with `declare -n var; var=foo;' + reported by Pierre Gaston + - bind_variable: if assigning to nameref variable that doesn't have + a value yet (e.g., with `declare -n var; var=foo'), don't try to + use the unset name. Fixes a segfault reported by Pierre Gaston + + +execute_cmd.c + - execute_command_internal: make sure last_command_exit_value is set + to 0 after any command executed in the background. Fixes bug + reported by Martin Kealey + + 12/17 + ----- +support/config.{guess,sub} + - updated to latest versions from git + + 12/19 + ----- +parse.y + - struct STRING_SAVER: now has a new `flags' element, to identify the + caller: alias expansion, double-paren parsing, or parse_and_execute + - push_string: now sets flags to PSH_ALIAS if `ap' argument is non-NULL + - push_string: now doesn't attempt to call strlen on a NULL string to + set shell_input_line_size + - parser_expanding_alias, parser_save_alias, parser_restore_alias: new + functions to provide an external interface to push_string and + pop_string; parser_save_alias sets flags element to PSH_SOURCE (could + be renamed PSH_EXTERN someday) + - shell_getc: when yy_getc returns '\0', instead of just testing + whether the pushed_string_list is not-empty before popping it, don't + pop if if the saved string has flags PSH_SOURCE, indicating that + parse_and_execute set it before setting bash_input to the string. + We should continue reading to the end of that string before popping + back to a potential alias. Partial solution for the problem of aliases + with embedded newlines containing `.' commands being executed out of + order reported by Andrew Martin + - shell_getc: when yy_getc returns '\0' and there is a saved string of + type PSH_SOURCE, restart the read without popping the string stack + if we have not read to the end of bash_input.location.string. Rest + of fix for out-of-order execution problem + +externs.h + - parser_expanding_alias, parser_save_alias, parser_restore_alias: new + extern function declarations + +builtins/evalstring.c + - pe_prologue: if the parser is expanding an alias, make sure to add + an unwind-protect to restore the alias; undoes the work that will be + performed by parse_and_execute/parse_string + - parse_and_execute,parse_string: after calling push_stream to save + bash_input, check whether or not the parser is currently expanding + an alias (parser_expanding_alias() != 0). If it is, we want to save + that string in the pushed_string_list, which we do with + parser_save_alias. + + 12/23 + ----- +execute_cmd.c + - execute_for_command: make sure to set line_number before expanding + the word list, so expansion errors have the right line number. + From a report from Ben Okopnik + +expr.c + - exp2: save token pointer before calling readtok(), arrange to use + saved token pointer when printing error token on a division by 0 + error + + 12/27 + ----- +lib/readline/display.c + - rl_redisplay: when calculating effects of invisible characters in a + prompt that is split across physical screen lines to set the indices + of linebreaks, don't bother testing local_prompt_prefix (line 751). + That prefix doesn't matter when calculating prompt visible and + invisible characters. Fixes problem reported by Jinesh Choksi + + +Makefile.in + - install: make sure to use $(DESTDIR) when installing OTHER_DOCS. + Report and fix from Matthias Klose + +doc/texinfo.tex + - updated to version of 2013-09-11 + + 12/28 + ----- +lib/readline/undo.c + - rl_do_undo: if we are undoing from a history entry (rl_undo_list == + current_history()->data), make sure the change to rl_line_buffer is + reflected in the history entry. We use the guts of + rl_maybe_replace_line to do the work. Fixes problem reported by + gregrwm + + 12/30 + ----- +sig.c + - sigint_sighandler: if we get a SIGINT (and this signal handler is + installed) while the wait builtin is running, note that we received + it in the same way as jobs.c:wait_sigint_handler and return. The + various wait_for functions will look for that with CHECK_WAIT_INTR. + This fixes the wait builtin not being interruptible in an interactive + job control shell + + 12/31 + ----- +trap.c + - set_signal_hard_ignored: rename set_signal_ignored to this, since it + both sets original_signals[sig] and sets the HARD_IGNORE flag + - set_signal_ignored: new function, now just sets original_signals[sig] + +trap.h + - set_signal_hard_ignored: new external declaration + +sig.c + - initialize_terminating_signals: call set_signal_hard_ignored instead + of set_signal_ignored for signals with disposition SIG_IGN when the + shell starts + +execute_cmd.c + - setup_async_signals: make sure we get the original dispositions for + SIGINT and SIGQUIT before starting the subshell, and don't call + set_signal_ignored because that sets original_signals[sig]. If we + don't, subsequent attempts to reset handling using trap will fail + because it thinks the original dispositions were SIG_IGN. Posix + interpretation 751 (http://austingroupbugs.net/view.php?id=751) + + 1/2/2014 + -------- +lib/sh/stringvec.c + - strvec_mcreate, strvec_mresize: versions of create and resize that + use malloc and realloc, respectively, instead of xmalloc/xrealloc + +braces.c + - expand_amble,mkseq: use strvec_mcreate/strvec_mresize so we can + catch and handle memory allocation failures instead of aborting + with the xmalloc/xrealloc interface + +lib/sh/strdup.c + - strdup replacement function for ancient systems that don't have it + +lib/sh/itos.c + - mitos: new function, itos that uses strdup instead of savestring + +externs.h + - strvec_mcreate/strvec_mresize: new extern declarations + - mitos: new extern declaration + +configure.ac + - bash version moved to 4.3-rc2 + + 1/6 + --- +doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} + - separate the description of what happens when readline reads the + tty EOF character from the description of delete-char, leaving a + note in the delete-char description about common binding for ^D. + From suggestion by Parke + +lib/readline/doc/{version.texi,history.3,*.texi} + - updated email addresses and copyright dates + + 1/7 + --- +variables.c + - delete_var: new function, just removes a variable from a hash table + and frees it, without doing anything else + - make_variable_value: if we are trying to assign to a nameref variable, + return NULL if the value is null or the empty string or not a valid + identifier + +variables.h + - delete_var: new extern declaration + +subst.h + - ASS_NAMEREF: new define for assignments, means assigning to a nameref + variable + +builtins/declare.def + - declare_internal: if we are creating and assigning to a nameref + variable, make sure the value is a valid variable name (checks done + by make_variable_value via bind_variable_value) and display an + error message, deleting the variable we just created, if it is not. + Fixes bug reported by Peggy Russell + + 1/9 + --- +builtins/declare.def + - declare_internal: turning on nameref attribute for an existing + variable turns off -i/-l/-u/-c attributes (essentially the ones + that cause evaluation at assignment time) for ksh93 compat + +builtins/setattr.def + - show_name_attributes: if asked to display attributes and values for + a nameref variable, don't follow the nameref chain to the end. More + ksh93 compat + + 1/10 + ---- +trap.c + - _run_trap_internal: use {save,restore}_parser_state instead of + {save,restore}_token_state, like in run_pending_traps(); don't + need to save and restore last_command_exit_value as a result + - _run_trap_internal: call {save,restore}_pipeline like in + run_pending_traps() + - run_pending_traps: since we no longer run traps in a signal handler + context, do not block and unblock the trapped signal while the + trap is executing + - run_pending_traps: allow recursive invocations (basically, running + traps from a trap handler) with only a warning if the shell is + compiled in debug mode. If a caller doesn't want this to happen, + it should test running_trap > 0. signal_in_progress (sig) only works + for the signals the shell handles specially + +bashline.c + - bash_event_hook: make sure we clean up readline if interrupt_state + is set, not only when SIGINT is not trapped. check_signals_and_traps + will call check_signals, which calls QUIT, which will longjmp back + to top_level, running the interrupt trap along the way. Fixes the + problem of signal handlers being reset out from under readline, and + not being set properly the next time readline is called, because + signals_set_flag is still set to 1. XXX - might need to do this + for other signals too? + + 1/11 + ---- +subst.h + - SD_GLOB: new define for skip_to_delim; means we are scanning a + glob pattern. + +subst.c + - skip_to_delim: if flags include SD_GLOB, assume we are scanning a + glob pattern. Currently only used to skip bracket expressions + which may contain one of the delimiters + + 1/12 + ---- +subst.c + - parameter_brace_expand: when expanding $@ as part of substring + expansion, pattern substitution, or case modification, don't turn + on the QUOTED_NULL flag. The code that constructs the word to be + returned from expand_word_internal expects a different code path + when $@ is being expanded. Fixes bug reported by Theodoros + V. Kalamatianos + + 1/19 + ---- +subst.c + - list_dequote_escapes: new function; analogue of list_quote_escapes + +pathexp.c + - quote_string_for_globbing: fix case where unescaped ^A is last char + in string; need to pass it through unaltered instead of turning it + into a bare backslash + - quote_string_for_globbing: when quoting for regexp matching in [[, + don't treat backslash as a quote character; quote the backslash as + any other character. Part of investigation into reports from + Eduardo A. Bustamante López + + 1/25 + ---- +builtins/gen-helpfiles.c + - write_helpfiles: add prototype + - make sure to #undef xmalloc/xfree/xrealloc/free if USING_BASH_MALLOC + is defined. the code does not use them, and we don't link against + xmalloc.o. Report from Linda Walsh + +Makefile.in + - variables.o: add dependency on builtins/builtext.h; helps with + parallel builds. Report from Linda Walsh + +support/shobj-conf + - darwin: combine the stanzas into one that will not require them to + be updated on each Mac OS X release. Report and fix from Max Horn + + + 1/27 + ---- +support/shobj-conf + - darwin: changed the install_name embedded into the shared library + to contain only the major version number, not the minor one. The + idea is that the minor versions should all be API/ABI compatible, + and it is better to link automatically with the latest one. Idea + from Max Horn + + 1/29 + ---- +[bash-4.3-rc2 released] + + 1/30 + ---- +lib/readline/readline.h + - rl_clear_history, rl_free_keymap: add extern declarations. Report + from Hiroo Hayashi + +general.c + - include trap.h for any_signals_trapped() prototype + +lib/sh/unicode.c + - include for sprintf prototype + + 1/31 + ---- +execute_cmd.c + - execute_simple_command: only posix-mode shells should exit on an + assignment failure in the temporary environment preceding a special + builtin. This is what the documentation and code comments have + always said + - execute_simple_command: make sure redirection errors, word expansion + errors, and assignment errors to Posix special builtins cause a + non-interactive posix mode shell to exit. Previously the shell + would not exit if the failed special builtin was on the LHS of || + or && + +pathexp.c + - quote_string_for_globbing: when quoting a regular expression + (QGLOB_REGEXP), allow an unquoted backslash to pass through + unaltered. Don't use it as a quote character or quote it. More + investigation from 1/24 and report by Mike Frysinger + + - quote_string_for_globbing: when quoting a regular expression + (QGLOB_REGEXP), turn CTLESC CTLESC into CTLESC without adding a + backslash to quote it. We should not have to quote it because it is + not a character special to EREs. More investigation from 1/24 + +lib/glob/glob.c + - glob_testdir: now takes a second flags argument (currently unused); + changed prototype and callers + + 2/1 + --- +lib/glob/glob.c + - glob_testdir: if flags argument includes GX_ALLDIRS (globstar), use + lstat so we skip symlinks when traversing the directory tree. + Originally reported by Chris Down + + 2/2 + --- +lib/readline/undo.c + - rl_do_undo: make sure CUR is non-zero before dereferencing it to + check cur->data against rl_undo_list. Report and fix from + Andreas Schwab + +doc/{bash.1,bashref.texi} + - added slight clarifying language to the description of $*, + describing what happens when the expansion is not within double + quotes + + 2/4 + --- +test.c + - unary_test: add code to -v case so that it interprets `bare' array + references (foo[1]) and returns true if that index has a value + + 2/5 + --- +trap.c + - restore_default_signal: fix SIGCHLD special case for SIG_TRAPPED flag + off but SIG_INPROGRESS mode set and handler IMPOSSIBLE_TRAP_HANDLER; + continue with resetting handler in this case. maybe_set_sigchld_trap + will check these things before resetting sigchld trap from + run_sigchld_trap. Fixes (apparently long-standing?) problem reported + by Alexandru Damian + + 2/6 + --- +lib/sh/strtrans.c + - ansic_quote: fixed a bug when copying a printable character that + consumes more than one byte; byte counter was not being incremented. + Bug report from jidanni@jidanni.org + + 2/7 + --- +input.c + - getc_with_restart: if read(2) returns -1/EINTR and interrupt_state or + terminating_signal is set (which means QUIT; will longjmp out of this + function), make sure the local buffer variables are zeroed out to + avoid reading past the end of the buffer on the next call. Bug report + from Dan Jacobson + + 2/9 + --- +bashline.c + - command_word_completion_function: if a directory in $PATH contains + quote characters, we need to quote them before passing the candidate + path to rl_filename_completion_function, which performs dequoting on + the pathname it's passed. Fixes bug reported by Ilyushkin Nikita + + + 2/11 + ---- +parse.y + - xparse_dolparen: save and restore shell_eof_token around call to + parse_string, intead of just leaving it set to ')' + - shell_getc: when -v is set, only print the command line when + shell_eof_token is 0, so we don't print it multiple times when + recursively entering the parser to parse $(...) commands. Fixes + bug reported by Greg Wooledge + +[changed release status to 4.3-release] + + 2/13 + ---- +lib/sh/strtrans.c + - ansic_quote: handle case where mbrtowc reports that the multibyte + sequence is incomplete or invalid. Fixes bug reported by + Eduardo A. Bustamante López + + 2/14 + ---- +variables.c + - find_variable_nameref_context: fix a problem that caused the loop + to go one context too close to the global context. In some cases, + simple variable assignment would set a variable in the global + context instead of a local context. Bug report from + Geir Hauge + + 2/26 + ---- +[bash-4.3 released] + + 2/27 + ---- +aclocal.m4 + - broken wcwidth check: fix typo reported by David Michael + + + 2/28 + ---- +support/bashbug.sh + - add ${BUGADDR} to error message printed if sending mail fails + +trap.c + - _run_trap_internal: don't call {save,restore}_pipeline if running + DEBUG trap; run_debug_trap calls them itself. Fixes bug reported + by Moe Tunes + +test.c + - unary_test: fix 'R' case by using find_variable_noref instead of + find_variable + - test_unop: add back missing 'R' case. Fixes bug reported by + NBaH + + 3/2 + --- +jobs.c + - end_job_control: if job control is active, we changed the terminal's + process group, so make sure we restore it. Fixes bug reported by + Eduardo A. Bustamante López + + 3/7 + --- +pcomplete.c + - pcomp_curtxt: new variable, holds the original text to be completed + as passed to the programmable completion code + - pcomp_filename_completion_function: if we are running compgen + (presumably in a shell function completion) and performing readline + completion, check the word being completed. If it's not empty, but + the original word passed to the programmable completion code is an + empty string (""), call a dequoting function if one is available. + This compensates for an assumption in bash-completion. Reported by + Albert Shih + +lib/readline/readline.c + - _rl_dispatch_subseq: when deciding whether or not to set vi mode's + idea of the last command, use whether or not the dispatching keymap + is vi_movement_keymap instead of the key sequence length. The `c', + `d', and `y' commands all take motion commands as `arguments' and + will produce key sequences longer than 1 character. The arrow keys + will end up dispatching out of a different keymap, so the test will + prevent arrow keys from setting the last command (the problem in + bash-4.2). Bug report from Daan van Rossum + +lib/readline/vi_mode.c + - _rl_vi_motion_command: convenience function to test whether a key is + a vi-mode motion command + +lib/readline/rlprivate.h + - _rl_vi_motion_command: extern declaration + +parse.y + - parse_matched_pair: we should not skip processing single quotes in + posix mode if dolbrace_state == DOLBRACE_QUOTE2 (pattern + substitution). Fixes bug reported by David Sines + + + 3/10 + ---- +lib/readline/readline.c + - _rl_dispatch_callback: treat a return value of -1 as the end of + a command dispatch sequence if the current context doesn't + indicate that we're reading a multi-key sequence + ((cxt->flags & KSEQ_SUBSEQ) == 0). Turn off the multikey flag + and free the context chain in this case. Fixes one bug reported + by Felix Yan to bug-readline list + - _rl_dispatch_callback: treat a return value of > 0 the same as 0 + and return from the function, since only values < 0 cause us to + simulate recursion. Rest of fix for bug tracked down by + Anatol Pomozov + + 3/11 + ---- + +execute_cmd.c + - execute_in_subshell: if a longjmp occurs, set result to + EXECUTION_FAILURE only if last_command_exit_value == EXECUTION_SUCCESS; + use value of last_command_exit_value otherwise. Fixes cosmetic + issue reported by Dennis Lambe Jr. + +doc/bash.1 + - shell-kill-word and shell-backward-kill-word should be documented + as unbound by default. Report from Oliver Hartley + + +trap.c + - run_pending_traps: save value of $? before running trap commands in + trap_saved_exit_value, like run_exit_trap + - _run_trap_internal: save value of $? before running trap commands in + trap_saved_exit_value, like run_exit_trap + +builtins/common.c + - get_exitstat: when running `return' in a trap action, and it is not + supplied an argument, use the saved exit status in + trap_saved_exit_value. Fixes Posix problem reported by + Eduardo A. Bustamante López + + 3/13 + ---- +lib/sh/shquote.c + - sh_contains_quotes: new function, returns true if a given string + contains any of the shell quote characters (single quote, double + quote, or backslash) + +externs.h + - sh_contains_quotes: new extern declaration + +pcomplete.c + - pcomp_filename_completion_function: more changes for the benefit of + bash-completion: if the argument is not the same as the original + argument passed to the programmable completion code (pcomp_curtxt), + and we are being run by compgen as part of a completion, dequote the + argument as bash-completion expects. Fix for the complete-word- + with-quoted-special-chars problem with bash-completion + + 3/17 + ---- +execute_cmd.c + - execute_intern_function: when in posix mode, make defining a function + with the same name as a special builtin a fatal error only when the + shell is not interactive. Interactive shells display an error + message and go on. From a discussion with Doug McIlroy + + + 3/18 + ---- +arrayfunc.c + - assign_compound_array_list: when using expand_assignment_string_to_string + to expand the value in a ( [x]=y ) compound assignment, make sure + that we convert 0x0 to "" when expanding [x]= so it doesn't appear as + if the index is unset. Fixes bug reported by Geir Hauge + + +builtins/common.c + - get_exitstat: update fix of 3/11 to allow the DEBUG trap to use the + current value of $? instead of the value it had before the trap + action was run. This is one reason the DEBUG trap exists, and + extended debug mode uses it. Might want to do this only in Posix + mode + +doc/{bash.1,bashref.texi} + - return: add language cribbed from Posix saying what happens when + return is run without an argument from a trap, including the DEBUG + trap exception + + 3/19 + ---- +lib/glob/gmisc.c + - extglob_pattern_p: make sure ?(patlist) is flagged as an extglob + pattern + +lib/glob/glob.c + - extglob_skipname: rewrite to handle patterns that begin but do not + end with an extglob pattern; change test for easy case and loop + through patterns accordingly. Fixes problem with matching filenames + with a leading dot reported by Stephane Chazelas + + - wextglob_skipname: make analogous changes + + 3/20 + ---- +Makefile.in + - pass -DDEBUG down to builds in readline and history directories + +lib/readline/util.c + - _rl_trace and related functions are now only compiled in if DEBUG + is defined + +lib/readline/Makefile.in + - substitute @DEBUG@ and pass -DDEBUG, if necessary, to compilation + in LOCAL_CFLAGS + + 3/21 + ---- +parse.y + - shell_getc: when checking whether or not to reallocate + shell_input_line to add trailing newline, don't try to subtract from + shell_input_line_size. size_t is unsigned, so if its value is less + than 3 (like, say, 2), size-3 is a very large number and the string + will not be reallocated. Use len+3 > size instead of len > size-3. + Fixes bug reported in + https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1295467 + + 3/27 + ---- +lib/readline/display.c + - _rl_clean_up_for_exit: don't bother to call _rl_move_vert to whatever + readline thinks the last displayed line is if it's 0. Two reasons: a + minor optimization, and it protects against unwanted moving if this + function is called twice, as it is when ^C is pressed. Fixes bug + reported by Egmont Koblinger + + 3/28 + ---- +bashline.c + - invalid_completion: new function, used to identify attempts to + complete words that are syntax errors + - attempt_shell_completion: if invalid_completion returns true for a + word in a command position, punt on all completions. Fixes cosmetic + issue reported by Uwe Storbeck + - attempt_shell_completion: add clause so that in_command_position + remains set to 1 for an empty word following a command separator like + (, &, or | + +lib/readline/kill.c + - rl_yank, rl_yank_nth_arg_internal: don't return -1 from bindable + functions, return 1 instead + +lib/readline/text.c + - rl_rubout, _rl_rubout_char, rl_delete, rl_change_case, + rl_transpose_chars, rl_transpose_words, _rl_set_mark_at_pos, + rl_exchange_point_and_mark, _rl_insert_next, _rl_char_search, + _rl_char_search_internal: + don't return -1 from bindable functions, return 1 instead + +lib/readline/vi_mode.c + - rl_vi_end_word, rl_vi_rubout, rl_vi_delete, rl_vi_char_search, + rl_vi_match, _rl_vi_set_mark, _rl_vi_goto_mark: + don't return -1 from bindable functions, return 1 instead + +lib/readline/macro.c + - rl_start_kbd_macro, rl_end_kbd_macro: + don't return -1 from bindable functions, return 1 instead + +builtins/setattr.def + - set_var_attribute: honor setting of no_invisible_vars when setting + att_invisible on a variable + - include "../flags.h" for no_invisible_vars + +builtins/declare.def + - declare_internal: honor setting of no_invisible_vars when setting + att_invisible on a variable + - include "../flags.h" for no_invisible_vars + +Makefile.in,builtins/Makefile.in + - make sure declare.o and setattr.o depend on flags.h + +execute_cmd.c + - decpoint: new function, returns locale's decimal point or `.' default + - mkfmt: use decpoint() to get decimal point instead of unconditionally + using `.'. Fixes bug reported by Andrey Tataranovich + in debian bug 741669 + + 4/10 + ---- +lib/readline/rltypedefs.h + - add back old Function/VFunction/etc typedefs, since other packages + (python, samba) use them. Mark as deprecated using gcc and clang + attributes. Report and fix from Max Horn + + 4/14 + ---- +jobs.c + - run_sigchld_trap: unwind-protect value of this_shell_builtin, since + it matters in some cases whether or not we are running `wait' or + `eval'. Fixes bug reported by Eduardo A. Bustamante López + + + 4/18 + ---- +shell.h + - sh_parser_state_t: add `need_here_doc' flags member, since + xparse_dolparen (via parse_command) sets it to 0 + +parse.y + - gather_here_documents: make sure need_here_doc is > 0, since we + don't want to just decrement it forever if it ends up < 0. Partial + fix for bug reported by Jared Yanovich + - {save,restore}_parser_state: save and restore need_here_doc flag. + Rest of fix for bug reported by Jared Yanovich + + 4/19 + ---- +subst.c + - cond_expand_word: since we are not supposed to be performing word + splitting here, set expand_no_split_dollar_star to 1 in addition to + setting W_NOSPLIT2 + - expand_word_internal: if we have a case where we have an unquoted + $@ but we are in a case where we don't want to split (W_NOSPLIT2), + make sure we return a list consisting of a single word with the + arguments separated by spaces and don't do word splitting. Fixes + bug reported by Greg Wooledge from an IRC + discussion + +builtins/hash.def + - print_portable_hash_info: single-quote pathnames and hashed filenames + that contain shell metacharacters. Fixes bug reported by + in debian bash bug #739853 + + 4/20 + ---- +lib/readline/display.c + - When using horizontal scrolling, the redisplay code erases too much + of the line containing successful results, so make sure we only + erase to the end of the line after making sure we move the cursor + to the end. Fixes bug reported by + + 4/23 + ---- +{bashhist,bashline}.c +builtins{bind,help,type}.def +lib/glob/glob.c, lib/intl/{loadmsgcat,localealias}.c,lib/sh/mktime.c + - fixes to memory leaks uncovered by coverity scan + + 4/24 + ---- +{bashhist,subst,redir,assoc,jobs,array,trap}.c +lib/intl/l10flist.c +builtins/complete.def + - fixes to memory leaks and other resource usage problems uncovered by + coverity scan + +redir.c + - do_redirection_internal: if dup2 fails (presumably because of a + resource limit), close the file descriptor we opened before returning + error + + 4/25 + ---- +config-top.h + - DEFAULT_BASHRC: new define with the name of the default shell + startup file + +bashline.c + - bash_directory_completion_matches: don't dequote the directory name. + If rl_completion_found_quote is non-zero, readline will dequote the + filename itself. Fixes bug reported by Clark Wang + + + 4/27 + ---- +subst.c + - parameter_brace_expand_rhs: if parameter_brace_find_indir returns + NULL or "", or if it returns something that is not a valid identifier, + report an error and return &expand_wdesc_error so the error can + propagate up. Fixes bug reported by Andre Holzhey + + + 4/29 + ---- +subst.c + - parameter_brace_substring: don't short-circuit right away if the + value is NULL but we are looking at the positional parameters. Part + of fix for bug reported by Pierre Gaston + - pos_params: if there are no positional parameters, only short-circuit + if we are looking for $1 and above. Rest of fix for bug reported + by Pierre Gaston + +subst.h + - SD_NOPROCSUB: new flag for skip_to_delim, means to not allow any + process subsitutions (should not have overloaded SD_NOSKIPCMD) + +subst.c + - skip_to_delim: honor SD_NOPROCSUB flag + +make_cmd.c + - make_arith_for_expr: set W_NOPROCSUB flag in the created word + - make_arith_for_command: set SD_NOPROCSUB in the flags argument to + skip_to_delim so we don't treat <( or >( as a process substitution + (we won't evaluate them in eval_arith_for_expr anyway). Fixes + bug reported by Pierre Gaston + + 5/1 + --- +lib/glob/gmisc.c + - glob_dirscan: new function, takes a pattern and a directory separator + argument and advances the pattern to the last occurrence of the + separator. Like strrchr, but understands extended glob patterns and + uses glob_patscan to skip over them + +lib/glob/glob.c + - extglob_skipname: if the extended globbing pattern is invalid, don't + skip the name + - glob_filename: if there is a slash in the pattern to be matched, and + extglob is enabled, use glob_dirscan to find the real last occurrence + of `/' to avoid being confused by slashes in extglob patterns. Fix + for bug reported by Pierre Gaston + + 5/6 + --- +variables.c + - make_local_variable: only set the att_invisible attribute if + no_invisible_vars isn't set + - find_variable_for_assignment: new function, intended to be called by + code that eventually wants to assign a value to the variable; will not + skip invisible variables; currently identical to find_variable + - find_variable_no_invisible: new function, finds the first visible + instance of variable with a given name in the variable context chain; + eventually will be used to replace find_variable; separate right now + for testing + +variables.h + - find_variable_for_assignment: extern declaration + - find_variable_no_invisible: extern declaration + + 5/7 + --- +variables.c + - make_local_variable: don't clear `invisible' attribute if we are + returning an existing local variable at the right context. Let the + upper layers do that. Fixes bug reported by Dan Douglas + + + 5/8 + --- +lib/readline/input.c + - rl_getc: call RL_CHECK_SIGNALS if a read(2) is interrupted (-1/EINTR) + by SIGALRM or SIGVTALRM (placeholder for non-keyboard-generated + signals of interest) + +builtins/read.def + - edit_line: call bashline_set_event_hook and + bashline_reset_event_hook around call to readline(), so the right + signal handling happens + - read_builtin: make sure we add an unwind_protect call to + bashline_reset_event_hook. These changes fix bug reported in + https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 + +bashline.c + - bash_event_hook: make sure we clean up the readline state by calling + rl_cleanup_after_signal if sigalrm_seen is non-zero. The read builtin + sets this when it times out + + 5/12 + ---- +doc/{bash.1,bashref.texi} + - clarify language to make it clear that changing attributes of a + nameref variable (e.g., export), actually changes the attributes of + the referenced variable. Fixes omission noted by Jeff Haemer + + +arrayfunc.c + - bind_array_var_internal: make sure ENTRY no longer has invisible + attribute before returning. Fixes bug reported by Geir Hauge + + + 5/22 + ---- +execute_cmd.c + - shell_execve: if execve fails and we return 127 or 126, make sure to + set last_command_exit_value if a call to file_error or report_error + causes the shell to exit. This ensures that the shell exits with + the right value. + + 6/6 + --- +shell.c + - drop_priv_mode: print an error message on setuid() failure, optionally + exit if errno == EAGAIN, as it can be on Linux when RLIMIT_NPROC for + the target user is exceeded. + +config-top.h + - EXIT_ON_SETUID_FAILURE: new settable define, will cause the shell to + exit if setuid fails with errno == EAGAIN + + 6/10 + ---- +parse.y + - time_command_acceptable: fix so time is accepted everywhere the + grammar is looking for a `compound_list'. Fixes bug reported by + Dale Worley + + 6/12 + ---- +subst.c + - clear_fifo_list: new function, clears FDs associated with open pipes + in current FIFO list without closing the file descriptors. Can + possibly be used when shell_execve fails and the shell jumps back + to top_level and we don't want the shell to close the open FIFOs + each time through the read-execute loop. Bug reported by Harald + Koenig + + + 6/16 + ---- +builtins/shopt.def + - compat42: make sure the `compat42' option sets the correct variable + for compatibility level. Fixes bug reported by Ondrej Oprala + + +support/bashbug.sh + - fix typo when echoing $USAGE. Report from Shantanu Kulkarni + + +execute_cmd.c + - shell_execve: before longjmp back to subshell_top_level, clear out the + FIFO fd list by calling clear_fifo_list so the FDs (which we inherited + from our parent) aren't closed every time through the read-eval loop. + Fix for bug reported by Harald Koenig + + 6/18 + ---- +subst.c + - extract_process_subst: add additional argument: xflags, allow callers to + pass flags like extract_command_subst + - extract_process_subst: call xparse_dolparen like command substitution + to avoid problems when parsing commands constructs with embedded open + parens. Fixes bug reported by Tim Friske + +subst.h + - extract_process_subst: modified prototype for extern declaration + + 6/19 + ---- +execute_cmd.c + - execute_pipeline: if running with lastpipe enabled, make sure that we + check whether or not the job id is valid using INVALID_JOB before + calling job_exit_status. the jobs list can get frozen and unfrozen in + the presence of nested pipelines and loops and wait_for can clear a + job table entry. Fixes bug reported by + +jobs.c + - freeze_jobs_list: now returns old value of jobs_list_frozen; unused at + current time + +jobs.h + - freeze_jobs_list: change return value + + 6/20 + ---- +lib/glob/smatch.c + - MEMCHR: single-byte and wide character defines (memchr/wmemchr) + +lib/glob/sm_loop.c + - GMATCH: when the wildcards are the last element of the pattern, make + sure they do not match a string containing a `/' if FNM_PATHNAME is + set in FLAGS + - GMATCH: when recursively calling GMATCH after we see a `*', don't + try to consume the rest of the pattern with `*' if FNM_PATHNAME is + set in FLAGS, just consume up to the next slash and then see whether + or not the rest of the pattern matches. Fixes bug reported by Ian + Kelling + - GMATCH: when processing `*' in the pattern, after skipping consecutive + wildcards, if we hit a literal `/' in the pattern and we're looking + for a pathname, skip characters in the string until we find a `/' + (no slash means the match fails), and try to match the rest of the + pattern against the portion of the string after the next `/'. Picked + up from gnulib/glibc + +pathexp.c + - split_ignorespec: since split_ignorespec gets globbing patterns, + make sure we call skip_to_delim with the SD_GLOB flag so delimiters + that occur within bracket expressions don't delimit the pattern. + Fixes problem with [[:digit:]] in GLOBIGNORE reported by Ian Kelling + + +unwind_prot.c + - unwind_protect_tag_on_stack: new function, returns 1 if unwind-protect + frame corresponding to `tag' argument is on unwind-protect stack + +unwind_prot.h + - unwind_protect_tag_on_stack: extern declaration + + 6/30 + ---- +lib/readline/misc.c + - _rl_revert_all_lines: set entry->data to 0 after assigning it to + rl_undo_list to avoid pointer aliasing problems that would result + in entry->line being freed by an undo. The subsequent free would + be a double free. Report and fix from Jared Yanovich + + +subst.c + - command_substitute: other shells do not appear to inherit the -v + option when reading and executing command substitutions. Reported + by Ondrej Oprala + + 7/1 + --- +config-top.h + - CHECKHASH_DEFAULT: new define that supplies the default value for + check_hashed_filenames (`checkhash' shopt option); still 0 by default + +findcmd.c + - check_hashed_filenames: initialize using CHECKHASH_DEFAULT + +lib/readline/histexpand.c + - history_expand: double quotes can inhibit recognition of the history + comment character if history_quotes_inhibit_expansion is non-zero + +lib/readline/doc/{history.3,hstech.texi} + - history_quotes_inhibit_expansion: expand definition to note that it + inhibits scanning for the history comment character as well; correct + typo to make it clear that it only works on double-quoted strings + +lib/sh/zgetline.c + - add new fourth argument: DELIM, allows delimiter to be something + other than newline (if DELIM != '\n', UNBUFFERED_READ should be + non-zero) + - UNBUFFERED_READ is now fifth argument + - check character against DELIM rather than strictly newline + +externs.h + - zgetline: change function prototype for extern declaration + +builtins/mapfile.def + - mapfile: change calling sequence for zgetline calls + - mapfile_builtin: new -d option: DELIM, like in read builtin + - mapfile_builtin: pass `delim' to mapfile() as new argument; default + to '\n' unless -d option supplied + - mapfile: take new DELIM argument, pass to zgetline + - mapfile: if DELIM != '\n', set unbuffered_read to 1 + +doc/{bash.1,bashref.texi} + - mapfile: document new `-d DELIM' option + + 7/5 + --- +lib/readline/histfile.c + - history_truncate_file: if there is an error writing the truncated + history list back to the history file, use the same strategy as + history_do_write: create a backup file, rename the history file to + the backup file, and restore the original history file from the + backup file name if the write or the close fails. Suggestion from + Chen Gang to bug-readline + +execute_cmd.c + - evalnest, evalnest_max: new variables establishing maximum number of + recursive `eval' calls; current max is 4096 + - execute_builtin: unwind-protect value of evalnest around calls to + eval builtin. Suggested by Oliver Morais + - {initialize_subshell,execute_subshell_builtin_or_function}: reset + evalnest to 0 in a subshell + +builtins/setattr.def + - show_name_attributes: show a variable's attributes even if it's + invisible (don't show any value since it has none). This means that + declare -p var will display VAR's attributes even when var marked + as invisible. Feature request from Peggy Russell + + - show_var_attributes: don't print assignment if array or assoc + attribute is set but variable marked as invisible + +tests/array.right + - special note: changed all declare -a output tests because the shell + will no longer print out values for invisible array variables. This + is a change, but one for correctness: + + declare -a foo='()' + and + declare -a foo + are not equivalent + + 7/22 + ---- +subst.c + - parameter_brace_expand: after calling parameter_brace_expand_indir, + turn off the W_ARRAYIND flag in the word it returns, because there + is no way for it to return the index that should be used, and the + rest of the function assumes that IND is valid if W_ARRAYIND is set. + Fixes bug reported by Corentin Peuvrel + + 8/2 + --- +parse.y + - read_token_word: if we read a character that will end a command + substitution, don't skip over quoted newlines when we read an + additional character to figure out whether it's a two-character + token. This lets the higher layers deal with quoted newlines after + the command substitution. Fixes bug reported by EmanueL Czirai + + + 8/11 + ---- +execute_cmd.c + - execute_pipeline: check whether lastpipe_jid corresponds to a valid + job before calling append_process, for the same reason as fix from + 6/19. Fixes bug reported by + + 8/12 + ---- +lib/sh/unicode.c + - stub_charset: use strncpy instead of strcpy because we are copying + into a local fixed-length buffer. Fixes vulnerability reported by + + +execute_cmd.c + - execute_pipeline: if we don't call append_process, call + wait_for_single_pid to get the status of `lastpid', since that will + check the status of already-reaped processes. Fixes spurious error + message about non-existent process from fix of 8/11 + + 8/15 + ---- +jobs.c + - running_in_background: new variable, keeps track of whether or not we + are running in the background (not perfect yet) + - initialize_job_control: even if we are not turning on job control, + get the terminal pgrp so we can use it later + - {set_job_control,initialize_job_control}: set running_in_background + to 1 if terminal pgrp != shell pgrp + - {stop_pipeline,make_child,wait_for}: if we are running in the + background, don't mess with the terminal's process group; assume that + the parent shell will do that. Fixes bug reported by Greg Wooledge + + +shell.c + - shell_reinitialize: reset running_in_background back to 0 + + 8/24 + ---- +execute_cmd.c + - {execute_connection,execute_command_internal}: make sure that + asynchronous commands always set $? to 0 and are not affected by the + command's exit status being inverted using `!'. Fixes bug reported + by Vincent Lefevre + +lib/readline/display.c + - rl_message: call vsnprintf with full msg_bufsiz, since it counts + one fewer than the buffer length passed as an argument. Bug report + and fix from Dylan Cali + + 8/26 + ---- +builtins/evalstring.c + - evalstring: if CURRENT_TOKEN == yacc_EOF, reset it to newline. This + is instead of calling reset_parser(); that might still be needed. + Fixes bug with eval and a subsequent statement ending with EOF + reported by + +pcomplete.c + - filter_stringlist: when extglob is on, a leading ! in the filter + pattern should be left alone when it introduces a !(pat) pattern; + otherwise it messes up the pattern. Fixes bug reported by David + Korn + + 8/27 + ---- +doc/{bash.1,bashref.texi} + - clarify the behavior of bash when given the -c option, since $0 is + technically not a positional parameter. Bug reported by Stephane + Chazelas + + 8/28 + ---- +lib/readline/history.c + - add_history: use history_max_entries (if history is stifled) or + DEFAULT_HISTORY_INITIAL_SIZE if not (new define, defaults to 502) + to size the initial allocation of the history array. Assumption + is that this will reduce the number of allocations + + 8/29 + ---- +execute_command.c: + - sourcenest, sourcenest_max: new variables used to track level of + sourced files and (maybe) one day catch infinite source recursion + - execute_builtin: if current source level exceeds sourcenest_max, + trigger an error and jump back to the top level + - {initialize_subshell,execute_subshell_builtin_or_function}: reset + sourcenest to 0 in a subshell + + 9/2 + --- +variables.c + - bind_variable: if a nameref expands to an array reference, make + sure that assign_array_element gets called (maybe even + recursively) instead of bind_variable_internal, so invalid variable + names (like arr[0]) don't get created. Fixes bug reported by + + + 9/3 + --- +execute_cmd.c + - evalnest_max,sourcenest_max: initialize from EVALNEST_MAX and + SOURCENEST_MAX, respectively. Feature suggested by + + +config-top.h + - define EVALNEST_MAX and SOURCENEST_MAX to 0 + + 9/6 + --- +bashline.c + - find_cmd_start: fix to (crudely) deal with >| token; even though + skip_to_delim finds `|' as a delimiter, we call it again and use + what the second call finds. Fixes bug reported by Dan Jacobson + + +findcmd.c + - find_in_path_element: if in posix mode, do not expand a literal + tilde in a $PATH element + +doc/bashref.texi + - add change to tilde expansion in $PATH elements to posix mode + description + +builtins/common.h + - ISHELP: new define for builtins that do their own option parsing + and don't use internal_getopt(); checks whether argument is --help + - CHECK_HELPOPT: convenience define to help builtins that do their + own option parsing to check for --help with one line of code + - CASE_HELPOPT: convenience define to help builtins that use + internal_getopt() check for --help with one line of code + +builtins/help.def + - builtin_help: new function, prints out --help output for current + builtin + +builtins/{kill,let,pushd}.def + - add CHECK_HELPOPT to builtins that use ISOPTION; call builtin_help + and return EX_USAGE (kill/let/pushd/popd/dirs) + +builtins/{caller,fg_bg}.def + - use CHECK_HELPOPT to recognize --help, since these builtins perform + checks that can cause them to return before calling no_options + (caller/fg/bg) + +builtins/{exit,return}.def + - use CHECK_HELPOPT to recognize --help before calling get_exitstat() + (return/exit/logout) + +builtins/{break,shift}.def + - use CHECK_HELPOPT to recognize --help before any other checks + (break/continue/shift) + +builtins/bashgetopt.h + - GETOPT_EOF: convenience define + - GETOPT_HELP: new define, to indicate internal_getopt saw --help + +builtins/bashgetopt.c + - internal_getopt: return GETOPT_HELP for --help + +builtins/common.c + - no_options: recognize --help, call builtin_help and return 2 + (builtin/eval/source/./times) + +builtins/command.def + - use CASE_HELPOPT() to handle --help after calling internal_getopt() + (command) + +builtins/{colon,echo,test}.def + - do not recognize --help (:/true/false/echo/test) + + 9/8 + --- +sig.c + - termsig_sighandler: if readline is active now, set the bashline event + hook. Old code just set it for interactive shells. Part of fix for + bug reported by + +bashline.c + - bash_event_hook: call rl_cleanup_after_signal if terminating_signal + is non-zero, since check_signals_and_traps() will cause the shell to + exit if it is and we want to clean up the readline state first. Rest + of fix for bug reported by + + 9/9 + --- +jobs.c + - waitchld: when running the wait builtin in posix mode, with a trap set + on SIGCHLD, use queue_sigchld_trap instead of trap_handler (SIGCHLD), + otherwise you will lose SIGCHLDs when children_exited > 1. Fixes bug + reported by + +builtins/read.def + - read_builtin: if we are changing the tty settings, call + initialize_terminating_signals so we have a chance to catch all + terminating signals and potentially clean up the terminal before + exiting + - read_builtin: tty_modified: new variable, set to 1 if we change the + terminal attributes and have to call ttyrestore() to restore them + - if one of the `reads' returns -1/EINTR due to a terminating signal, + and we have modified the terminal, call ttyrestore before calling + CHECK_TERMSIG + - ttyrestore: set tty_modified to 0 when called + + 9/10 + ---- +builtins/read.def + - termsave: now global to file so other functions can use it + - read_tty_cleanup: if tty_modified is non-zero, call ttycleanup to + restore old terminal settings and turn off tty_modified + +sig.c + - termsig_handler: call read_tty_cleanup if currently executing read + builtin; it does the right thing. Final piece of fix for bug reported + by Jan Rome + + 9/11 + ---- +general.c + - printable_filename: general function to return a printable + representation of a string (presumed to be a filename) + +general.h + - extern declaration for printable_filename + +execute_cmd.c + - execute_disk_command: use printable_filename + +builtins/{bind,cd,enable,hash,source}.def + - use printable_filename as appropriate when printing error messages. + From a suggestion by Vincent Lefevre + +builtins/bind.def + - use CASE_HELPOPT() to handle --help after calling internal_getopt() + (bind) + + 9/12 + ---- +builtins/common.h + - SEVAL_FUNCDEF: new flag for parse_and_execute; it means that we only + accept a single function definition command, as when we are importing + functions from the environment + - SEVAL_ONECMD: new flag for parse_and_execute; for future use + +builtins/evalstring.c + - parse_and_execute: if the SEVAL_FUNCDEF flag is set, disallow anything + but a function definition command + +variables.c + - initialize_shell_variables: don't allow functions with invalid names + to be imported from the environment, even though we still allow them + to be defined + - initialize_shell_variables: when importing function definitions from + the environment, call parse_and_execute with the SEVAL_FUNCDEF flag + to force the command to be just a function definition + +subst.c + - param_expand: when expanding a $name variable expansion, make sure that + the variable is visible and set before following the nameref chain + - param_expand: when expanding a $name variable expansion and following the + nameref chain, make sure the resulting variable is visible and set + before using it + + 9/13 + ---- +variables.c + - initialize_shell_variables: when importing function definitions from + environment, use SEVAL_ONECMD flag for parse_and_execute. Part of + CVE-2014-6271 + +builtins/evalstring.c + - parse_and_execute: if SEVAL_ONECMD flag set, return immediately after + calling execute_command_internal. Final piece for fix for bug + reported by Stephane Chazelas . Part of + CVE-2014-6271 + + 9/24 + ---- +parse.y + - reset_parser: reset eol_ungetc_lookahead to 0 here, since we don't want + shell_getc returning it on the next call. Fixes problem reported by + Tavis Ormandy and Michal Zalewski + . Potentially part of CVE-2014-6271; fix for + CVE-2014-7169 + + 9/25 + ---- +parse.y + - push_heredoc: new function, pushes a here-doc redirection onto + redir_stack handling overflow of redir_stack. Exits on overflow. + Original fix from Florian Weimer . Fix for + CVE-2014-7186 + - change straight assignments to redir_stack to call push_redir + - add one to size of word_lineno stack to avoid off-by-one error + below in read_token_word. Overflow just results in line numbers + being wrong. Fix for CVE-2014-7187 + + 9/27 + ---- +{execute_cmd,trap}.c + - changes to make minimal-config builds work again, mostly missing + #ifdefs for optional features + +builtins/common.c + - builtin_help: dummy version to be included if HELP_BUILTIN not + defined, for minimal-config builds + +variables.c + - initialize_shell_variables: incorporated patches from Florian + Weimer to change the strings bash looks + for when importing shell functions from the environment. It + adds a prefix (BASH_FUNC_) and a suffix (%%) to the name to + mark it as having been created by bash as an exported function. + Fix for remote attacks part of CVE-2014-6271 and CVE-2014-7169 + - mk_env_string: takes new argument, indicating whether we are + constructing a function + - mk_env_string: encodes function names as described above, so + initialize_shell_variables can find them + + 9/28 + ---- +copy_cmd.c + - copy_redirects: before calling savestring on here_doc_eof, make + sure it's not NULL (it could have been the result of a here + document delimited by EOF or EOS). Fixes bug reported by + Michal Zalewski . Fix for CVE-2014-6277 + +make_cmd.c + - make_redirection: initialize here_doc_eof member to NULL. Rest of + fix for CVE-2014-6277 + + 9/29 + ---- +parse.y + - current_input_line_state: return a sh_input_line_state_t containing + the current shell_input_line and its index and size variables + +shell.h + - current_input_line_state: extern declaration + +builtins/evalstring.c + - parse_and_execute: call reset_parser() before returning if + SEVAL_ONECMD set. Fixes bug reported by Michal Zalewski + and designated CVE-2014-6278 + - parse_and_execute: if we parse a function definition when + SEVAL_FUNCDEF is set, but don't consume the entire passed string, + throw an error, reset the parser, and return. Part of fix for + CVE-2014-6278 + - parse_and_execute: if parsing the shell function definition when + SEVAL_FUNCDEF is set transforms the function name (e.g., if it + begins with a newline or begins or ends with whitespace), throw + an error, reset the parser, and return. Fixes bug reported by + Eric Kobrin + + 10/2 + ---- +jobs.c + - bgp_prune: don't do anything if bgpids.npid == 0 or + bgpids.list == NULL. This can happen if something gets run before + the job control framework is initialized. Bug report from + + + 10/3 + ---- +parse.y + - xparse_dolparen: don't set token_to_read to newline after calling + parse_string() and cleaning up when the shell is not interactive. This + makes the parser think it's ok to read new commands even if it's not in + a state where that should be possible. Underlying fix for bug reported + by Michal Zalewski and designated CVE-6278 + - parser_remaining_input: new function, returns the portion of + shell_input_line that hasn't yet been read + - current_input_line_state: removed + +shell.h + - parser_remaining_input: extern declaration + - current_input_line_state: removed + +builtins/evalstring.c + - parse_and_execute: change code that checks whether parse_command has + consumed the entire passed string when SEVAL_FUNCDEF is used to use + parser_remaining_input instead of messing around with (new) + current_input_line_state. Part of fix for CVE-2014-6278 + +variables.c + - initialize_shell_variables: if we don't call parse_and_execute, free + the temporary string, since parse_and_execute won't. Report and fix + from Eric Kobrin + + 10/4 + ---- +print_cmd.c + - print_function_def: when in posix mode, print shell function + definitions as posix specifies them, without the leading + `function' keyword + +general.c + - exportable_function_name: return 1 if the passed string can be + added to the environment as an exported function name. Currently + prohibits function names containing `/' and `=' from being + exported + +general.h + - exportable_function_name: extern declaration + +builtins/setattr.def + - set_or_show_attributes: if exporting a function with export -f, + call exportable_function_name to determine whether the function + should be exported; don't export function if it returns 0 + + 10/7 + ---- +builtins/setattr.def + - set_or_show_attributes: don't show identifiers that are invisible + and imported from the environment, since that combination of + attributes means that the imported variable is not a valid shell + identifier. Report from Stephane Chazelas + + + 10/8 + ---- +shell.c + - shell_initialize: set new variable should_be_restricted, which + says whether or not the shell will be a restricted one based on the + shell name; use in calls to initialize_shell_variables (to inhibit + importing shell functions) and initialize_shell_options (to inhibit + parsing $SHELLOPTS) and initialize_bashopts (to inhibit parsing + $BASHOPTS). Report from + + 10/12 + ----- +execute_cmd.c + - execute_function: unwind-protect loop_level, set loop_level to 0 + when entering a function so break and continue in functions don't + break loops running outside of the function. Fix picked up from + dash via Herbert Xu + + 10/13 + ----- +doc/Makefile.in + - bashref.pdf: create using texi2dvi --pdf rather than postprocessing + the dvi file, so we have PDF bookmarks and links. Fix from + Siep Kroonenberg + + 10/14 + ----- +subst.h + - Q_ARITH: new quoting flag. Semantics are per Posix's spec for + arithmetic expansion: act as if string is quoted, but don't treat + double quotes specially (in this case, they will be removed by quote + removal) + - Q_ARRAYSUB: new quoting flag, indicates we are expanding an indexed + array subscript + +subst.c + - expand_arith_string: if we are not expanding the string, but we saw + a quote with Q_ARITH specified as one of quoting flags, perform + quote removal even if Q_DOUBLE_QUOTES is specified + - param_expand: change calls to expand_arith_string for $[ and $(( + cases to specify Q_ARITH. Now $(( "$x" )) and $(( "x" )) work if x + has a value that evaluates to a valid number, as Posix specifies + - expand_word_internal: add test for quoted&Q_ARITH to the tilde case, + so we continue to perform tilde expansion in arithmetic contexts + - expand_word_internal: if quoted&Q_ARITH, continue processing when we + see a `"', acting as if the double quote isn't present (already + Q_DOUBLE_QUOTED) + +arrayfunc.c + - array_expand_index: pass Q_DOUBLE_QUOTED|Q_ARITH|Q_ARRAYSUB as quoted + argument in call to expand_arith_string. This inhibits word + splitting (Q_DOUBLE_QUOTED) while discarding double quotes (Q_ARITH), + identical to the quote flags passed while expanding $(( )) and $[ ]. + Q_ARRAYSUB reserved for future use. Fixes problem reported by + Stephane Chazelas + + 10/16 + ----- +subst.c + - parameter_brace_expand_word: if the PF_ASSIGNRHS flag is set and we + are expanding what looks like an array subscripted with @ or *, + make sure the variable we're expanding is actually an array before + we add Q_DOUBLE_QUOTES to the flags. If we don't, things like + scalar[@] will remain quoted. Fixes ubuntu bug 1381567 + https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1381567 + + 10/17 + ----- +{jobs,nojobs}.c + - get_original_tty_job_signals: get original signal dispostions for + SIGTSTP, SIGTTIN, SIGTTOU before we start manipulating them in + make_child + - default_tty_job_signals: make sure we set SIGTSTP, SIGTTIN, or + SIGTTOU to SIG_IGN if they were ignored at shell startup instead of + unconditionally setting them to SIG_DFL. Fixes bug reported by + idallen@idallen.ca + +jobs.h + - get_original_tty_job_signals: extern declaration + +trap.c + - initialize_traps: add call to get_original_tty_job_signals + + 10/22 + ----- +subst.c + - expand_string_for_rhs: when expanding in this context (rhs of a word + expansion or pattern removal), we don't perform word splitting, so + we don't want to split $* if IFS is empty. Fixes bug reported by + Stephane Chazelas + + 10/23 + ----- +subst.c + - param_expand: when expanding $* in a pattern context where the + expansion is quoted (Q_PATQUOTE), don't quote the expansion -- + the outer quotes don't make the characters in the expansion of + $* special. Posix interp 221. Reported by Stephane Chazelas + + + 10/28 + ----- +lib/readline/bind.c + - enable-bracketed-paste: new bindable variable, enables support for + a terminal's `bracketed paste mode'. Code contributed by + Daniel Colascione + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - enable-bracketed-paste: add description + +lib/readline/{readline.c,rlprivate.h} + - _rl_enable_bracketed_paste: declarations + - #defines for use by bracketed paste implementation + +lib/readline/rltty.c + - rl_prep_terminal: send BRACK_PASTE_INIT string to terminal if we + are supposed to enable bracketed-paste mode; change terminal_prepped + to indicate we sent that string and need to clean up + - rl_deprep_terminal: if terminal_prepped indicates we sent the + bracketed-paste mode init string to the terminal, send the cleanup + string before restoring the terminal modes + +lib/readline/kill.c + - rl_bracketed_paste_begin: function to read bracketed paste until + BRACK_PASTE_SUFF; discard the suffix, and insert the rest of the + paste as a single (undoable) object. Bound to BRACK_PASTE_PREF + +lib/readline/funmap.c + - bracketed-paste-begin: new bindable command, executes + rl_bracketed_paste_begin + +lib/readline/readline.c + - bind_bracketed_paste_prefix: new function, sets up to recognize + the bracketed paste prefix sequence (BRACK_PASTE_PREF) in emacs + keymap and vi insertion keymap + - readline_initialize_everything: call bind_bracketed_paste_prefix + + 11/1 + ---- +builtins/ulimit.def + - RLIMIT_POSIXLOCKS: now synonym for RLIMIT_LOCKS + - -k: new option: RLIMIT_KQUEUES, max kqueues allocated for this + process + - -P: new option: RLIMIT_NPTS, max number of pseudoterminals available + to this process + +doc/{bash.1,bashref.texi} + - document `ulimit -k' option + - document `ulimit -P' option + +parse.y + - `timespec list_terminator' production: if the list terminator is `;' + set last_read_token to `;' to allow things like `time ; command' to + time null commands and not throw a syntax error. Patch from + Piotr Grzybowski + - `BANG list_terminator' production: do the same thing + +variables.c + - sv_optind: use find_shell_variable and get_variable_value so we can + have the variable's context in the case we need to do something + when we are restoring a previous variable context's value + +builtins/getopt.h + - sh_getopt_state_t: struct to save sh_getopt's internal state so we + can restore it around function calls in the event that we have a + local copy of OPTIND + +builtins/getopt.[ch] + - sh_getopt_{save,restore}_istate: new functions to save and restore + getopt's internal state + - sh_getopt_{alloc,dispose}_istate: new functions to allocate and + deallocate sh_getopt_istate_t objects + +execute_cmd.c + - maybe_restore_getopt_state: restore sh_getopt state after executing + function body iff the funtion declared a local copy of OPTIND + - execute_function: save sh_getopt state before executing function body + - execute_function: note in getopt_state->flags whether or not the + function declared a local copy of OPTIND; used by + maybe_restore_getopt_state + - execute_function: maybe restore sh_getopt state before returning via + call to maybe_restore_getopt_state. Fixes bugs with getopts and + state between calls reported in 2011 by Bernd Eggink + and in 2014 by Oyvind Hvidsten + + +configure.ac + - enable-function-import: new option, controls whether function imports + are included. Enabled by default. Patch from David Galos + + +config.h.in + - FUNCTION_IMPORT: define controlled by enable-function-import above + +variables.c + - initialize_shell_variables: include code to import function + definitions from the environment if FUNCTION_IMPORT is defined + +doc/bashref.texi + - --enable_function-import: document new configuration option + + 11/5 + ---- +lib/readline/history.c + - history_lines_read_from_file: new variable, set by read_history and + read_history_range to the actual number of lines read from the + history file. The value is valid immediately after a call to one + of those functions + - history_lines_written_to_file: new variable, set by write_history, + history_do_write, and history_truncate_file to the actual number of + lines written to the history file. The value is valid immediately + after a call to one of those functions + +variables.c + - sv_histsize: set history_lines_in_file after history_truncate_file() + only if hmax < history_lines_in_file (lines we've already read); a + cosmetic change only + +bashhist.c + - load_history: set history_lines_in_file after read_history() from + history_lines_read_from_file, since read_history reads all of the + lines from the history file even if it's more than $HISTSIZE + - maybe_save_shell_history: after calling write_history(), set + history_lines_in_file to history_lines_written_to_file, since we + can assume that we read everyhing we just wrote + +builtins/history.def + - history_builtin: after calling read_history (history -r), set the + new value of history_lines_in_file, for the same reason as above + - history_builtin: after calling read_history_range (history -n), set + history_lines_in_file from history_lines_read_from_file + + 11/6 + ---- +lib/readline/histfile.c + - history_truncate_file: since we move the old file to a backup copy + before truncating, make sure the new file is owned by the same uid + as the old + - history_do_write: use chown in the same way as history_truncate_file + + 11/12 + ----- +lib/readline/display.c + - expand_prompt: takes a new `flags' argument; only one flag defined + so far: PMT_MULTILINE + - expand_prompt: changed all callers to add new flags argument + - rl_expand_prompt, redraw_prompt: make sure to set PMT_MULTILINE in + FLAGS argument to expand_prompt if expanding parts of a prompt + containing embedded newlines + - expand_prompt: only add mode char to last line of a prompt with + embedded newlines, so mode indicator doesn't get lost and gets + updated properly. Fixes problem reported by Renlin Li + + + 11/13 + ----- + +lib/readline/display.c + - prompt_modestr: changed prompt_modechar to return a string denoting + the editing mode; default strings for emacs and both vi modes are + #defines in this file. prompt_modestr takes an argument in which + it returns the length of the mode string + - expand_prompt: if expanding mode strings in the prompt, get the + mode string to use and add it at the beginning of the prompt string, + before expanding it. This will allow future work allowing the mode + string to contain invisible characters + + 11/15 + ----- +lib/readline/rlprivate.h + - _rl_{emacs,vi_cmd,vi_ins}_mode_str: extern declarations for + variables to hold current values of user-settable mode strings; + variables to hold lengths + +lib/readline/rlconf.h + - defines for default values of the mode strings for each editing mode + and keymap + +lib/readline/display.c + - _rl_{emacs,vi_cmd,vi_ins}_mode_str: new variables to hold values of + user-settable mode strings + - _rl_{emacs,vi_cmd,vi_ins}_modestr_len: new variables to hold lengths + of corresponding mode string variables + - prompt_modestr: return appropriate user-settable mode string + variables + +lib/readline/bind.c + - {emacs,vi-ins,vi-cmd}-mode-string: new user-settable mode string + variables + - sv_{emacs,viins,vicmd}_modestr: variable handling functions for user- + settable mode string variables. Non-null values are run through + rl_translate_keyseq so users can include invisible character + sequences in the mode strings; null values restore the default + - _rl_get_string_variable_value: handle values for new user-settable + mode string variables. Original code contributed by Dylan Cali + + +lib/readline/doc/rluser.texi + - {emacs,vi-ins,vi-cmd}-mode-string: document, including the fact that + you can use \1 and \2 to bracket sequences of non-printing + characters + + 11/16 + ----- +lib/readline/history.c + - add_history: replace loop that copies history list down one item + with call to memmove to take advantage of whatever efficiencies + libc can offer. Won't be any slower than current loop + +lib/readline/display.c + - rl_redraw_prompt_last_line: new function, calls redraw_prompt if + the prompt contains multiple lines; calls rl_forced_update_display + if not + +lib/readline/readline.h + - rl_redraw_prompt_last_line: extern declaration, undocumented in + texinfo manual until I get it a little more work + +bashline.c + - bash_execute_unix_command: instead of unconditionally calling + rl_forced_update_display, call rl_redraw_prompt_last_line if we + cleared the last line before executing the command. This keeps + commands that don't display any other output but just manipulate + the contents of the line buffer from redisplaying the prompt lines + before the last newline multiple times. Fixes bug reported by + Jesper Nygards and Rob Foehl + . This means that commands that display output + will *only* display the final line of the prompt + - bash_execute_unix_command: if the command returns 124, we redraw + the line unconditionally, including all lines of the prompt + + 11/18 + ----- +builtins/mapfile.def + - mapfile_builtin: don't allow a valid array reference through to + mapfile(), since it will just create a shell variable with that name. + Bug and fix from Eduardo A. Bustamante López + + 11/19 + ----- +lib/readline/complete.c + - _rl_colored_completion_prefix: new variable, if non-zero, and color + support is compiled in, and the $LS_COLORS variable exists and + contains color definitions, display any common prefix of a set of + completions in blue when displaying all the possible completions. + Doesn't work with menu-complete, which inserts possible completions + inline + - colored_prefix_start(), colored_prefix_end(): new functions, used to + bracket colored completion prefixes + - fnprint: if prefix_bytes is non-zero, and _rl_colored_completion_prefix + is > 0, display the first PREFIX_BYTES bytes of the word bracketed + by calls to colored_prefix_start and colored_prefix_end + - print_filename: if _rl_colored_completion_prefix is > 0, compute the + length in bytes of the common prefix and pass that to fnprint + +lib/readline/readline.c + - readline_initialize_everything: initialize the colors from $LS_COLORS + if _rl_colored_completion_prefix is non-zero + +lib/readline/colors.c + - _rl_print_prefix_color: new function, changes text color to that + defined for the common prefix of a set of possible completions + (currently cyan, same as directories); currently uses C_PREFIX, + defined in colors.h as C_DIR + +lib/readline/colors.h + - _rl_print_prefix_color: new extern declaration + +lib/readline/bind.c + - colored-completion-prefix: new bindable variable, if set, common + prefix of a set of possible completions is displayed in color. + Feature requested by several, most recently by Richard Neill + (in a slightly different form) and + Duy Nguyen + + 11/20 + ----- +builtins/printf.def + - printf_builtin: allow null (empty) format strings supplied with + -v var to set `var' to the empty string. That is, printf -v var "" + is now the same as var="". Change suggested by Mike Frysinger + + +pathexp.h + - FNMATCH_NOCASEGLOB: macro to decide whether or not to pass + FNM_CASEFOLD flag to strmatch depending on whether glob_ignore_case + is set; analogout to FNMATCH_IGNCASE + +pathexp.c + - glob_name_is_acceptable: use FNMATCH_NOCASEMATCH to determine flags + passed to strmatch; if nocaseglob is used to generate glob matches, + it should be used to generate ignored matches + + 11/21 + ----- +pcomplete.c + - filter_stringlist: the call to strmatch now honors the setting of + nocasematch. Feature request from Ville Skytta + back in 2010 + +doc/bash.1,lib/readline/doc/rluser.texi + - complete -X: document that filtering the list of possible completions + honors the nocasematch option when performing matching + +lib/glob/gmisc.c + - include chartypes.h and strmatch.h for new defines + - match_pattern_{wchar,char}: now take new third FLAGS argument, flags + have same meanings as strmatch(); intent is to handle case + insensitive comparisons under same conditions as strmatch + - FOLD: imported case-folding define from sm_loop.c; wide and single- + byte character versions + - match_pattern_{wchar,char}: use FOLD when comparing characters to + honor FNM_CASEFOLD if set in FLAGS argument + +externs.h + - match_pattern_{wchar,char}: updated extern declarations + +subst.c + - match_{upattern,wpattern}: update strmatch/wcsmatch calls to include + FNMATCH_IGNCASE in flags argument + - match_{upattern,wpattern}: update match_pattern_{char,wchar} calls + to include FNMATCH_IGNCASE in flags argument (consistent with calls + to strmatch). This makes pattern substitution word expansion honor + nocasematch shell option. Feature requested by Davide Baldini + + - match_wpattern: make sure to fold case if necessary when doing simple + matching + +doc/{bash.1,bashref.texi} + - pattern substitution: updated description to include honoring setting + of nocasematch when performing matching + +subst.c + - expand_word_internal: optimize handling of "$@" idiom by calling + list_rest_of_args() and quote_list() directly at the top of the + function instead of going through normal code path + - cached_quoted_dollar_at: WORD_LIST of quoted positional parameters, + used by same code above that optimizes "$@"; if non-null we just + return a copy of the list; if null, we save a copy of the list we + create + - invalidate_cached_quoted_dollar_at: convenience function to allow + other parts of the shell (e.g., remember_args()) to destroy the + cached list of quoted positional parameter when the positional + parameters change + +builtins/common.c + - remember_args: call invalidate_cached_quoted_dollar_at() + +builtins/shift.def + - shift_builtin: call invalidate_cached_quoted_dollar_at after modifying + dollar_vars[] + +builtins/source.def + - maybe_pop_dollar_vars: call invalidate_cached_quoted_dollar_at just + to be safe + + 11/23 + ----- +builtins/evalfile.c + - _evalfile: return -1 if errno == ENOENT and the flags don't include + FEVAL_ENOENTOK. If we print an error message we should return an + error + - force_execute_file: new function, reads and executes commands from + a file but returns an error if file doesn't exist + +builtins/common.h + - force_execute_file: new extern declaration + +shell.c + - main: call start_debugger even if dollar_vars[1] == 0 if the shell + isn't interactive (interactive_shell == 0) + - start_debugger: call force_execute_file instead of maybe_execute_file; + turn off debugging mode if it returns value < 0 + + 11/24 + ----- +hashlib.h + - DEFAULT_HASH_BUCKETS: doubled to 128, cost in memory use is small but + changes traversal order when not sorting results + + 11/25 + ----- +doc/{bash.1,bashref.texi} + - make it clearer, by breaking it out into a separate paragraph, that + referencing an array without a subscript is equivalent to referencing + it with subscript 0 + - add text saying that referencing any variable using a valid subscript + is OK + + 11/28 + ----- + +arrayfunc.c + - bind_array_variable, bind_assoc_variable: allow binding value to a + readonly variable if the ASS_FORCE flag is set in the FLAGS + argument + +subst.h + - ASS_FORCE: new assignment flag; means to allow assignment even if + variable is marked readonly + +builtins/declare.def + - when assigning a value to an array or assoc variable using + something like `declare -r foo=bar' where foo is an existing array + variable, pass the ASS_FORCE to assign_array_var_from_string so + the assignment is allowed. Fixes debian bug 765759 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765759 + +builtins/setattr.def + - var_attribute_string: new function to return (as argument) a char + array with attribute flag values for a given variable; returns the + length of the array + +lib/sh/shquote.c + - sh_quote_reusable: function returning a version of its string + argument that is quoted for reuse + +externs.h + - sh_quote_reusable: extern declaration + +builtins/common.h + - MAX_ATTRIBUTES: define used to size arrays for attribute flag + characters + - var_attribute_string: new extern function declaration + +subst.c + - array_remove_pattern: fixed a bug where `var' instead of `v' was + tested for invisible attribute + - get_var_and_type: fill in a valid *VARP if returning VT_VARIABLE + because callers may need to use it + - parameter_brace_transform: family of functions to implement the new + mksh-inspired ${param@spec} transformation word expansions. Some + of the operators transform the (expanded) value of the parameter, + the rest expand to information about the parameter itself + (array_transform, parameter_list_transform, list_transform, + string_transform, pos_params_assignment, array_var_assignment, + string_var_assignment) + - parameter_brace_expand: changes to parse the new `@' word expansion + operator and call parameter_brace_transform appropriately + - parameter_brace_expand: make sure we handle ${#@} as we have before + even in the presence of the new `@' operator + +variables.c + - push_temp_var: make sure to call bind_variable_internal with the + ASS_FORCE flag so we override readonly variables created with + something like `tempvar=foo declare -r foo'. + - bind_variable_internal: honor ASS_FORCE flag to allow binding even + if a variable is readonly + +execute_cmd.c + - struct func_array_state: new state to save state of BASH_LINENO, + BASH_SOURCE, and FUNCNAME during function execution so it can be + restored on a jump to top level + - restore_funcarray_state: new function to restore func_array_state + - execute_function: fill in func_array_state variable, add unwind- + protect to restore it on jump to top level, call explicitly at + end of function if subshell != 0 (may not be necessary, but safe + for now). Fixes bug with local assignments to FUNCNAME reported + by Arfrever Frehtes Taifersar Arahesis + + 11/29 + ----- +arrayfunc.c + - assign_compound_array_list: turn off ASS_APPEND flag when processing + each individual assignment inside the parens in var+=(...). The + outer += should not affect assignments to existing subscripts; + those should be treated like usual assignments unless += supplied + inside the parens. Bug report from Maarten Billemont + , fix from Eduardo A. Bustamante López + + +config.h.in + - HAVE_PSELECT: define if pselect(2) available + +configure.ac + - check for pselect(2), define HAVE_PSELECT if found + +lib/readline/input.c + - rl_getc: use pselect(2) to wait for input ready on readline's + input fd or for a signal to arrive, will handle SIGWINCH (which + does not interrupt read(2)) and thus allow resize to happen without + having to wait to read more input. Only works if pselect available + and returns -1/EINTR on a signal even if the signal was installed + with SA_RESTART. From a suggestion from Egmont Koblinger + + + 12/3 + ---- +variables.c + - flush_temporary_env: new function, disposes all temp variables in + temporary_env hash table + - bind_variable: only try to update a temporary variable's value in the + temporary env if the value argument is not null. Fixes bug reported + by + +variables.h + - flush_temporary_env: new extern declaration + +subst.c + - command_substitute: if running command substitution as part of + expanding a redirection (expanding_redir == 1), flush any temporary + environment we've inherited as part of this command, since we are not + supposed to have access to the temporary environment. Since + expanding_redir only controls access to the temporary environment for + variable lookup and binding, we can turn it off in the subshell + + 12/4 + ---- +builtins/printf.def + - printstr: make sure a missing precision specifier after a `.' is + treated as 0, as printf(3) specifies. Fixes ubuntu bash bug + 1399087 (https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1399087) + + 12/5 + ---- +subst.c + - skip_to_delim: if scanning past process substitution (skipcmd == 1, + noprocsub == 0), use extract_delimited_string instead of + extract_process_subst, which was changed a while back (bash-4.3.23) + to use xparse_dolparen. xparse_dolparen complains if the command + or process substitution is unterminated, since it runs the parser, + which is not what we want here. Command substitution does the same + thing. Fixes bug reported by Daniel Kahn Gillmor + as Debian bash bug 771968 + (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771968) + + 12/6 + ---- +subst.c + - command_substitute: short-circuit without forking on a command string + that consists entirely of s and newlines + +jobs.c + - make_child: changes to allow interrupts through if fork fails and + we are sleeping for `forksleep' seconds + - waitchld: make things a little more resilient if CHILD ends up NULL + + 12/12 + ----- +lib/readline/complete.c + - rl_display_match_list: when calculating common prefix to display in + color, make sure we correctly handle a common prefix with a trailing + `/' as we do when checking whether or not to add an ellipis. + printable_part() doesn't return the whole pathname if it ends in a + slash, to avoid printing null strings, so we have to make sure we + have the entire prefix + +lib/readline/complete.c + - _rl_complete_display_matches_interrupt: new variable, set to 1 by + _rl_complete_sigcleanup to let rl_display_match_list know it has + freed the match list + - display_matches: check for signals during the printing loops with + RL_SIG_RECEIVED(), return immediately if there is a pending signal + (might not want to do this if it's SIGWINCH -- CHECK) + - rl_complete_internal: if _rl_complete_display_matches_interrupt + set after calling display_matches, just null out `matches' since + it's already been freed and call any application-set signal hook + + 12/14 + ----- +parse.y + - time_command_acceptable: if the token before a newline is `|', + return 0, since it's not really valid to time inside a pipeline. + Only handles a single newline but allows things like + echo a | + time cat + to invoke /usr/bin/time, which is probably enough to catch the + stray carriage return. Fixes bug reported by Andre Majorel + + +builtins/declare.def + - declare_internal: don't try to perform compound assignments unless + the WORD_DESC has flags including W_COMPASSIGN (maybe should check + W_ASSIGNMENT as well), avoiding unexpected evaluation if a word + is of the form (word) and is assigned to an array variable like so: + declare -x var=$value. Bug reported by Stephane Chazelas + . Will eventually be contingent on + compatibility level > 43, but not there yet. TENTATIVE + + 12/15 + ----- +lib/sh/Makefile.in + - add missing dependencies for shmatch.o. Pointed out by Sergey + Mikhailov + + 12/16 + ----- +{execute_cmd,subst}.c + - W_ASSIGNINT: remove, not used any more + +execute_cmd.c + - fix_assignment_words: don't look for `-i' option and set W_ASSIGNINT + flag any more; doing things a different way + - shell_expand_word_list: instead of using W_ASSIGNINT flag, since it + doesn't take into account all options that can transform values on + assignment (-l/-u/-c can also), go through option arguments looking + for options that need special handling and add them to the `opts' + array for make_internal_declare to use. Fixes bug with constructs + like `declare -al foo=(UPONE UPTWO UPTHREE)' not being lowercased on + assignment reported by Linda Walsh + + + + 12/18 + ----- +lib/readline/readline.c + - rl_internal_char: when we read EOF on a non-empty line, check for + signals and invoke any readline signal handling and any application- + installed signal hook + + 12/20 + ----- +lib/readline/readline.c + - rl_internal_char: if we read EOF on a non-empty line, set c to + _rl_eof_char the first time through. If we read EOF the next time, + return EOF from readline(). If callbacks are defined, this returns + EOF immediately, since lastc isn't available. Fix for problem + most recently identified by Jiri Kukacka , + it has come up in the past + + 12/21 + ----- +builtins/declare.def + - declare_internal: keep track of whether or not an assignment statement + argument to declare is an array subscript assignment; need to + differentiate assignments from straight declarations (declare a[4]) + which are accepted for backwards compatibility + - assignment statements like declare a[2]=foo are now treated as + straight subscript assignment statements if a already exists as an + array variable + - declare foo='(1 2 3)' is treated as an assignment to foo[0] if foo + exists and is an array, just as it would be if it were an assignment + statement and `declare' was not present. All this from a proposal + by Stephane Chazelas + + 12/22 + ----- +builtins/read.def + - read_tty_modified: function to tell the rest of the shell if the + read builtin has modified the tty + - read_builtin: make sure to initialize terminating signals before + installing a SIGALRM signal handler in case we modify the tty as + well as ask for a timeout; the subsequent call to + initialize_terminating_signals would overwrite the read-builtin- + local SIGALRM handler + +builtins/common.h + - read_tty_modified: new extern declaration + +shell.c + - exit_shell: if read_tty_modified() returns true, call read_tty_cleanup + to undo the terminal modifications. Extension of previous fixes; + fixes bug with read -s reported by Richard W. Marsden + + + + 12/23 + ----- +builtins/setattr.def + - show_var_attributes: call print_array_assignment and print_assoc_assignment + with a `not quoted' flag so the assignment statements are not + surrounded by single quotes. Caused changes to a lot of test output + + 12/29 + ----- +lib/readline/complete.c + - stat_char: Windows doesn't handle X_OK flag to access(2); use file + extensions to determine whether or not a file is executable. Bug + report and fix from Eli Zaretskii + +configure.ac + - changed version to bash-4.4-devel + +lib/readline/readline.h + - changed version to readline-6.4 + + 12/30 + ----- +readline.h + - struct readline_state: fix types of `ignorefunc' and `attemptfunc' + members + +lib/sh/shquote.c,externs.h + - sh_contains_shell_metas, sh_contains_quotes: now take `const char *' + as parameter + +stringlib.c,externs.h + - strcreplace: `text' argument now `const char *' + +pathexp.[ch] + - quote_globbing_chars: `string' argument now `const char *', accompanying + changes to function local variables + +pcomplete.c + - preproc_filterpat: `text' argument now `const char *' + - filter_stringlist: `text' argument now `const char *' + + 12/31 + ----- +builtins/evalstring.c + - should_suppress_fork: new function, broke code that decides whether + to turn on CMD_NO_FORK flag out of parse_and_execute into a separate + function + +execute_cmd.c + - execute_command_internal: AND_AND, OR_OR: call should_suppress_fork + for the RHS of && and ||, make `make' invocations marginally more + efficient + +flags.c + - get_current_flags: returns a bitmap of all single-letter shell + options with a non-zero value meaning option is enabled + - set_current_flags: set current single-letter options from a passed + bitmap, which has presumably been initialized with get_current_flags + +flags.h + - {get,set}_current_flags: new extern declarations + +builtins/declare.def + - declare_internal: if invoked as `local', interpret name argument of + `-' to mean to save (and restore at shell return) single-letter + shell options + +variables.c + - push_func_var: if we encounter `-' as the name of a local variable, + take the value and call set_current_flags on it to restore old + flag settings + +builtins/set.def + - get_current_options: returns a bitmap of all shell options settable + with `set', with a non-zero value meaning option is enabled + - set_current_options: set current shell options from a passed + bitmap, which has presumably been initialized with get_current_options + + + 1/1/2015 + -------- +lib/readline/parens.c + - _rl_blink_matching_paren: initialize to 0 whether or not select(2) is + available. Inconsistency reported by Mark Karpov + + +builtins/declare.def + - declare_internal: use get_current_options instead of + get_current_flags, so `local -' can be generalized + +variables.c + - push_func_var: use set_current_options instead of set_current_flags + so `local -' can be generalized + +doc/{bash.1,bashref.texi} + - document new `local -' feature; originally inspired by Robert Elz + describing feature in NetBSD sh + + 1/3 + --- +lib/readline/{complete,funmap,kill,histfile,util} +lib/readline/readline.h +lib/tilde/tilde.c + - fixes for filename- and evironment-related issues on Windows. Fixes + from Eli Zaretskii + - Windows can paste to the console from the clipboard like Cygwin + - Windows uses $APPDATA as a pseudo-$HOME + +lib/readline/input.c + - rl_getc: use _getch on Windows to avoid being overridden by a getch + ncurses function + - win32_isatty: replace Windows isatty(3) with a function that does + additional checks, sinces Windows isatty returns non-zero for + every character device. From Eli Zaretskii + +lib/readline/display.c + - delete_chars: if compiled with ncurses on Windows, this code can + work, so build it in if NCURSES_VERSION defined + - open_some_spaces: ditto + + 1/6 + --- +doc/{bash.1,bashref.texi} + - minor grammar and typo corrections from TonyMc + + 1/8 + --- +sig.c + - throw_to_top_level: only attempt to run the interrupt trap if SIGINT + is trapped -- minor optimization + - throw_to_top_level: if we are running a trap, call run_trap_cleanup + to turn off the sigmodes flags + +trap.c + - _run_trap_internal: temporarily suppress pending SIGINTs while running + one of the traps the shell handles internally (e.g., ERR). Fixes bug + reported by Keith Thompson + + 1/10 + ---- +bashhist.c + - bash_history_inhibit_expansion: use skip_to_delim with the history + expansion character to see whether or not the instance of the + history expansion character should be skipped because, for instance, + it is in a command substitution. Fixes issue reported by + Zigmund.Ozean@zig-home.localdomain + + 1/14 + ---- +lib/readline/isearch.c + - _rl_isearch_dispatch: if we are in a multibyte locale, make sure to + use _rl_find_prev_mbchar when trying to delete characters from the + search string, instead of just chopping off the previous byte. + Fixes bug reported by Kyrylo Shpytsya + +lib/readline/complete.c + - rl_filename_completion_function: if we tilde-expand `dirname', make + sure we use the expanded result instead of throwing it away for the + quote-removed `users_dirname', which still has any leading tilde. + Fixes bug reported by Dave Rutherford + +execute_cmd.c + - select_query: if the read builtin doesn't return anything in REPLY, + return NULL (failure). Fixes bug reported by Etherial Raine + + +builtins/read.def + - read_builtin: if REPLY has the readonly or noassign attribute, return + failure + + 1/16 + ---- +redir.c + - redir_open: if open() returns -1/EINTR, check traps as well as + using QUIT to handle signals + + 1/18 + ---- +jobs.c + - wait_for: make sure queue_sigchld is set to 1 before unblocking + SIGCHLD if MUST_UNBLOCK_CHLD is defined + + 1/19 + ---- +pcomplete.h + - new progcomp option: COPT_NOSORT, means to not sort list of possible + completions + +pcomplete.c + - pcomp_set_readline_variables: if COPT_NOSORT set in compspec flags, + set rl_sort_completion_duplicates to 0 + +builtins/complete.def + - _compopt: new option value: -o nosort, sets COPT_NOSORT in compspec + option flags. Provides new -o nosort option for complete and compgen + +bashline.c + - attempt_shell_completion: make sure rl_sort_completion_matches is + set to 1 before completion is attempted; allow a compspec to turn + it off + +lib/readline/kill.c + - rl_vi_yank_pop: new function, vi-mode version of yank-pop. Original + code from Ian Kelling + +lib/readline/funmap.c + - `vi-yank-pop': bindable name mapped to rl_vi_yank_pop + +lib/readline/readline.h + - rl_vi_yank_pop: extern declaration + + 1/21 + ---- +lib/sh/shquote.c + - sh_backslash_quote: change to understand and handle multibyte + characters, using is_basic, COPY_CHAR_P. See + https://bugzilla.redhat.com/show_bug.cgi?id=1184320 for original + report + + 1/23 + ---- +include/posixjmp.h + - use setjmp_sigs instead of redefined setjmp, it fails on Cygwin. + Report from Eric Blake + +builtins/wait.def,shell.c + - use setjmp_sigs instead of setjmp call, since setjmp no longer + redefined to something known + +include/chartypes.h, lib/readline/chardefs.h + - make sure all ctype.h macros are called with unsigned char args, + casting to make sure + +lib/sh/casemod.c + - sh_modcase: don't assume that the upper and lower case versions of a + character are the same width, so don't try to do the conversion in + place: convert and copy the converted characters one or more at a + time to the returned string + - sh_modcase: since upper and lower case versions of same character + may have different widths in some locales, don't shortcut and assume + that we can do single-byte case modification (toupper) with a + single-byte input character (e.g., `i'). Fix for problem reported + by Stephane Chazelas + + 1/31 + ---- +lib/readline/histfile.c + - history_truncate_file, history_do_write: if the first rename(2) + of the history file to the backup file fails, set the backup file + name to NULL to prevent any later attempts to restore the + original. Report from Jonathan Hankins + - history_do_write: don't attempt to back up non-regular files. + Report from Jonathan Hankins + + 2/2 + --- +trap.c + - run_interrupt_trap: now takes an argument indicating whether or not + it was called just before a longjmp to top_level; change callers + - run_interrupt_trap: if running a trap and we are being called before + a longjmp to top_level, call run_trap_cleanup on running trap so + a QUIT call while running a DEBUG trap, for instance, doesn't leave + sigmodes[DEBUG_TRAP] including SIG_INPROGRESS. Fixes bug reported + by Chih-Chieh Chou + +sig.c + - throw_to_top_level: change call to run_interrupt_trap to pass arg 1 + - termsig_handler: change call to run_interrupt_trap + +trap.h + - run_interrupt_trap: update extern prototype declaration + + 2/4 + --- +lib/readline/histfile.c + - histfile_backup, histfile_restore: new functions to back up and restore + history file to `filename-', following (one level of) symlinks through + so we don't rename the symlink itself. From a suggestion by + Jonathan Hankins + +assoc.c + - assoc_to_assign: if an index happens to be `@' or `*', make sure it's + double-quoted. Bug report from Greg Wooledge + + 2/5 + --- +lib/readline/bind.c + - rl_bind_key: if we are rebinding a key that is not bound to a + function or a macro, construct a key sequence and pass it to + rl_bind_keyseq. Make sure that '\' when it is used as a key is + changed to "\\" so it can survive rl_translate_keyseq. Fixes + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776743 + + 2/8 + --- +include/posixjmp.h + - _rl_longjmp, sh_longjmp: new defines, expand to siglongjmp or longjmp + depending on autoconf results, used to avoid redefining longjmp, + remove _OPENNT conditional code. Report from Eric Blake + + +{bashjmp,quit}.h,{execute_cmd,expr,jobs,sig,trap}.c,builtins/{evalstring.c,return.def} + - change calls to longjmp to use sh_longjmp + +lib/readline/util.c + - change calls to longjmp to use _rl_longjmp + + 2/18 + ---- +variables.c + - bind_int_variable: make sure `v' is non-null before making it visible + + 2/19 + ---- +arrayfunc.c + - assign_array_var_from_word_list: after assignment, mark variable as no + longer invisible + - assign_array_var_from_string: after assignment, mark variable as no + longer invisible + +builtins/declare.def + - declare_internal: add warning if an attempt is made to use a quoted + compound assignment as an argument to declare (declare -a foo='( 1 2 )'); + backwards compatible with bash-4.3. Still a tentative change + + 2/20 + ---- +lib/glob/smatch.c + - is_wcclass: check malloc() return value, return -1 if it fails + Report from Tobias Stoeckmann + +lib/sh/shmatch.c + - sh_regmatch: check malloc() return value, handle NULL value if it + fails. Report from Tobias Stoeckmann + + 2/22 + ---- +lib/readline/doc/rltech.texi + - rl_callback_handler_install: note that the handler function should + free the line it receives, as with readline. Suggested by + Ulf Magnusson + - Readline Signal Handling: note that application needs to clean up + readline's terminal state if it wants to handle a signal before + the line handler restores it. Suggested by Ulf Magnusson + + + 2/24 + ---- +lib/readline/histfile.c + - history_do_write,history_truncate_file: if the write fails, make sure + to set history_lines_written_to_file to 0 so we don't lose those + history entries + + 2/27 + ---- +execute_cmd.c + - execute_function: unwind-protect the value of line_number_for_err_trap, + so a function that returns a non-zero value and triggers an ERR trap + has the right value for LINENO. Any simple command in the function + body can change it. Bug report from Paul Donohue + + 3/5 + --- +lib/sh/shquote.c + - sh_backslash_quote: cast `c' to `unsigned char' before using as + index into backslash_table. Report and fix from + alexeyv.90@gmail.com + +arrayfunc.[ch] + - valid_array_reference: added second `flags' argument for future use; + currently unused + +parse.y,{redir,subst,variables,test}.c +builtins/{declare,printf,read,set}.def + - valid_array_reference: changed callers + + 3/7 + --- +lib/readline/signals.c + - _rl_handle_signal: if readline gets a SIGTSTP or SIGTTIN, block + SIGTTOU so a backgrounded readline can reset the terminal settings + appropriately, otherwise the terminal state and readline's idea + of it can get messed up. Original report from Dave Wysochanski + and Dave Anderson + +trap.c + - run_pending_traps: don't allow recursive SIGWINCH trap invocations; + they're wasteful and trying to handle a stream of signals while a + user resizes the terminal can lead to malloc errors trying to save + and restore the_pipeline multiple times. Problem reported most + recently by Martin M. S. Pederson (Fedora bash bug 1197768 + https://bugzilla.redhat.com/show_bug.cgi?id=1197768) + - reset_or_restore_signal_handlers: set pending_traps to 0 for all + signals when forking a child. TENTATIVE fix + +jobs.c + - {save,restore}_pipeline: block SIGCHLD while manipulating the_pipeline + like cleanup_the_pipeline does. XXX - may not be necessary + +lib/readline/display.c + - rl_redisplay: fixed case where multibyte character in the prompt + (e.g., \u03bb) in the last screen column causes problems with line + wrapping because the newline marker is put in the middle of the + multibyte char. Most recently reported on Ubuntu by + + +pathexp.c + - quote_string_for_globbing: if a bracket expression doesn't have a + closing right bracket, rescan it from just after the opening + bracket without treating it as a bracket expression. Bug report + from Stephane Chazelas + + 3/9 + --- +subst.c + - process_substitute: keep the last pipeline created to run a process + substitution in LAST_PROCSUB_CHILD; discard it when another one is + created + +jobs.[ch] + - discard_pipeline: now global, so process_substitute can call it + +jobs.c + - last_procsub_child: new variable, set and modified only by the process + substitution code + - find_pipeline: if the requested pid is in LAST_PROCSUB_CHILD, return + it; analogous to the way this code handles the_pipeline + - waitchld: if we find a child via find_pipeline that is a part of the + last process substitution child, mark that child appropriately. If + the child is dead, add it to the bgp list. This and the previous + change allow waiting for the most recent process substitution (the + one corresponding to $!). Original report from Stephane Chazelas + + + 3/10 + ---- +arrayfunc.c + - unbind_array_element: make sure skipsubscript() doesn't try to parse + embedded quotes in the subscript, since this has already been through + one round of word expansion before calling the unset builtin. (This + function is only called by the unset builtin). Fixes bug reported by + + + 3/17 + ---- +jobs.c + - waitchld: move code that adds the last process substitution pid to + the bgpids array from waitchld (where it can call malloc in a signal + handler context) to cleanup_dead_jobs + + 3/19 + ---- +subst.c + - parameter_brace_expand: if expanding an array in a context where word + splitting will not take place (W_ASSIGNRHS only for now), make sure + to pass the double-quoted flag to chk_atstar so we don't get the + unquoted $* behavior, which will cause unwanted word splitting. + Fixes bug reported by isabella parakiss + +arrayfunc.c + - unbind_array_element: don't assume that caller will check and pass + only array variables; don't allow non-array variables to be unset + using the `@' or `*' subscripts and don't allow any subscripts other + than 0; return -2 in those cases + - unbind_array_element: unset a non-array variable if passed a subscript + of `0' (e.g., `unbind "scalar[0]"'). This is new functionality that + parallels the ${scalar[0]} expansion + +builtins/set.def + - unset_builtin: don't check whether a variable is an array if it's + referenced using array syntax (scalar[0]); pass it to + unbind_array_element anyway and check the result. This means that + `unset scalar' and `unset scalar[0]' are equivalent + + 3/20 + ---- +builtins/set.def + - set_builtin: make `-i' an invalid option, unconditionally for now. + From a bug-bash discussion started by Peng Yu + + 3/21 + ---- +lib/readline/colors.c + - _rl_print_color_indicator: handle dangling symlinks (C_ORPHAN) and + the `target' specifier for links (dereference S_ISLNK if the target + exists). Bug report and fix from andreas@stapelspeicher.org + +{arrayfunc,subst}.c + - add code to save and restore this_command_name in places that set + this_command_name to NULL to prevent error messages from arithmetic + evaluation. Fixes bug reported by brian.carpenter@gmail.com + +builtins/mapfile.def + - do_chop: remove a new DELIM argument from the line, instead of + unconditionally removing newline + - mapfile: if -d delim is supplied and we are breaking fields at DELIM, + remove DELIM if the -t option is supplied by passing DELIM to do_chop(). + Suggested by Geir Hauge + +doc/{bash.1,bashref.texi} + - mapfile: document new -t option behavior, defaults are the same + +builtins/alias.def + - print_alias: if the first character of an alias name is `-', add a + `-- ' after `alias' to avoid option errors when trying to reuse the + output. Bug report and fix on savannah from Pasha Bolokhov + + + 3/22 + ---- +builtins/declare.def + - declare_internal: if creating a variable does not return a valid + variable in VAR, check for null variable before dereferencing it. + This happens with nameref variables referencing variables set to + the empty string. + Fixes bug reported by Arthur200000 + + 3/23 + ---- +doc/{bash.1,bashref.texi} + - INVOCATION: add language to make it clear that non-interactive login + shells execute ~/.bash_logout if they run the `exit' builtin. From a + question from Christoph Anton Mitterer + + 4/6 + --- +subst.c + - process_substitute: increment and decrement subshell_level around + calls to parse_and_execute, as in command substitution, so + $BASH_SUBSHELL gets new values in the subshell. Fixes inconsistency + pointed out by Peng Yu + +doc/{bash.1,bashref.texi} + - read: add clarifying text to note that the -N option does not split + on $IFS, but does retain backslash as an escape character subject + to -r. Report from isabella parakiss + +builtins/declare.def + - declare_internal: unless it's the last statement in a {...} block, + NEXT_VARIABLE must be protected by braces. Bug introduced in patch + from 3/22, reported by Eduardo A. Bustamante López + + + 4/7 + --- +parse.y + - shell_getc: if bash is reading input from a string that ends with an + unquoted backslash, add another backslash instead of a newline, since + the backslash and newline will disappear in normal processing. Fixes + bug with `bash -c 'eval \\; echo y' ' skipping the eval command and + setting incorrect exit status, and `bash -ic 'eval \\; echo y' ' + seeing EOF on empty line and exiting before the echo. Keep track of + backslash state with last_was_backslash; set in char reading loop. + Fixes bug reported by Eduardo A. Bustamante López + + 4/8 + --- +shell.c + - main: check for $INSIDE_EMACS as well as $EMACS when deciding whether + or not bash is being run in a GNU emacs shell window. Don't bother + checking whether $TERM is unset because variable initialization sets + it to `dumb' if unset. Fixes from Paul Eggert + +parse.y + - push_token: new function, rotates current_token through last_read_token, + saving old values like yylex() does, sets current_token to argument + +evalfile.c + - _evalfile: if current_token is yacc_EOF, push a newline as the value + of current_token instead, using push_token(). yacc_EOF can result if + sourced file doesn't end with a newline but does end with an unescaped + backslash. Fixes bug reported by Pedro Gimeno + + +lib/readline/histfile.c + - use PARAMS(x) instead of __P(x). Bug reported by Evan Gates + + + 4/9 + --- +execute_cmd.c + - execute_simple_command: if we haven't already forked, and we have + created FIFOs, turn off the no-fork optimization in the simple + command's flags. Originally reported to savannah by Kuang-che Wu as + https://savannah.gnu.org/support/index.php?108732 + + 4/10 + ---- +trap.c + - trap_if_untrapped: new function, sets a trap on a signal if that + signal is not already trapped + - maybe_set_debug_trap: new function, sets DEBUG trap to command string + argument only if it's not already trapped + +trap.h + - maybe_set_debug_trap: new extern declaration + + +builtins/source.def + - source_builtin: if the -T option isn't set, use maybe_set_debug_trap + in the unwind-protect instead of unconditionally restoring the old + trap string. That means if the sourced file changes the DEBUG trap, + that new trap will persist instead of being undone when the old + value is restored. Fixes bug reported by Scott Bronson + + +builtins/evalstring.c + - parse_string: before we jump to top_level, if we are at the `bottom' + of the parse_and_execute stack (parse_and_execute_level == 0), call + top_level_cleanup() before jumping so the right cleanup happens (e.g., + cleaning up redirections and other state). Fixes bug reported by + Sam Liddicott + + 4/15 + ---- +jobs.c + - delete_job: only add J_ASYNC (and not J_FOREGROUND) jobs to the + bgpids array, since Posix says shells only need to save the status + of async jobs. Report and fix from John Fremlin + + 4/17 + ---- +pcomplib.c + - COMPLETE_HASH_BUCKETS: increase to 256 since bash-completion is + over 300 completions by now + +variables.c + - VARIABLES_HASH_BUCKETS: constant used to size shell variables hash + table instead of relying on hash library default. Used in calls + to hash_create in create_variable_tables(), push_temp_var(), and + push_func_var(). Currently set to 1024 because why not? From a + discussion starting at + https://lists.gnu.org/archive/html/bug-bash/2015-04/msg00089.html + - initialize_shell_variables: if FUNCTION_IMPORT is not defined, the + nested conditional compilation causes syntax errors. Bug and fix + from Eric Blake + +configure.ac + - function-import: fix typo, assign to correct variable. Found as the + result of a report by Eric Blake + +shell.c + - open_shell_script: check whether or not file argument is a + directory before opening; Posix says that implementations may open + a directory with O_RDONLY. Bug report from + Eduardo A. Bustamante López + + 4/19 + ---- +ulimit.def + - fix typo in limits[] declaration of `k' + + 4/20 + ---- +configure.ac + - add template definitions set by AC_USE_SYSTEM_EXTENSIONS from a report + from Andreas Schwab + +variables.c + - FUNCTIONS_HASH_BUCKETS: constant used to size the hash tables used for + shell functions and the text of shell function definitions. Initially + set to 512, even though it's a really rare case that someone has more + than around 150 functions, even with bash-completion + + 4/21 + ---- +shell.c + - main: malloc_set_register: change arg to 0 to disable keeping track of + allocations and frees in table; change to 1 for malloc debugging on + demand. Table is too small to keep effective track of allocations on + a modern system, need to use something like valgrind + + 4/22 + ---- +shell.c + - main: move cmd_init() (initialize word desc and word list object + caches) after startup files are read so the cache doesn't get filled + up with semi-permanent storage for shell functions and variables + +execute_cmd.c + - execute_function: use maybe_set_debug_trap in the same way as source + builtin change from 4/10 to allow functions to reset a DEBUG trap + when set -T not in effect. From a report by Peng Yu + + + 4/23 + ---- +execute_cmd.c + - execute_disk_command: don't overwrite value of subshell_environment + by assigning SUBSHELL_FORK; just OR in SUBSHELL_FORK so something + like SUBSHELL_ASYNC or SUBSHELL_PIPE is preserved + +jobs.c + - wait_for: don't call give_terminal_to if running in a subshell + environment, not just if running_in_background is set; don't want + shell functions waiting for a process to complete in a pipeline to + give the terminal to the wrong process group. Part of fix for bug + reported by Valentin Bajrami + - make_child: child process should not try to give the terminal to the + pipeline_pgrp if running as part of a pipeline (SUBSHELL_PIPE in + subshell_environment); functions in execute_cmd.c don't set that + flag until after make_child returns and the child process is running. + Rest of fix for bug reported by Valentin Bajrami + + + 4/24 + ---- +redir.c + - redirection_error: if the redirection involves {varname}, only use + `varname' in the error message if the error code is < 0 (one of the + internal redirection errors, like ambiguous or bad variable name); + otherwise the issue is probably with the filename and should be treated + as usual. Fixes problem reported by Dr. David Alan Gilbert + + +configure.ac,config.h.in + - sys/ioctl.h: add check in AC_CHECK_HEADERS macro, define HAVE_SYS_IOCTL_H + +lib/readline/{rltty,terminal}.c + - sys/ioctl.h: include unconditionally for ioctl declaration, avoid + issues with `implicit declaration' warnings. Issue originally + raised on gdb list by Chen Gang + + 4/27 + ---- +lib/malloc/table.c + - mem_table: now a circular buffer showing the state of the last + REG_TABLE_SIZE allocations rather than a hash table that quickly + fills up + +builtins/declare.def + - typeset_builtin: add -n to list of supported options. Omission + reported by Valentin Bajrami + +unwind_prot.c + - use object caches instead of malloc/free to allocate and deallocate + unwind-protect elements + - uwp_init: initialize unwind-protect element object cache + +unwind_prot.h + - uwp_init: extern declaration + +shell.c + - main: call uwp_init right after calling cmd_init -- initialize all the + object caches at the same place + +lib/malloc/table.[ch] + - mlocation_table: new table to keep track of allocation locations by + file and line, functions to initialize table, record an allocation, + and dump the table to stderr + - mregister_alloc: call mlocation_register_alloc to record the location + (source file/line) for each allocation to pinpoint malloc hot spots + by number of calls. More detail than gprof + +parse.y + - set_line_mbstate: replace free/xmalloc pair with xrealloc call + - read_token_word: call alloc_word_desc instead of xmalloc so we can take + advantage of the WORD_DESC cache + + 4/28 + ---- +execute_cmd.c + - execute_simple_command: if command execution fails because the command + is a directory, and the `autocd' option is set, add a `--' argument + to the constructed `cd' command to protect against command names with + the same name as options to `cd'. Report and fix from + isabella parakiss + + 4/30 + ---- +jobs.c + - printable_job_status, j_strsignal: change calls to strcpy and sprintf + that write to retcode_name_buffer to use strncpy and snprintf to + avoid buffer overflows caused by malicious translations. Bug and fix + from Trammell Hudson + + 5/1 + --- +strtrans.c + - ansicstr: make sure the buffer is at least 12 bytes to ensure enough + space for any eventual call to u32cesc for one multibyte char + + 5/4 + --- +jobs.c + - wait_for: if an interactive shell is running a loop and waiting for + a non-builtin command to exit, and the command exits due to SIGINT, + act as if the shell received the SIGINT as well and break the loop. + This matches the behavior when the shell is running a builtin command + in a loop, and when running a non-builtin command outside a loop, and + seems more broadly useful than running the trap handler over and over + again. Report originally from Kaz Kylheku + +builtins/set.def + - unset_builtin: use different variables for keeping the state of the + -f and -v options than the loop uses to decide whether or not to + treat a name as a function or a variable. Fixes problem with + unset_function setting `sticking' after you unset a function when + invoked with no options. Bug report from Dreamcat4 + + +shell.c + - open_shell_script: set running_shell_script to 1, set to 0 in every + other case (new variable) + - main: when checking whether or not to call start_debugger, test + running_shell_script instead of dollar_vars[1]. The goal is to not + invoke the debugger for interactive shells but allow it to run for + things like `bash --debugger -i /tmp/script'. Problem reported by + Rocky Bernstein + +lib/readline/histexpand.c + - history_event_delimiter_chars: new (as yet undocumented) variable + containing by default characters that can delimit a history event + specifier without requiring a `:': "^$*%-" as the documentation has + always said. Fixes bug reported by Anders Granlund + + + 5/10 + ---- +lib/glob/gmisc.c + - match_pattern_char, match_pattern_wchar: if passed an empty string, + return a match if the first character of the pattern is `*' + +subst.c + - pat_subst: change to allow empty strings to be replaced as long as + pattern matches empty string. Report and fix from isabella parakiss + + + 5/12 + ---- +lib/sh/strtrans.c + - ansic_wshouldquote: make behavior consistent in the event of an + invalid multibyte sequence: return 1 to the caller so the string + will be $'...' quoted + +builtins/cd.def + - cd_builtin: print the right error message even if printable_filename + changes errno (e.g., EILSEQ) + +lib/sh/shquote.c + - sh_backslash_quote: in multibyte locales, even if is_basic does not + return true, backslash-quote an ASCII character that backslash_table + says should be quoted. Part of fix for bug reported by Igor + Bogomazov + +bashline.c + - directory_exists: new function, dequotes the string argument, removes + any trailing slash, and returns true if the result is a valid + existing filename + - bash_filename_stat_hook,bash_directory_completion_hook: use + directory_exists instead of calling lstat/stat on the quoted + directory name. Rest of fix for bug reported by Igor Bogomazov + + + 5/15 + ---- +aclocal.m4 + - BASH_CHECK_MULTIBYTE: when checking for locale_charset, add $LIBINTL + to $LIBS. If we're using the included lib/intl/libintl.a, it will + include a version of locale_charset + + 5/17 + ---- +lib/readline/bind.c + - sv_isrchterm: make sure we check for v[end] == 0 while in the loop + looking for whitespace. Bug report and fix from Sergio Durigan + Junior + +lib/sh/shmbchar.c + - mbstrlen,mbsmbchar: move calculation of MB_CUR_MAX out of loop; + calculate it once at beginning + +lib/sh/mbscmp.c + - mbscmp: move calculation of MB_CUR_MAX out of loop; calculate it once + at beginning + +lib/sh/mbscasecmp.c + - mbscasecmp: move calculation of MB_CUR_MAX out of loop; calculate it + once at beginning + +lib/sh/shquote.c + - sh_backslash_quote: move calculation of MB_CUR_MAX out of loop; + calculate it once at beginning + +lib/sh/casemod.c + - sh_modcase: move calculation of MB_CUR_MAX out of loop; calculate it + once at beginning + +subst.c + - expand_word_internal: move calculation of MB_CUR_MAX out of loops; + calculate it once at beginning of function (XXX should use + locale_mb_cur_max) + + 5/22 + ---- +lib/readline/rlmbutil.h + - _rl_wcwidth: new function, short-circuits wcwidth calls for ASCII + printable characters, returns 1 for those + - WCWIDTH: call _rl_wcwidth instead of wcwidth + +lib/readline/display.c + - rl_redisplay: move calculation of MB_CUR_MAX out of loop; calculate + it once at beginning. Report and patch from Ole Laursen + + + 5/24 + ---- +lib/readline/text.c + - rl_insert: change to attempt to batch-insert pending typeahead (not + pushed input or input from a macro) that maps to rl_insert. An + attempt to suppress redisplay until readline reads all typeahead -- + pasted input, for instance. Inspired by report from Ole Laursen + . XXX - need to make this a bindable + variable; already controlled by _rl_optimize_typeahead + +lib/readline/rlprivate.h + - _rl_optimize_typeahead: extern declaration + +lib/readline/doc/{hstech.texi,history.3} + - next_history: clarify under what circumstances the history offset is + incremented; suggestion from Glenn Golden + +print_cmd.c + - print_arith_command: should be compiled in if either DPAREN_ARITHMETIC + or ARITH_FOR_COMMAND is defined. Report from Flavio Medeiros + + +flags.c + - change_flag: new variable verbose_flag, set when `v' flag modified; + sets value of echo_input_at_read correspondingly + +flags.h + - verbose_flag: new extern declaration + +shell.c + - long_options: --verbose now sets verbose_flag + - main: set echo_input_at_read from verbose_flag after parsing any + long options + +builtins/fc.def + - fc_builtin: don't unwind-protect echo_input_at_read directly; set it + to 1 before calling fc_execute_file as before, and reset it to value + of global verbose_flag using set_verbose_flag called from an + unwind_protect. Report from isabella parakiss + +builtins/shopt.def + - shopt_set_debug_mode: new function, called when the extdebug shell + option changes. Right now, it sets function_trace_mode when extdebug + is enabled, and turns off when extdebug is disabled. The + documentation has always said that shopt does this. Report from + Peng Yu + + 5/27 + ---- +findcmd.[ch] + - add support for EXECIGNORE shell variable, list of extglob patterns + that prevent matching filenames from being identified as executable + files + +variables.c + - EXECIGNORE: arrange for findcmd.c:setup_exec_ignore to be called when + $EXECIGNORE changes + +variables.h + - sv_execignore: extern declaration + +doc/{bash.1,bashref.texi} + - document EXECIGNORE variable + + 5/28 + ---- +lib/readline/callback.c + - rl_callback_sigcleanup: new function, cleans up and unsets any state + rl_callback_read_char uses. Intended to be used after a signal + +lib/readline/signals.c + - _rl_handle_signal: call rl_callback_sigcleanup on SIGINT. Fixes bug + reported to python group by Martin Panter + +lib/readline/isearch.c + - _rl_isearch_cleanup: now a public function so rl_callback_cleanup can + call it + +lib/readline/search.c + - _rl_nsearch_cleanup: now a public function so rl_callback_cleanup can + call it + +lib/readline/rlprivate.h + - _rl_[in]search_cleanup: extern declarations + +lib/readline/readline.h + - rl_callback_sigcleanup: new extern declaration + +lib/readline/doc/rltech.texi + - rl_callback_sigcleanup: documented + +lib/readline/readline.h + - bump readline version to 7.0 due to addition of rl_callback_sigcleanup + + 5/29 + ---- +builtins/declare.def + - declare_internal: if we are trying to change attributes or value for + a nameref variable whose value points to an unset variable, make + sure we create a new variable whose name is the value of the nameref + variable. That is, + + declare -n foo=bar + unset foo # unsets bar + declare -i foo + + should create a (invisible) variable named `bar' with the integer + attribute. Fixes problem reported by Greg Wooledge + + +builtins/set.def + - unset_builtin: if we find a nameref variable when we look it up with + find_variable (the returned variable has a name different from what + we looked up), make sure we use that new name for the rest of the + function rather than rely on unbind_variable to do the same thing as + find_variable. Fixes problem reported by Greg Wooledge + + - unset_builtin: if we try to unset a nameref variable whose value is + not a set variable, make sure we don't try to unset the nameref + itself, but rather the variable it points to. This ensures that the + following always works as it should + + declare -n foo=bar + unset foo # unsets bar and leaves foo unchanged + +lib/readline/funmap.c + - vi-insertion-mode: make sure it maps to rl_vi_insert_mode, which is + actually what the `i' keybinding in vi_movement_keymap maps to. + Cosmetic fix from isabella parakiss + + 6/2 + --- +general.c + - conf_standard_path: moved get_standard_path here from command.def; made + public function + +general.h + - conf_standard_path: extern declaration + + + 6/3 + --- +parse.y + - parse_matched_pair: make sure that command substitution constructs + within ${...} expansions are parsed as such using parse_comsub, so + the P_FIRSTCLOSE flag doesn't stop parsing if a right brace appears + within the comsub. Report from Christos Zoulas + +findcmd.c + - search_for_command: take two new flags for FLAGS arg: CMDSRCH_STDPATH, + which means use the command -p path, and CMDSRCH_TEMPENV, currently + unused. Existing flag value of 1 now CMDSRCH_HASH + - search_for_command: don't set `path' to NULL if it wasn't found in + the temporary environment; we can use it later + - search_for_command: look for the hashed file if temp_path == 0, not + if we set path back to 0 (or path lookup failed) + - search_for_command: just call find_user_command_in_path with a + pathlist argument that's set depending on the flags passed + - find_in_path: new function, just calls find_user_command_in_path at + this point + - search_for_command: don't put non-existent files into the hash table + +findcmd.h + - CMDSRCH_*: new flags for search_for_command + - find_in_path: extern declaration + +execute_cmd.c + - execute_disk_command: check for CMD_STDPATH and call search_for_command + with CMDSRCH_STDPATH if it's set + +builtins/command.def + - command_builtin: if -p given without -v or -V, set the CMD_STDPATH + flag in the simple command we construct from the rest of the + argument list. This fixes the command -p cmd issue with changing + $PATH for the duration of `cmd's execution reported by + + +builtins/common.h + - CDESC_STDPATH: new flag for describe_command; means to use standard + path for command -pv or -pV + +builtins/command.def + - command_builtin: if -p given with -v or -V, pass the CDESC_STDPATH + flag to describe_command + +builtins/type.def + - describe_command: if given the CDESC_STDPATH flag, use find_in_path + with the conf_standard_path() result. Since `all' will never be on + with this flag, at least not yet, we can allocate and free the path + list. Fixes the bug of a temporary environment value for PATH + preceding a `command -pv' or `command -pV' persisting when the + command finishes and means we use fewer unwind-protects + + 6/4 + --- +Makefile.in (plus other Makefile.ins) + - VPATH: remove `.' from VPATH value. It's not needed any more and it + trips a GNU make 4.1 bug on Cygwin. Report and fix from Eric Blake + + +lib/readline/histfile.c + - history_tempfile: new function, takes history file name as template + and creates a temp file name including the PID + - history_truncate_file, history_do_write: instead of creating backup + and restoring it on failure, use history_tempfile to create a temp + file name, write to it, then rename to original history filename + (handling symlinks using history_restore()). Original report and + patch from Russell Stuart + +doc/{bash.1,bashref.texi} + - ulimit: clarify that -c and -f are in increments of 512 bytes when + in posix mode. Fix from Robin Johnson via + + + 6/9 + --- +execute_cmd.c + - execute_in_subshell: don't call restore_default_signal for the exit + trap, reset_signal_handlers already does the right thing and keeps + the trap string around; no need to kill trap string. Bug report + from Miroslav Koskar + + 6/11 + ---- +nojobs.c + - find_proc_slot: now takes pid as an argument to avoid finding old + procs when pids wrap around + - add_pid: pass pid to find_proc_slot to avoid multiple instances of + the same pid in the list when pids wrap around. Fixes bug reported + by Roy Keene + +execute_cmd.c + - REAP: test for job_control == 0 also to determine whether or not + to call reap_dead_jobs, since shells without job control enabled + don't report on background process status + +doc/bash.1,lib/readline/doc/hsuser.texi + - history: clarify documentation of -a option to note that it will not + append the same line to the history file more than once. Fixes + problem reported by Reuben Thomas + + 6/12 + ---- +execute_cmd.c + - execute_in_subshell: don't bother decrementing subshell_level before + this returns; the caller will just exit. This means that + $BASH_SUBSHELL will have consistent values in the subshell and any + subsequent exit trap. Fixes bug reported by Miroslav Koskar + + - shell_execve: before longjmp to subshell_top_level, call reset_parser + to free up any input line and stack of pushed strings + +parse.y + - mk_alexpansion: if the last character of the alias is a shell + metacharacter, don't add a space to the string following the alias + value, since that will change the meaning of the command. THIS IS + NOT BACKWARDS COMPATIBLE AND MAY REQUIRE REVERTING. Inspired by an + email message from Jilles Tjoelker to austin + group + + 6/13 + ---- +subst.c + - dequote_string: don't turn strings consisting of a single CTLESC + into empty strings; return them unmodified. The idea is that there + is nothing to quote. This means that something like + c=$'\001' + x=$c + results in x containing '\001' when IFS=$'\001'. See if this will + cause problems by adding a debugging statement in the code + + 6/15 + ---- +parse.y + - CHECK_FOR_RESERVED_WORD: don't return ESAC when you read `esac' + after a `|' while in a case pattern list (parser_state & PST_CASEPAT). + This is Posix grammar rule 4 + (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02) + + 6/16 + ---- +jobs.c + - wait_for: make sure we queue SIGCHLD signals if a SIGCHLD trap + handler is running (signal_in_progress or IMPOSSIBLE_TRAP_HANDLER), + since we allow recursive trap invocations now + - wait_for: make sure we treat SIGCHLD as trapped if the trap handler + is set to IMPOSSIBLE_TRAP_HANDLER so we don't miss signals during + calls to run_sigchld_trap() + +trap.c + - run_pending_traps: since we allow recursive trap handler invocations, + make sure we set pending_traps[SIGCHLD] to 0 while we mark the + signal handler in progress (SIG_INPROGRESS) and don't reset it to 0 + after run_sigchld_trap returns in case more SIGCHLDs have been + queued while it's running + + 6/22 + ---- +lib/readline/readline.c + - _rl_dispatch_subseq: if we shadowed any function, not just self- + insert, bind that function to the key we shadowed and dispatch on it. + This preserves and dispatches off the original key, not ANYOTHERKEY, + and makes sure we are dispatching from a keymap with the right key + binding. Fixes bug reported by Carlos Pita + + + 6/23 + ---- +bashline.c + - attempt_shell_completion: don't read past the end of rl_line_buffer + while skipping assignment statements before command names. Fix for + bug reported by Hanno Böck + +lib/readline/parens.c + - _rl_enable_paren_matching: make paren matching work in vi insert + mode. Really, this time. Bug report from Carlos Pita + + + 6/29 + ---- +parse.y + - parse_comsub: when starting to parse a word, make sure that we set + lex_rwlen to 0 along with lex_wlen if we are in a position where we + can read a reserved word. Fixes bug reported by Nathan Neulinger + + + 6/30 + ---- +sig.h + - include unconditionally and rely on guards in sig.h to + keep from including it more than once. Irix 6.5 defines SIG_DFL + in other files and defeats the test of SIG_DFL. Fixes bug + reported by Klaus Ziegler + +alias.c + - ALIAS_HASH_BUCKETS: table size increased to 64 + + 7/7 + --- + +{jobs,nojobs}.c + - wait_sigint_cleanup: new function, to be called by longjmp targets + for wait_intr_buf. Performs any necessary cleanup of internal waitchld + state before going back to top level + +jobs.h + - wait_sigint_cleanup: new extern declaration + +builtins/wait.def + - wait_builtin: call wait_sigint_cleanup after longjmp back to + wait_intr_buf on interrupt + +[bash-4.4-alpha frozen] + + 7/7 + --- +bashline.c + - attempt_shell_completion: when skipping assignment statements, don't + skip past rl_point to find the word on which to perform programmable + completion. Fixes bug reported by Hanno Böck + + 7/10 + ---- + +pcomplib.c + - compspec_copy: set the refcount on the copy to 1, since it's a freshly + allocated copy and there are no other pointers to it. Fixes memory + leak from gen_progcomp_completions + +lib/readline/complete.c + - printable_part: if the pathname passed is just `/', just return it + instead of potentially reading before the `/'. Fixes bug reported + by Hanno Böck + + 7/11 + ---- +support/man2html.c + - change calls to malloc to use xmalloc; provide standard xmalloc + definition. Report from Bill Parker + +builtins/wait.def + - wait_intr_flag: set to denote validity of wait_intr_buf as target + for longjmp; reset by WAIT_RETURN macro; should always be 0 when + wait_builtin returns + +quit.h + - CHECK_WAIT_INTR: now also checks wait_intr_flag to ensure valid state + of wait_intr_buf before sh_longjmp + +{jobs,nojobs}.c + - wait_intr_flag: extern declaration for use by CHECK_WAIT_INTR + +sig.c + - wait_intr_flag: set back to 0 every place the shell resets state after + a jump to top_level + - sigint_sighandler: only set wait_signal_received if wait_intr_flag + indicates that the wait builtin has correctly set wait_intr_buf. + Final fix for bug reported by Ondrej Oprala + +subst.c + - parameter_brace_expand: fix so that ${!vvv@} is not interpreted as + introducing a `@' operator, but instead retains its meaning as all + variables whose name begins with vvv. Fixes bug reported by + konsolebox + + 7/14 + ---- +execute_cmd.c + - execute_connection: remove the fork optimization from and AND_AND + and OR_OR cases; it has trouble with `a && b && c', since the `&&' + is left-associative. Putting that code here can result in unwanted + fork optimizations since the `b' will end up as `second' on a + recursive call to execute_command. Bug reported by Mike Frysinger + + +builtins/evalstring.c + - optimize_fork: moved code from execute_connection to here; checks + whether the RHS of a && or || passes the suppress_fork() tests and + turns on the NO_FORK bit if so + - parse_and_execute: if suppress_fork() tests fail, check whether the + command to be executed is a connection and attempt to optimize the + fork for the right side using optimize_fork(). The key is dealing + with the entire command passed to `bash -c' or `eval' + +builtins/common.h + - optimize_fork: new extern declaration + +execute_cmd.c + - execute_command_internal: enable code put in to undo redirections + before exiting the shell due to `set -e' in the case of a shell + function that gets command-not-found or a syntax error. Reported + back in May, 2014 by Mark Ferrell + +bashhist.c + - bash_history_inhibit_expansion: enable change from 1/10 that skips + over history expansion character in command and process + substitution + + 7/15 + ---- +lib/readline/{history,undo}.c + - replace_history_data now _hs_replace_history_data + + 7/16 + ---- +lib/readline/readline.c + - make sure _rl_to_lower doesn't ever get characters that are outside + of its valid range by casting arg to unsigned char + +lib/readline/colors.h + - change completion prefix color (C_PREFIX) to be the same as C_SOCK, + which is less likely to collide with file type colorings (magenta) + +lib/readline/complete.c + - fnprint: now takes an additional argument: the full, expanded pathname + corresponding to the `toprint' argument + - fnprint: don't zero out prefix_bytes if we're not printing the + ellipisis but we still want to use prefix_bytes for displaying + the common prefix in a color + - print_filename: move colored-stats display responsibility into fnprint + - fnprint: change so colored-prefix and colored-stats can cooperate + and display filenames with multiple colors: one for the prefix and + one for the file type. The prefix is displayed in the prefix color + and the remainder of the pathname, if any, is displayed in the color + corresponding to the file type. Report and suggestion from Mike + Frysinger + + 7/17 + ---- +lib/readline/readline.[ch] + - rl_readline_state: now unsigned long, prepare for more than 32 states + + + 7/18 + ---- +lib/readline/history.h + - history_offset: now declared here, was always a global variable + - copy_history_entry: now declared here, part of the public interface + - alloc_history_entry: now declared here, part of the public interface + + 7/20 + ---- +lib/readline/readline.h + - RL_STATE_CHARSEARCH: new state, for vi mode character search. Was + previously handled by simply setting _rl_callback_func + +lib/readline/vi_mode.c + - rl_domove_motion_callback: split into two functions, remaining code + after _rl_dispatch call goes into new function + _rl_vi_domove_motion_cleanup + - rl_vi_char_search: set RL_STATE_CHARSEARCH + - rl_vi_char_search: sets `i2' member of callback data to the key used + to invoke the char search + - _rl_vi_callback_char_search: unset RL_STATE_CHARSEARCH after reading + the character to find + - _rl_vi_domove_motion_cleanup: make sure RL_STATE_VIMOTION is unset in + all cases where this function returns + - _rl_vi_domove_motion_cleanup: use `end' member of vi motion context + as value of rl_end to restore after adding blank at end of line in + rl_domove_motion_callback; avoids need to keep `old_end' and somehow + pass it between the two functions + +lib/readline/rlprivate.h + - _rl_vi_domove_motion_cleanup: new extern declaration + +lib/readline/callback.c + - rl_callback_read_char: handle RL_STATE_CHARSEARCH, including case + where char search is vi motion command for d/c/y/m and RL_STATE_VIMOTION + is set when this is called. Last of set of fixes for bug reported + by Carlos Pita with vi-mode `dty' command + in callback mode + + 7/21 + ---- +subst.c + - command_substitute, process_substitute: add QUIT call in the child + after restoring original signal handlers to catch post-fork SIGINT + or terminating signal + +jobs.c,nojobs.c + - make_child: after forking, clear interrupt_state in child + before restoring signal mask so children get their own set of + interrupts + + 7/22 + ---- +lib/sh/shquote.c + - sh_double_quote: since all uses of the return value from this function + are for display and not subject to subsequent expansion, we don't + need to protect CTLESC and CTLNUL with CTLESC. Bug report and fix + from isabella parakiss + +parse.y + - decode_prompt_string: need to protect literal instances of CTLESC + and CTLNUL with CTLESC, even if they are not coming out of one of + the backslash-expansions + +subst.c + - make_internal_declare: fixed memory leak; make_internal_declare should + free the memory it allocates to construct the word list. From Red + Hat bug 1245233; https://bugzilla.redhat.com/show_bug.cgi?id=1245233 + +lib/readline/readline.c + - _rl_dispatch_subseq: when checking whether an ESC in vi insert mode + should be treated as part of a key sequence or as a single char, + make sure we are getting input from the keyboard before we check + _rl_input_queued(). If we are getting input from a macro, this + causes a needless delay. Report from Carlos Pita + + + 7/23 + ---- +input.c + - save_bash_input: before checking to see whether or not a new fd has a + stale associated buffer, make sure that the new fd is within bounds. + Bug report and fix from Alexey Makhalov + + + 7/24 + ---- +doc/{bash.1,bashref.texi} + - note that the `return' builtin accepts arguments beginning with `-' + without requiring `--' + + 7/27 + ---- +examples/loadables/Makefile.in + - add variables and targets to support `make install'; installs + supported builtins in $(libdir)/bash + + 7/28 + ---- +lib/readline/{readline,rlprivate}.h, lib/readline/display.c + - rearrange some structure members for better alignment and to reduce + padding. Fix from + +tests/run-* + - use BASH_TSTOUT instead of hardcoded /tmp/xx as output file + +trap.[ch] + - maybe_set_error_trap: set a trap for the ERR trap if it is not already + trapped; similar to maybe_set_debug_trap back from 4/10 + +lib/malloc/malloc.c + - internal_free: make sure `ubytes' is initialized if MALLOC_WATCH is + defined and we'll be passing it to _malloc_ckwatch. Report from + Flavio Medeiros + +execute_cmd.c + - execute_function: use maybe_set_error_trap in the same way as + maybe_set_debug_trap. Fixes bug reported by David Waddell + + + 7/29 + ---- +jobs.c + - wait_for: no longer need to call job_signal_status when checking + whether a comsub shell reaped a child that died due to SIGINT; code + now uses child_caught_sigint + + 7/30 + ---- +builtins/exec.def + - exec_builtin: after call to restore_original_signals, need to call + default_tty_job_signals to undo changes done by initialize_job_signals. + Fix for problem reported by Andreas Schwab + +doc/{bash.1,bashref.texi} + - clarify definition of metacharacter to explicitly include newline; + prompted by report from George Gallo + + 8/3 + --- +lib/readline/search.c + - _rl_free_history_entry: should be void, not int. Report from + Dilyan Palauzov + +general.h + - sh_load_func_t, sh_unload_func_t: new function pointer types, used by + enable for load and unload hook functions + +builtins/enable.def + - dyn_load_builtin: attempt to execute a function named + BUILTIN_builtin_load, where BUILTIN is the name of the command being + loaded. If that function returns 0, the load fails + - dyn_unload_builtin: attempt to execute a function named + BUILTIN_builtin_unload, where BUILTIN is the name of the command + being unloaded. It offers a dynamic builtin a way to clean up after + itself. Inspired by suggestion from Piotr Grzybowski + in response to a bug report from isabella + parakiss + + 8/6 + --- +lib/readline/colors.[ch] + - _rl_print_color_indicator: now takes `const char *' argument + +lib/readline/complete.c + - colored_stat_start: now takes `const char *' argument + +lib/malloc/table.h + - ma_table_t: `file' member is now `const char *' + +lib/malloc/table.c + - mlocation_register_alloc: make sure variable assigned to `file' in + ma_table_t is of type `const char *'. Fixes from Dilyan Palauzov + + +lib/termcap/termcap.[ch] + - tputs: should return int instead of void + +lib/readline/readline.h + - RL_STATE_DONE: correct value, avoid collision + +lib/readline/vi_mode.c + - _rl_vi_redoing: now global, added _rl_ prefix to `vi_redoing' + +lib/readline/readline.c + - _rl_subseq_result: call _rl_dispatch_subseq instead of rl_dispatch to + avoid changing _rl_dispatching_keymap + - _rl_subseq_result: in the -2 case, set _rl_dispatching_keymap to the + map passed as an argument. Without this, vi mode doesn't call + rl_vi_set_last when it should + - _rl_dispatch_subseq: if redoing a vi mode command with `.' + (_rl_vi_redoing != 0) in callback mode and we're indirecting into + another keymap that has shadowed the key corresponding to the command + we are redoing, just call _rl_subseq_result immediately: vi redo + doesn't need to read any additional input, and rl_vi_redo assumes + that a single call to rl_dispatch is sufficient. Fixes bug reported + by Carlos Pita + + 8/7 + --- +subst.c + - parameter_brace_expand: if a substitution (parameter expansion) error + occurs, and shell_compatibility_level is <= 43, return expansion error + as in all previous versions. If shell_compatibility_level is > 43, + a posix-mode non-interactive shell will consider this a fatal error. + Problem reported by Christian Neukirchen + +doc/bashref.texi + - documented that word expansion errors cause fatal errors in posix mode + non-interactive shells + + 8/8 + --- +subst.h + - SD_COMPLETE: skip_to_delim being called as part of word completion + - SX_COMPLETE: one of the string_extract functions being called as + part of word completion + +bashline.c + - find_cmd_start,find_cmd_end,find_cmd_name: call skip_to_delim with + SD_COMPLETE flag + +subst.c + - skip_double_quoted: takes new flags argument; changed callers + - skip_double_quoted: if flags argument includes SX_COMPLETE, pass it + to extract_command_subst + - extract_command_subst: if flags&SX_COMPLETE, call + extract_delimited_string instead of xparse_dolparen, since completion + may call this for unterminated command substitutions. Fixes + (imperfectly) bug reported by Ingo Ruhnke + - skip_to_delim: if passed the SD_COMPLETE flag, pass the SX_COMPLETE + flag to skip_double_quoted + - char_is_quoted: pass SX_COMPLETE flag to skip_double_quoted + - unclosed_pair: pass SX_COMPLETE flag to skip_double_quoted + + 8/9 + --- +execute_cmd.c + - time_command: catch longjmps to top_level and print command timing + statistics even after a jump to top_level. Fixes issue reported by + Sam Watkins + + 8/10 + ---- +config-top.h + - OPENLOG_OPTS: if SYSLOG_HISTORY is defined, define to LOG_PID, so + each message is tagged with the pid + +bashhist.h + - bash_syslog_history: the first time it's called, call openlog with + OPENLOG_OPTS and SYSLOG_FACILITY + + 8/11 + ---- +doc/{bash.1,bashref.texi} + - GROUPS,FUNCNAME: change description to note that assignments are + silently ignored, but do not return an error (which would constitute + an assignment error and cause posix mode shells to abort). Problem + pointed out by Grzegorz Bajson + + 8/12 + ---- +subst.c + - parameter_brace_expand_indir: if the value of the indirectly expanded + variable isn't something that the shell would expand if it were inside + ${}, error out right away before calling parameter_brace_expand_word. + Fixes problem reported by isabella parakiss + - parameter_brace_expand: handle returning &expand_wdesc_error or + &expand_wdesc_fatal from parameter_brace_expand_indir in case it does + that someday + + 8/13 + ---- +jobs.c + - {save,restore}_pipeline: saved_pipeline now a linked list of pipelines, + new ones allocated in save_pipeline and freed in restore_pipeline. + This allow multiple nested calls to save_pipeline (e.g., in traps + and then in process substitution). Fix for bug reported by isabella + parakiss + +print_cmd.c + - named_function_string: if printing a function with the same name as a + reserved word, add the `function ' keyword before the name to avoid + parsing problems when trying to reuse it as input. Fix for bug + reported by isabella parakiss + + 8/14 + ---- +lib/readline/text.c + - rl_insert: when optimizing typeahead, make sure we set rl_last_func + ourselves if we set pending input, since the mainline code path + won't set rl_last_func if input is pending. Fixes bug reported by + Hiroo Hayashi + + 8/15 + ---- +builtins/type.def + - describe_command: if using the short description (CDESC_SHORTDESC) in + posix mode, describe posix special builtins as such. Requested by + Stephane Chazelas + +builtins/enable.def + - BASH_LOADABLES_PATH: a colon-separated list of directories where bash + looks for loadable builtins specified as arguments to `enable -f' + +doc/{bash.1,bashref.texi} + - BASH_LOADABLES_PATH: document new shell variable + +configure.ac,Makefile.in,builtins/Makefile.in + - loadablesdir: set in configure, substitute into Makefiles. Reserved + for future use + + 8/18 + ---- +subst.c + - shell_expand_word_list: if make_internal_declare fails, make sure to + propagate that error return back and make the assignment statement + fail. Fixes seg fault reported by Sergey Tselikh + + 8/20 + ---- +builtins/declare.def + - declare_internal: made a slight tweak to the warning message about + quoted compound assignments by printing it only if the array (indexed + or assoc) does not already exist + + 8/21 + ---- +braces.c + - mkseq: call strvec_dispose before throw_to_top_level if we saw SIGINT + to avoid a memory leak + +trap.c + - maybe_set_return_trap: set the RETURN trap to string if it's not + already trapped, in the same way as the debug and error traps + +execute_cmd.c + - execute_function: use maybe_set_return_trap to allow functions to set + return traps that persist across calls even if function tracing is + enabled + +lib/readline/input.c + - rl_gather_tyi: make sure errno reset to 0 after select call, for + ioctl and read + - rl_gather_tyi: if read returns -1/EIO, return -1 + - rl_read_key: if rl_gather_tyi returns -1/EIO, return READERR if in + RL_STATE_READCMD (reading command in readline_internal_char), EOF + if not (like rl_getc). Continue to return '\n' on other errors; + rl_done = 1 in any case. Fix for issue reported by + Lubomir Rintel + +lib/readline/{misc,text,vi_mode}.c + - fix return values from rl_read_key to handle < 0 + + 8/22 + ---- + +parse.y + - parsing_redirection: macro that expands to true if the last read + token (always passed as an argument) is a redirection token that + will leave us reading a word that's the target of the redirection + - command_token_position: make sure that even if the parser state + indicates we are reading a simple command (PST_REDIRLIST), we do + not perform alias expansion on a WORD that is part of a redirection, + using parsing_redirection() to do so. Fixes but reported to Red Hat + by Robert Alm Nilsson + https://bugzilla.redhat.com/show_bug.cgi?id=795795 + +builtins/declare.def + - declare_internal: only print the warning now if the variable is not + already an array or if we are not creating an array with -a or -A, + cuts down the spurious warnings + - declare_internal: even if the rhs of the assignment looks like a + compound array, if we're not assigning to an existing array or we're + not creating an array, make it an array subscript assignment. This + means things like declare a[1]='(foo)' and a[1]='(foo)' behave + identically + +builtins/help.def + - wdispcolumn: change use of displen and add new dispchars variable to + deal with locales where each wide character does not take up one + column position. Fix for bug reported by Mingye (Arthur) Wang + + + 8/23 + ---- +sig.c + - sigint_sighandler: if we get a SIGINT while this_shell_builtin == + wait_builtin, perform the special handling only if wait_intr_flag + is non-zero, don't just use it to set wait_sigint_received. This + makes sure we run bashline_set_event_hook. Fixes bug reported by + isabella parakiss + + 8/25 + ---- +subst.h + - SD_HISTEXP: new flag for skip_to_delim, indicates we are looking for + the history expansion character (special double quote handling) + - skip_to_delim: handle SD_HISTEXP flag, changes double quote handling + to be similar to history library: don't call skip_double_quote, make + sure single quotes aren't special in double quotes, but continue to + skip over $(), ${}, and other similar constructs + + 8/27 + ---- +support/bash.pc.in + - new file, pkgconfig template for bash, installed to support nascent + loadable builtins dev environment + +examples/loadables/Makefile.inc + - new file, example Makefile with correct definitions for loadable + builtin development + +configure.ac + - headersdir: directory where headers get installed to support loadable + builtin development + - examples/loadables/Makefile.inc, support/bash.pc: create + +Makefile.in + - INSTALLED_HEADERS, INSTALLED_BUILTINS_HEADERS, INSTALLED_INCFILES, + CREATED_HEADERS: new variables holding names of include files to + install into $(headersdir) for loadable builtin development + - install-headers,install-headers-dirs: new targets to support + installing headers into $(headersdir) and subdirectories for loadable + builtin development + - uninstall-headers: target to uninistall headers in $(headersdir) + - uninstall: call uninstall-headers whether or not install-headers + was done; add uninstall in examples/loadables + - install: add install in examples/loadables + - clean: add clean in examples/loadables + +examples/loadables/Makefile.in + - install-supported, install-unsupported: new targets, make install + chooses one based on $(SHOBJ_STATUS) + - install-supported: now cds to the top level build directory and + installs the header files + - install-supported: now installs Makefile.inc to $(loadablesdir) as + an example + - uninstall-supported,uninistall-unsupported: uninstall targets, + make uninstall chooses one based on $(SHOBJ_STATUS) + + 8/31 + ---- +lib/glob/Makefile.in + - CPPFLAGS: move after ${INCLUDES} so library-specific include paths + take precedence. This is what the other parts of the shell do. + Report from Poor Yorick + +builtins/read.def + - reset_alarm: cancel alarm before restoring signal handler to avoid + possible race condition. Report and fix from Oleg Popov + + +subst.c + - string_extract_verbatim: if SEPARATORS is "'", don't short-circuit + to string_extract_single_quoted unless the SX_NOCTLESC flag is set. + Callers expect this function to honor CTLESC, even to quote a single + quote. Fixes bug reported by isabella parakiss + and several others + + 9/2 + --- +include/chartypes.h + - TOCTRL: handle '?' by special-casing it to 0x7f. Fixes a problem + with $'\c?' reported by Helmut Karlowski + +redir.c + - write_here_string: don't word-split the here string document. The + bash documentation has always said this doesn't happen, even though + bash has done so for years, and other shells that implement here- + strings don't perform any word splitting. The practical effect is + that sequences of IFS characters are collapsed to spaces. Fixes + bug reported by Clint Hepner + + 9/3 + --- +doc/{bash.1,bashref.texi} + - add \? to the list of backslash escapes expanded by $'...' ANSI-C + quoting. It was expanded but not documented + +lib/readline/util.c + - _rl_audit_tty: updated from Red Hat patch + +lib/readline/readline.c + - HAVE_DECL_AUDIT_USER_TTY: correct #define check + + 9/13 + ---- +shell.c + - read_from_stdin: make sure value set to 1 appropriately if the shell + is reading from standard input, as Posix seems to specify (?) + +lib/readline/kill.c + - _rl_copy_to_kill_ring: don't assume that rl_kill_ring has been + allocated if _rl_last_command_was_kill is non-zero; make sure it's + non-null before indexing into it + + 9/15 + ---- +variables.c + - initialize_shell_variables: cope with a NULL env pointer. Fixes bug + reported by ziyunfei <446240525@qq.com> + + 9/16 + ---- +builtins/exec.def + - exec_builtin: if -c is supplied, pass an empty array instead of a NULL + pointer to shell_execve + +variables.c + - set_pwd: only believe $PWD if it begins with a slash; try to + canonicalize it and set it to physical path if canonicalization fails. + Reported by ziyunfei <446240525@qq.com> + + 9/17 + ---- +subst.c + - do_compound_assignment: make sure to dispose of word list generated + by expand_compound_array_assignment; fixes memory leak reported in + https://bugzilla.redhat.com/show_bug.cgi?id=1264101 + +variables.c + - adjust_shell_level: clamp the value of shell_level at 1000 and reset + there, instead of > 1000, since the itos replacement code doesn't + handle the value 1000. Fixes bug reported by ziyunfei + <446240525@qq.com> + +shell.h,parse.y + - save_parser_state,restore_parser_state: now save and restore + redir_stack, short-circuiting if need_here_doc == 0. If we save a + non-zero value for need_here_doc, we have to make sure there is + something valid for gather_here_documents to work on. Fixes bug + reported by Brian Carpenter + + 9/18 + ---- +array.c + - array_to_assign: use ansic_shouldquote to check whether each element + value contains non-printable characters and use ansic_quote to + generate the value instead of using sh_double_quote unconditionally + +assoc.c + - assoc_to_assign: if either the key or the value of an associative + array element contains non-printable characters (ansic_shouldquote + returns true), use ansic_quote to quote them instead of using double + quotes unconditionally + + 9/19 + ---- +subst.c + - pat_subst: handle REP being NULL. Fixes bug reported by Brian + Carpenter + +builtins/evalstring.c + - parse_string: if we get a longjmp to top_level with DISCARD as the + code (in which case we are going to go on), return -DISCARD to our + caller (always xparse_dolparen) after doing our own cleanup instead + of calling jump_to_top_level + +parse.y + - xparse_dolparen: if parse_string returns < 0, do the appropriate + cleanup and then jump_to_top_level with the negative of the return + value. This allows us to do the appropriate parser cleanup in + case we're not going to exit the shell. Fixes bug reported by Brian + Carpenter + +subst.c + - extract_delimited_string: if a recursive call to one of the extract_ + functions or a call to ADVANCE_CHAR leaves i past the end of the + string, cut the loop off at the end of the string. Fixes bug + reported by Brian Carpenter + + 9/20 + ---- +subst.c + - get_var_and_type: return appropriate values if variable indirection + results in a NULL variable. Fixes bug reported by Brian Carpenter + + +lib/readline/history.c + - history_get_time: handle strtol overflows caused by malicious + modifications to timestamps in the history file. Fixes issue + reported by rens@endoria.net + + 9/21 + ---- +lib/readline/rlconf.h + - ENABLE_AUDIT_TTY_SUPPORT: now undefined (off) by default + + 9/24 + ---- +jobs.c + - waitchld: if we get a SIGINT while waiting for a child to exit, but + the kernel doesn't interrupt the waitpid(2) call, assume the child + caught SIGINT if it exited for some reason other than SIGINT. Fix + suggested by Stephane Chazelas + +input.c + - make_buffered_stream: use B_TEXT in buffered stream flags instead + of (typo) O_TEXT. Report and fix from Eric Blake + + 9/27 + ---- +execute_cmd.c + - shell_execve: call reset_parser before calling initialize_subshell, + which calls delete_all_aliases. reset_parser wants to free the + pushed string list, which has pointers back into the alias table + (use after free) + - execute_simple_command: if we fork for an async command, make sure + the child process increments shell_level before performing any + word expansions, so $BASH_SUBSHELL is incremented. Fixes issue + reported by ziyunfei <446240525@qq.com> + + 10/1 + ---- +builtins/kill.def + - kill_builtin: make -L equivalent to -l for compatibility with other + (Linux) versions of kill + +doc/{bash.1,bashref.texi} + - kill: document new `-L' option + + 10/2 + ---- +[bash-4.4-beta frozen] + + 10/5 + ---- +doc/{bash.1,bashref.texi} + - LC_TIME: document that the shell recognizes it and calls setlocale + when it changes; and that the shell uses it for time formatting + + 10/6 + ---- +subst.c + - skip_single_quoted: now takes an additional `flags' argument, like + skip_double_quoted; changed callers + - skip_single_quoted: now pays attention to SX_COMPLETE flag, allows + backslash to escape single quote, like $'...' allows + - skip_to_delim: added case where we are completing and we are + skipping over a $'...' string to call skip_single_quoted with + SX_COMPLETE flag to allow backslash to quote single quote. Fixes + bug reported by Daniel Colascione + - char_is_quoted: make analogous changes to handle $'...' so we can + accommodate $'ab \' cd' + + 10/11 + ----- +subst.c,bashjmp.h + - no_longjmp_on_fatal_error: now global so other parts of the shell can + use it + +arrayfunc.c + - expand_array_index: if no_longjmp_on_fatal_error is non-zero, don't + longjmp to top_level, just return 0. Fixes bug reported by + isabella parakiss + +subst.c + - CQ_RETURN: restore old value of no_longjmp_on_fatal_error (oldjmp); + make sure all callers (skip_matched_pair, skip_to_delim, + char_is_quoted) save no_longjmp_on_fatal_error to oldjmp before + setting it to 1 + +expr.c + - expr_streval: if longjmping after an unbound variable error, jump + back to expr toplevel (evalbuf) if no_longjmp_on_fatal_error is set + in an interactive shell + +variables.c + - push_func_var: if pushing an array variable, such as when a variable + in the temporary environment is promoted to an array by mapfile when + the shell is in posix mode (so variable assignments preceding special + builtins or shell functions persist in the shell environment after + the builtin returns), make sure to copy the array or hash table so + the variable is duplicated correctly. Fixes seg fault reported by + Linda Walsh + + 10/13 + ----- +variables.c + - initialize_shell_variables: add call to sv_shcompat, so BASH_COMPAT + can be set in the initial environment + +execute_cmd.c + - execute_function: set loop_level to 0 only if shell_compatibility_level + is greater than bash-4.3; this was kind of an incompatible change. + Report from Carlos Pita + +COMPAT,doc/{bash.1,bashref.texi} + - compat43: added loop_level changes to description + + 10/15 + ----- +lib/sh/casemod.c,lib/readline/display.c + - make sure mb_cur_max variable is defined outside of HANDLE_MULTIBYTE + if it's used outside HANDLE_MULTIBYTE. Fixes from Greg Wooledge + + +support/Makefile.in + - bash.pc: remove as part of distclean, not clean. Report from Andreas + Schwab + + 10/17 + ----- +subst.c + - array_var_assignment: make sure to call quote_string or quote_escapes + on the assignment string, so spaces in the assignment survive word + splitting. Fixes bug reported by isabella parakiss + + + 10/20 + ----- +doc/{bash.1,bashref.texi} + - word splitting: make sure that newline is listed as one of the IFS + whitespace characters. Fixes omission reported by ziyunfei + <446240525@qq.com> + +lib/readline/histfile.c + - history_do_write: make sure that we only create and use the tempfile + if the history file exists and is a regular file. Reported several + times, most recent check the result of a report from + + + 10/22 + ----- +jobs.c + - delete_all_jobs: if running_only == 0, we are eventually going to + clear the bgpids list, so don't bother to add pids to it in + delete_job (call with DEL_NOBGPID flag if running_only == 0) + + 10/24 + ----- +jobs.[ch] + - bgpids: new implementation from a patch from John Fremlin + , uses an array for the list of the last CHILD_MAX + terminated background pids, and a separate hash table to search it. + The storage can be freed as a unit, and the size of the hash table + (currently 4096) is independent of the size of the bgpids table + +subst.c + - inherit_errexit: new variable to control whether or not command + substitution inherits the -e (errexit) option. Disabled by default + +general.c + - posix_initialize: set inherit_errexit = 1 when Posix mode is enabled + +builtins/shopt.def + - inherit_errexit: new shell option, tracks value of inherit_errexit, + allows command substitution to inherit the setting of errexit without + posix mode. From a request and patch submitted by Christoph Gysin + + +{version,version2}.c + - use #if HAVE_SNPRINTF instead of #if defined in case configure + decides to #define it to 0. Fixes problem reported by Klaus Ziegler + + +configure.ac + - when checking for sys/resource.h, make sure to include + for the benefit of both old systems that require it and new versions + of autoconf that require a header file to compile to report its + presence. Reported by Klaus Ziegler + + 10/26 + ----- +subst.h + - SD_ARITHEXP: new flag value for skip_to_delim, supports parsing + arithmetic expressions in parameter expansions + +subst.c + - skip_to_delim: handle SD_ARITHEXP flag by skipping parentheses for + subexpressions and allowing ?: expression to not terminate an + arithmetic expression delimited by `:' + - skiparith: just call skip_to_delim with the SD_ARITHEXP option and + the right delimiter string and return the right result. Fixes bug + reported by + +include/shmbchar.h + - strip out everything except what is needed to support is_basic and + similar functions, since the mbchar_t typedef apparently conflicts + with some AIX-specific type definition. Problem reported by + Michael Felt + + 10/27 + ----- +builtins/{set,ulimit}.def + - {set,ulimit}_builtin: make sure that --help is treated the same as + -? and prints a message and returns. Fixes bug reported by ziyunfei + <446240525@qq.com> + +builtins/*.def + - make sure to consistently use builtin_help() instead of mix of that + function and builtin_usage() + + 10/29 + ----- +doc/{bash.1,bashref.texi} + - BASH_CMDS, BASH_ALIASES: note that removing elements from these + array variables is not currently reflected in the command hash + table and alias list, respectively. Reported by isabella parakiss + + + 10/30 + ----- +eval.c + - reader_loop: if PS0 is set in an interactive shell, expand and + display it after reading a (complete) command but before executing + it. This differs from the DEBUG trap because the DEBUG trap is + executed once for each simple command (and some others, like each + time through a for loop). From a patch submitted by Dan Stromberg + + +parse.y + - prompt_again: set ps0_prompt from $PS0 in an interactive shell + +doc/{bash.1,bashref.texi} + - PS0: document new prompt string + + 11/3 + ---- +subst.c + - cond_expand_node: if special > 0, remove quoted nulls from the word + list, since no word splitting takes place. Fixes bug reported by + Corentin Peuvrel + + 11/4 + ---- +doc/{bash.1,builtins.texi} + - inherit_errexit: add to shopt description; modify Posix mode + description + + 11/9 + ---- +lib/readline/util.c + - rl_tilde_expand: fix out-of-bounds read caused when this function + is invoked with rl_point == 0. Bug reported by Hanno Böck + + + 11/11 + ----- +{nojobs,jobs}.c + - get_original_tty_job_signals: force the original signal disposition + for SIGTSTP/SIGTTIN/SIGTTOU to SIG_DFL in interactive shells. This + will force child processes to get SIG_DFL even if the shell is + started with those signals ignored. From a bug report from + Keith Thompson + + 11/13 + ----- +make_cmd.c + - make_function_def: if a function is being defined without a source + file, and the shell has not been initialized, assume that the + function is being imported from the environment and set the + source_file struct member to "environment". Set to "main" if the + shell has been initialized. Fixes bug reported on savannah by + Arno-Can Uestuensoez + https://savannah.gnu.org/support/index.php?108903 + +subst.c + - skip_to_delim: if the shell is in posix mode (posixly_correct != 0) + and performing history expansion ((flags & SD_HISTEXP) != 0), allow + double quotes to quote the history expansion character. TENTATIVE + CHANGE, inspired by + https://savannah.gnu.org/support/index.php?108491 + + 11/14 + ----- +jobs.c + - wait_for: modify change from 4/23 to only give the terminal to + shell_pgrp if not running in the background and subshell_environment + indicates we're not in a pipeline and not an async command. Fixes + bug reported by konsolebox + + 11/16 + ----- +doc/{bash.1,bashref.texi} + - document new posix-mode behavior of not giving ! special meaning + within double quotes, even if histexpand is enabled + + 11/17 + ----- +builtins/evalfile.c + - fc_execute_file: pass FEVAL_BUILTIN flag to _evalfile so it returns + the value of parse_and_execute after executing the commands in the + file. Fixes bug reported by Chris Marusich + + 11/20 + ----- +subst.c + - process_substitute: don't unconditionally set pipeline_pgrp to + shell_pgrp; do that only if pipeline_pgrp == 0 (we haven't forked + yet) or if we know we haven't forked for a command, a pipeline, + or an async command. Fixes bug reported by + + as https://savannah.gnu.org/support/index.php?108593 + + 11/24 + ----- +variables.c + - set_pwd: inherit the value of OLDPWD from the initial environment + if it names a directory. From a report from John Wiersba + + +builtins/set.def + - -T: fix help text to note that the DEBUG and RETURN traps are both + inherited if this is set. Report from Grisha Levin + + +doc/{bash.1,bashref.texi} + - HISTIGNORE,GLOBIGNORE: note that the pattern matching is subject to + the setting of the `extglob' variable. Clarification raised by + Aharon Robbins + +builtins/jobs.def,doc/{bash.1,bashref.texi} + - disown: add text to synopsis making it clear that disown takes a + pid argument. From a report from Matthew Stanfield + + +findcmd.c,doc/{bash.1,bashref.texi} + - EXECIGNORE: change pattern matching to use FNMATCH_EXTFLAG like other + IGNORE variables. From a report from Aharon Robbins + +trap.c + - _run_trap_internal: make sure to catch and use return values supplied + as arguments to `return'; instead of just catching return, make sure + we use return_catch_value as well. Fixes bug reported by + Grisha Levit , affects RETURN, DEBUG, ERROR + traps + + 11/30 + ----- +lib/readline/display.c + - rl_redisplay: fix code that deals with prompts that contain + multibyte characters whose physical length is longer than the screen + width (so the prompt line wraps) to deal with invisible characters + in the prompt and set the inv_lbreaks offsets correctly and set + lpos appropriately + - _rl_move_cursor_relative: always called with either visible line or + invisible line. Decide whether we are being called with the invisible + line (or a portion thereof) as the DATA argument; make sure to account + for invisible characters in the last line of the prompt by offsetting + the desired buffer offset (NEW) by where DATA starts in invisible line + and checking whether that is past the last invisible character in + the prompt + - _rl_move_cursor_relative: do the same for the visible line by using + the visible line lbreaks array instead of _rl_screenwidth, since + that fails in the presence of multibyte characters (buffer offset + vs. physical screen position). These fix bug with prompts with + multibyte characters and invisible characters that are longer than + the screen width reported by Ryo Furue + + 12/1 + ---- +parse.y,make_cmd.c + - here_doc_first_line: new variable, set to non-zero to indicate the + first line of possibly multiple here documents associated with the + current command. Set in parse.y:gather_here_documents() before + reading any here documents, set to 0 after reading the first line + of any here document in make_cmd.c:make_here_document(). + +parse.y + - history_delimiting_chars: if parser_state indicates we are reading + a here document, don't use current_command_line_count to see whether + or not we're on the first line of a here document -- it can be fooled + by multi-line commands (or even backslash-escaped newlines). Use + here_doc_first_line to check that directly. Fixes bug reported by + Geoffrey Allott + +shell.h,parse.y + - save and restore here_doc_first_line as part of the shell's parser + state + +lib/sh/tmpfile.c + - use ANSI-C rand() interface if random() not available. Fixes problem + with linking on (ancient) Solaris 2.4 reported by Klaus Ziegler + + + 12/2 + ---- +aclocal.m4 + - RL_LIB_READLINE_VERSION: if cross-compiling, assume current version + of readline if cross-compiling bash while using an external readline + library. Fix from Barry Davis + +execute_cmd.c + - execute_builtin: save and restore value of builtin_ignoring_errexit + instead of assuming we can set it back to 0 -- the ignore-errexit + cases might be nested + - execute_builtin: after a builtin executes and eval_unwind is set, + set exit_immediately_on_error to 0 if builtin_ignoring_errexit is + set, and back to the value of errexit otherwise, just like the + code that sets -e does. Fixes short-circuiting bug reported by + Marcin Swigon + + 12/5 + ---- +builtins/setattr.def + - set_or_show_attributes: instead of using a fixed string for the + options argument to `declare', which results in export adding the + readonly attribute, build the option string dynamically like in + subst.c:shell_expand_word_list() + - set_or_show_attributes: don't add the -r option to declare if the + attribute passed as an argument doesn't include att_readonly; add + -x if the attribute includes att_exported + - set_or_show_attributes: add the -g option to declare so readonly + and export in functions that go through this code path don't create + local variables. Part of fix for bug reported by ziyunfei + <446240525@qq.com> + +execute_cmd.c + - make_internal_declare: if we have an assignment builtin that isn't + supposed to create local variables (export/readonly), make sure to + add the W_ASSNGLOBAL flag to each assignment statement word. + Part of fix for bug reported by ziyunfei <446240525@qq.com> where + readonly can create local variables when invoked with a compound + array assignment as an argument within a shell function + +subst.c + - make_internal_declare: added third argument: command name. Not used + in any useful way yet + - do_compound_assignment: handle attempted assignments to readonly + variables and print error messages, like bind_variable does and the + callers expect. This means that assignments to readonly array + variables can't go through a code path that allows them to fail + silently + +doc/Makefile.in + - uninstall: run install-info --delete after removing the installed + info file to update the directory file + +execute_cmd.c + - execute_disk_command: since we still (and have always) perform + redirections in child processes, we need to mark that state so + we know that we're in a child process. subshell_performing_redirections + is the new variable; non-zero when executing do_redirections() + +subst.c + - process_substitute: if we are executing process substitution in a + redirection expansion context (expanding_redir == 1), the child + process should not have access to any temporary environment the + parent has. Call flush_tempenv() in the child process to get rid + of it. Fix for bug reported by Clint Hepner + + 12/9 + ---- +jobs.c + - waitchld: if in posix mode and attempting to let SIGCHLD interrupt the + wait builtin, make sure wait_intr_flag is non-zero before trying to + longjmp to wait_intr_buf. Fixes bug reported by Aharon Robbins + + + 12/10 + ----- +lib/readline/display.c + - update_line: if a prompt containing invisible characters changes, + and the change is within the prompt string, we need to redraw the + entire prompt. After that redraw, if the cursor position is after + the first index where the old and new lines differ, we can short- + circuit the update if the line length stays the same + - update_line: if we redraw the entire prompt string because the prompt + contains invisible characters and the first difference is in the + middle of the prompt, we possibly need to adjust our idea of the + first differing character in the old and new lines. We punt and do + a dumb update in this case. Fixes bug with dynamic vi-mode mode + strings containing invisible characters reported by Dylan Cali + + + 12/11 + ----- +lib/readline/display.c + - update_line: if we move up to a new screen line, we need to recompute + the number of invisible characters on the new current line + (visible_wrap_offset). Fixes bug reported to bug-readline by + Per Bothner + - update_line: update code that attempts to compute where we are in + the new line buffer. Fixes `vt100' bug reported to bug-readline by + Per Bothner + + 12/18 + ----- +execute_cmd.c + - execute_function: unwind-protect and restore BASH_ARGC and BASH_ARGV + - restore_funcarray_state: now global + +execute_cmd.h + - make func_array_state type global, add extern function declaration + for restore_funcarray_state + +builtins/evalfile.c + - _evalfile: use restore_funcarray_state and pop_args as unwind-protects + to restore BASH_{SOURCE,LINENO,ARGC,ARGV} and FUNCNAME on interrupts. + Fixes bug reported back on 11/10 by Grisha Levit + + + 12/20 + ----- +lib/readline/isearch.c + - _rl_isearch_dispatch: after removing the only character from the + search string with DEL, leaving the search string empty, don't match + the previous line if we didn't have a match before + + 12/22 + ----- +bashhist.c + - enable_history_list,remember_on_history: initialize to 0 instead of 1 + +shell.c + - init_interactive,init_interactive_script: set enable_history_list and + remember_on_history to 1 (defaults) + + 12/23 + ----- +variables.c + - initialize_shell_variables: don't inherit PS4 from the environment + if the shell is running with euid == 0; just reset it to `+ '. This + is a known potential vulnerability, since PS4 expansion performs + command substitution in the root shell's context before displaying + it. Discussion started by up201407890@alunos.dcc.fc.up.pt + +bashhist.c + - bash_history_reinit: initialize remember_on_history to the value of + enable_history_list (set -o history). Fixes bug reported by + Stephane Chazelas with command-line + option `-o history' not having any effect + + 12/28 + ----- +lib/readline/{history.h,histfile.c} + - history_file_version: new int variable, reserved for future use + - history_multiline_entries: new int variable, can be set by the + calling application to enable reading multi-line history entries + from the history file (currently undocumented) + +lib/readline/history.c + - _hs_append_history_line: new function, append a line passed as an + argument to a specified history entry, used to create multi-line + history entries + +lib/readline/histfile.c + - read_history_range: implement a heuristic that temporarily sets the + history comment character if the first line read from the history + file looks like it has is a timestamp (#[:digit:]) so we can read + timestamps from the history file properly. Originally reported + back in March 2015 by Christoph Anton Mitterer + - read_history_range: make sure history_multiline_entries is non-zero + if the history file looks like it has timestamps + - read_history_range: if we think we have a history file with timestamps + and we read more than one non-timestamp consecutive history lines, + assume they are part of a single multi-line history entry and paste + them together using _hs_append_history_line. Feature most recently + requested by james harvey , also suggested + by Christoph Anton Mitterer + +examples/loadables/setpgid.c + - setpgid: new loadable builtin, originally contributed by Jason + Vas Dias + + 12/29 + ----- +bashhist.c + - bash_history_inhibit_expansion: fix cases where a history expansion + should be skipped because it's in a command or process substitution + but there is another history expansion preceding the substitution + on the command line. Don't let the previous history expansion fool + the function into saying the command substitution history expansion + should be performed + +builtins/evalstring.c + - parse_prologue: always unwind-protect history_expansion_inhibited, + since history expansion can be enabled in non-interactive shells, + and calling eval once in a non-interactive shell inhibits history + expansion forever even if `set -o histexpand' was run before the + eval + +builtins/common.h + - SEVAL_NOHISTEXP: new flag for parse_and_execute/parse_string; means + to not perform history expansion (decouple from SEVAL_NOHIST, which + now means to not remember commands on history); changed all callers + that had SEVAL_NOHIST to have SEVAL_NOHIST|SEVAL_NOHISTEXP + +builtins/evalstring.c + - parse_prologue: instead of calling bash_history_disable, set + remember_on_history to 0 if SEVAL_NOHIST and history_expansion_inhibited + to 1 if SEVAL_NOHISTEXP + + 12/30 + ----- +subst.c + - skip_to_histexp: new function, a stripped-down version of skip_to_delim. + Used to skip to the next unquoted instance of the history expansion + character, handles peculiar quoting and command/process substitution + requirements. Better fix for bug reported by + Zigmund.Ozean@zig-home.localdomain back in January, prompted by report + from Keith Thompson + +bashhist.c + - bash_history_inhibit_expansion: use skip_to_histexp instead of + skip_to_delim + +subst.c + - parameter_brace_expand_rhs: if the rhs of an expansion is "$@" and + IFS is null, we need to separate the (quoted) positional parameters + in the returned word with a space, and mark the word as needing to + be split on spaces (W_SPLITSPACE). Fix for issues reported back in + October 2014 as the result of an austin-group discussion, and just + re-reported by Martijn Dekker + + 1/4/2016 + -------- +execute_cmd.c + - execute_simple_command: if autocd is set, invoke a function named + `cd' if one exists, instead of the shell builtin. Feature requested + by transl8czech@gmail.com + +builtins/mkbuiltins.c + - if a command's short description is the same as its name (e.g., `true'), + don't mark the short doc to be translated. Report and fix from + Benno Schulenberg + + 1/6 + --- +subst.c + - command_substitute,process_substitute: before replacing the file + descriptor underlying stdout (fd 1), make sure to purge any pending + stdio output that hasn't been written successfully, even after a + call to fflush(). Fixes bug reported by cks@cs.toronto.edu + + 1/7 + --- +builtins/{echo,printf}.def + - echo_builtin,printf_builtin: don't use terminate_immediately; use + calls to QUIT in the body of the print loop after writes and flushes. + Fixes problem with running the signal handler and exit trap in a + signal context and other bug reported by cks@cs.toronto.edu + +builtins/common.c + - sh_chkwrite: put in calls to QUIT to catch signals that interrupt + writes + +shell.c + - get_current_user_info: protect endpwent() with #ifdef HAVE_GETPWENT. + Fixes bug reported by pb + + 1/8 + --- +lib/readline/bind.c + - _rl_init_file_error: now a varargs function so it can take format + strings and arguments and pass them to vfprintf + - rl_parse_and_bind: print a warning if we encounter a key binding + string with one or more hyphens but we don't find a valid modifier + (`control', `meta', etc.). Prompted by a report from Andrew Kurn + + - rl_parse_and_bind: improve several existing error messages now that + _rl_init_file_error takes a variable number of arguments + - rl_variable_bind: print error message upon encountering unknown + variable + + 1/10 + ---- +lib/readline/bind.c + - rl_parse_and_bind: if a `bare' keybinding is supplied without any + terminating `:' or whitespace separating it from the command to be + bound, signal an error + + 1/11 + ---- +subst.c + - process_substitute: when compiled without job control (JOB_CONTROL not + defined), make sure we call stop_making_children like we do in the job + control code branch, so already_making_children is reset to 0. This + is what command substitution does. Fixes bug reported by Alastair + Hughes + + 1/12 + ---- +execute_cmd.c + - execute_in_subshell: if a user subshell (`(command)') or other shell + compound command has an input pipe, note for later by setting + stdin_redir. This will inhibit the implicit redirection of standard + input from /dev/null for async commands executed as part of this + subshell. Fixes bug reported by Martin D Kealey + - execute_simple_command: if the shell forks to execute this command + because it has an input pipe, set stdin_redir to inhibit later redirection + from /dev/null for async commands + + 1/13 + ---- +execute_cmd.c + - HASH_BANG_BUFSIZE: use #define for size of buffer used in + READ_SAMPLE_BUF instead of straight constant 80 + - HASH_BANG_BUFSIZ: increase to 128 because Linux allows 128 chars in + exec header. Reported by Ludovic Courtès + +configure.ac + - remove support for purify and purecoverage + - change release level to `rc1' + + 1/15 + ---- +builtins/enable.def + - dyn_load_builtin: fix missing argument to builtin_error if load function + returns an error. Fix from Aharon Robbins + + 1/18 + ---- +builtins/history.def + - histtime: display a better error message for invalid timestamps; use + existing `??' string for empty/missing timestamps or invalid history + entries. Suggestion from Reuben Thomas + + 1/21 + ---- +lib/readline/text.c + - rl_insert: when trying to optimize typeahead, make sure to reset the + key sequence and key sequence length when we read a character that is + not bound to self-insert. Bug report from Geir Hauge + + + 1/25 + ---- +doc/{bash.1,bashref.texi} + - word splitting: add example showing how -d'' is equivalent to -d + after word splitting and null argument removal + + 1/27 + ---- +doc/{bash.1,bashref.texi} + - read: modify description to make it more clear that the line is split + using the same rules as word splitting, and use `delimiters' instead + of `separators', which people read the wrong way + + 2/2 + --- +variables.c + - initialize_shell_variables: allow FUNCNEST to set funcnest_max when + imported from the environment. Inspired by + https://bugzilla.redhat.com/show_bug.cgi?id=1274553 + + 2/11 + ---- +bashhist.c + - bash_history_inhibit_expansion: function should be compiled in only if + BANG_HISTORY is defined. Report from isabella parakiss + + +[bash-4.4-rc1 frozen] + + 2/15 + ---- +lib/readline/text.c + - rl_refresh_line: call rl_redraw_prompt_last_line instead of + rl_forced_update_display to avoid redrawing all lines of a multiline + prompt (overwriting the last line of the multiline prompt in the + process). Report from Hugh Davenport + + 2/18 + ---- +subst.c + - parameter_brace_expand: when processing ${!name[@]}, make sure to + free `name' before returning the list of keys to avoid a memory leak. + Fixes bug reported by Emilio PastorMira + + 2/19 + ---- +trap.c + - free_trap_strings: when freeing the `special' traps (NSIG to BASH_NSIG), + check whether or not the `signal' is trapped, as it would be if the + subshell inherited it (errtrace) and don't free the trap string in that + case. Fixes bug reported by Jan Klötzke + + 2/21 + ---- +lib/sh/netconn.c + - isnetconn: return false if getpeername fails with errno == EBADF. + Bug and fix from Andrew Gregory + +builtins/shopt.def + - parse_bashopts: when reading BASHOPTS from the environment, make + sure to call any set functions associated with a variable, instead + of just setting the value to 1. Report and fix from + Vehlow, Jörg + + 2/22 + ---- +lib/readline/complete.c + - rl_display_match_list: don't bother calling strrchr to check the + return value from printable_part() if rl_filename_completion_desired + is non-zero, since in that case printable_part just returns its + argument. Fixes git completion issue reported by + Dilyan Palauzov + - _rl_colored_completion_prefix: default is now 0, testing is complete + + 2/23 + ---- +variables.c + - assign_hashcmd: if the shell is restricted, reject attempts to add + pathnames containing slashes to the hash table, as the hash builtin + does. Fixes bug reported to savannah by Sylvain Beucler as + https://savannah.gnu.org/support/?108969 + + 2/24 + ---- +subst.c + - NEED_FPURGE_DECL: need it before externs.h included, since fpurge + is now used in this file. Fixes warning reported by Mike + Frysinger + - skip_double_quoted: add missing argument to declaration + +parse.y + - shell_getc: in call to internal_warning, use %lu to print an argument + cast explicitly to unsigned long. Fixes warning reported by Mike + Frysinger + + 2/27 + ---- +parse.y + - decode_prompt_string: quote result of \s expansion in case shell has + been invoked with a pathname like '$(id)'. Inspired by report from + Travis Garrell + - decode_prompt_string: quote result of \h and \H expansions in the + (unlikely) case that the hostname has been changed to something + malicious including a command substitution. From report from + Travis Garrell + +builtins/getopts.def + - getopts_unbind_variable: new static function, just calls unbind_variable + for now. Placeholder for any future work to do something special if + OPTARG is readonly. Based on discussion started by Robert Elz + + +lib/readline/vi_mode.c + - rl_vi_unix_word_rubout: new function, implements ^W as Posix specifies + it for vi mode, using whitespace and punctuation characters as word + boundaries. Prompted by question from Carlos Pita + + +lib/readline/vi_keymap.c + - bind rl_vi_unix_word_rubout to ^W by default in both insert and + command mode + +lib/readline/rltty.c + - _rl_bind_tty_special_chars: if in vi mode, bind the WERASE character + to rl_vi_unix_word_rubout + +lib/readline/funmap.c + - vi-unix-word-rubout is new bindable name for rl_vi_unix_word_rubout + +lib/readline/readline.h + - rl_vi_unix_word_rubout: new extern declaration + + 2/28 + ---- +doc/bash.1 + - document readline blink-matching-paren variable + - document readline completion-display-width variable + - document readline completion-map-case variable + - note that the default value of history-size depends on the value of + the HISTSIZE variable. All from a message from Branden Robinson + + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - convert-meta: modify the description to note that readline will turn + the default to off if the locale contains eight-bit characters + - input-meta: modify the description to note that readline will turn + the default to on if the locale contains eight-bit characters + - output-meta: modify the description to note that readline will turn + the default to on if the locale contains eight-bit characters. From + a message from Branden Robinson + + 3/6 + --- +examples/loadables/Makefile.in + - install-dev: make installdirs a prerequisite; don't rely on the + install-supported target to create it first. Bug with parallel + install (`make -j 4 install') reported by Chris Staub + + + 3/12 + ---- +lib/readline/display.c: + - rl_clear_visible_line: clear all screen lines occupied by the current + visible readline line. Inspired by report from Lauri Ranta + + +lib/readline/readline.h + - rl_clear_visible_line: extern declaration + +lib/readline/doc/rltech.texi + - rl_clear_visible_line: add documentation + + 3/19 + ---- +findcmd.c + - file_status: add inadvertently-dropped test for EXECIGNORE to the + `other' bits check. The check was in the original patch + - search_for_command: if the file should not be considered executable + because it's in the EXECIGNORE blacklist, don't set file_to_lose_on, + since the attempt to execute the last-ditch path will circumvent the + EXECIGNORE setting. Fixes bug reported by Dennis Williamson + + + 3/28 + ---- +lib/readline/display.c + - rl_redisplay: when computing where the cursor should go (and the + physical cursor position) after displaying the prompt, don't adjust + the cursor position by wadjust if there are no multibyte chars in + the prompt. lpos is already a physical cursor position; _rl_screenwidth + is the physical screen width, and we're not calling _rl_col_width and + don't need to take invisible characters into account again. Fixes + bug reported by Andreas Schwab + + 4/1 + --- +parse.y + - parse_comsub: when we read `esac' followed by a break character, + turn on the LEX_RESWDOK flag because we can now read another case + statement or other compound command. Fixes bug reported by + Christian Franke , original version + of patch from Piotr Grzybowski + - parse_comsub: leave the reserved-word-ok flag set for four-char + reserved words (then/else/elif/done/time) that can be followed by + reserved words; set lex_rwlen to 0 so we know to start reading a + new one + + 4/7 + --- +builtins/{alias,complete,jobs}.def + - {alias,compopt,disown}: add missing `CASE_HELPOPT;' so --help option + prints help longdoc instead of builtin_usage() + + 4/8 + --- +arrayfunc.c + - assign_array_var_from_word_list: use bind_array_var_internal instead + of inline code, so value conversions happen on assignment (case + modification, arithmetic evaluation, etc). Fixes bug reported by + Geir Hauge + + 4/9 + --- +shell.c + - main: change the logic that determines whether or not bash is running + under an emacs terminal emulator so it works with future versions of + emacs, which will change to use only $INSIDE_EMACS. Report and fix + from Paul Eggert + +lib/glob/sm_loop.c + - EXT: if we see ?(pat), we can match 0 or 1 times, so if we don't + match, we should consume the extglob pattern and go on to attempt + to match the rest of the pattern against the string. Fixes bug + reported by Isabella Parakiss + - GMATCH: in case `*', don't short-circuit and match anything if the + * is the last character in the pattern until after we check the + special cases for matching a `.'. Fixes bugs reported back on 3/23 + by Isabella Parakiss + + 4/13 + ---- +bashhist.c + - hc_erasedups: fix memory leak by freeing history entry returned by + remove_history. Bug and fix from Seiichi Ishitsuka + + + 4/19 + ---- +config-top.h + - CD_COMPLAINS: now settable in config-top.h; enables (fatal) error + messages if cd is given multiple directory arguments + + 4/20 + ---- +execute_cmd.c + - coproc_setvars: refuse to create variables with names that are not + valid identifiers. Suggestion from Piotr Grzybowski + + +rltty.c + - rl_tty_set_echoing: interface to set _rl_echoing_p, returning old + value. Inspired by gdb use of _rl_echoing_p when switching + between terminal and curses modes described by Doug Evans + + +bashline.c + - bash_execute_unix_command: use rl_clear_visible_line instead of + erasing current line on the screen, inspired by same report from + 3/12. Still tentative change + +configure.ac + - update release status to rc2, may skip this and go directly to + release + + 4/21 + ---- +arrayfunc.c + - convert_var_to_array: make sure that the newly-converted array + variable is not marked as being an associative array. Fixes bug + reported by Grisha Levit + - convert_var_to_assoc: make sure that the newly-converted associative + array variable is not marked as being an indexed array + + 4/22 + ---- +builtins/evalstring.c + - should_suppress_fork: don't suppress the fork if there are any traps + set, since that requires that we hang around to react to a signal or + collect the command's exit status and run something. Fixes bug + reported by Brian Vandenberg + +histexpand.c + - history_tokenize_word: handle >| as a single token. Fix from + Piotr Grzybowski from a report from + idallen@idallen-fibe.dyndns.org + + 4/24 + ---- +execute_cmd. + - coproc_setvars: don't overwrite readonly variables used as coproc + names. From a report from Grisha Levit + +histexpand.c + - history_tokenize_word: handle strings of digits before redirections + beginning with `<' or `>' as part of the redirection word; handle + strings of digits following `<&' or `>&' as part of the redirection + word. Inspired by patch from Piotr Grzybowski + from a report from idallen@idallen-fibe.dyndns.org + +lib/readline/complete.c + - rl_display_match_list: if the common prefix is longer than any of + the possible matches, set the length of the common prefix to 0 so + the entire match gets printed for each match + - rl_display_match_list: make sure to output at least one space + between each displayed match, even if the displayed length is + longer than our computed max + - fnprint: if the length of the prefix (prefix_bytes) is greater than + or equal to the length of the string to be printed (print_len), make + sure to set the prefix length to 0 so the entire string is printed. + From a report from Grisha Levit + + 4/25 + ---- +subst.c + - command_substitute: update the conditions under which we give the + terminal to pipeline_pgrp with give_terminal_to to the same ones + where wait_for uses to decide whether to give the terminal back to + shell_pgrp. This code exists to undo the work wait_for does; it + has to give the terminal back to pipeline_pgrp only under those + conditions when wait_for gives it back to the shell pgrp. Fix for + bug reported by Paulo Bardes + + 4/26 + ---- +bashline.c + - bash_filename_stat_hook: temporarily disable the `nounset' shell + option around calls to expand_prompt_string so we don't get error + messages during completion. Fixes issue reported by Eric Pruitt + + + 4/27 + ---- +doc/{bash.1,bashref.texi} + - extdebug: clarify that having this option enabled at shell startup + acts identically to --debugger. From a report from Grisha Levit + + +jobs.[ch] + - wait_for_single_pid: now takes additional `int flags' argument + +{jobs,execute_cmd}.c,builtins/wait.def + - wait_for_single_pid: changed callers to add extra argument + +jobs.c + - wait_for_single_pid: if (flags & 1) == 0, don't print the error + message if PID isn't found; changed execute_pipeline call when + lastpipe is set + + 4/28 + ---- +general.c + - bash_tilde_expand: try not setting interrupt_immediately or + terminate_immediately; see what happens with networked password + databases + + 4/29 + ---- +subst.c + - parameter_brace_expand, parameter_brace_expand_rhs: now take an + additional `pflags' argument from its caller so we can pass + state + - parameter_brace_expand_rhs: if expand_string_for_rhs returns a + quoted null, but l_hasdollat is set to 1, meaning we saw a quoted + "$@" of some form, we need to turn off special handling of "$@" + so something like "${@-${@-$@}}" expands to an empty string like + Posix says it should. Fixes bug reported by Grisha Levit + + + 5/1 + --- +variables.c + - bind_variable_internal: if we have a nameref variable with a valid + array reference that is invalid for assignment (e.g., a[*]), and + assign_array_element returns NULL, short-circuit and return NULL. + Fixes bug reported by Grisha Levit + +general.[ch] + - valid_nameref_value: new function, return 1 if passed argument is + a valid variable name argument for a nameref variable: a valid + identifier, a valid array reference, or a valid positional + parameter. Second argument indicates whether the value is to be + used for an assignment; in this case, return an error if the name + consists of all digits + +builtins/declare.def + - declare_internal: disallow values for nameref variables that don't + pass the tests in valid_nameref_value. Part of fix for bug + reported by Grisha Levit + +variables.c + - bind_variable_internal: if trying to assign a value to a nameref + variable, throw an error if valid_nameref_value fails (with a second + argument of 1). More fixes for bug reported by Grisha Levit + + + 5/2 + --- +builtins/declare.def + - declare_internal: don't allow nameref attribute to be applied to an + existing readonly variable; it can be used to circumvent readonly + value. Fix for bug reported by Grisha Levit + +variables.[ch] + - find_variable_last_nameref, find_global_variable_last_nameref: takes + a new flags argument. If flags is non-zero, and we find a nameref + variable that is unset (has no value), return that variable instead + of NULL. + +{variables,execute_cmd,arrayfunc,subst}.c,builtins/{declare,set}.def + - find_variable_last_nameref, find_global_variable_last_nameref: change + callers to add flags argument (initially 0) + + 5/3 + --- +variables.c + - bind_variable_internal: make sure we run the value of a namref + variable through valid_nameref_value before doing the assignment. + This can go away if we stop allowing namerefs to refer to positional + parameters + +execute_cmd.c + - execute_select_command: if bind_variable returns NULL, handle it as + an error, as if attempting assignment to a readonly variable + - execute_for_command: use 1 as second argument to + find_variable_last_nameref, so it will return an invisible nameref + to assign for each variable in the list + - execute_for_command: if the current word in the list is an invalid + identifier and the loop variable is a nameref, handle it as an error, + as if attempting assignment to a readonly variable + + 5/4 + --- +variables.c + - bind_int_variable: add warning if assigning an int to a nameref + variable + - assign_in_env: if assigning a variable in the temporary environment + that is a namref, throw an error if trying to assign an invalid + value + - bind_variable_value: use valid_nameref_value instead of calls to + legal_identifier and valid_array_reference + +execute_cmd.c + - coproc_setvars: if we have a nameref variable as the coproc name, but + it can't be assigned to for some reason, remove the nameref attribute + and issue a warning that we are doing so + - coproc_setvars: don't allow assignment to a nameref variable with an + invalid variable name, using same code as find_or_make_array_variable + +general.c + - valid_nameref_value: disallow values consisting solely of digits, + like the positional parameters + +builtins/declare.def + - declare_internal: don't call valid_nameref_value on the existing value + of a variable that's being converted to a nameref -- that value is + going to be thrown away and we've already checked the new value + - declare_internal: call bind_variable_value with the ASS_NAMEREF flag + if we're assigning to an existing nameref variable (for instance, + `declare -n x ; declare x=42') + + 5/5 + --- +variables.c + - make_local_variable: if we are being asked to create a local copy of + a nameref variable from a prior scope (checked by looking up + using find_variable_noref), use the nameref variable, not the variable + it references (which we find using find_variable). Bug report from + Grisha Levit ; fix by Piotr Grzybowski + + +builtins/declare.def + - declare_internal: if asked to do the same thing as above (difference + is declare -n r=foo in previous case; declare -n r in this one), + don't follow reference var from a previous context. Create a new + local variable (using make_local_variable) and inherit attributes + from previous scope's nameref as above + + 5/6 + --- +builtins/declare.def + - declare_internal: if we are assigning a value to an existing + invisible nameref variable, validate value early so we don't end up + removing the variable after the assignment fails + +builtins/shopt.def + - toggle_shopts: don't call set_bashopts here unless $BASHOPTS exists, + since we don't want to set it up before it gets read from the + environment. Keeping BASHOPTS read-only should keep users from + unsetting it. Fix from Grisha Levit + - shopt_set_debug_mode: make sure error_trace_mode reflects the setting + of extdebug. This one is tentative. Fix from Grisha Levit + + - shopt_set_debug_mode: call set_shellopts after setting error_trace_mode + or function_trace_mode. Fix from Grisha Levit + +shell.c + - start_debugger: make sure that function_trace_mode and error_trace_mode + reflect the value of debugging_mode, so they are both disabled if we + disable debugging mode because we can't find the debugger start file. + Fix from Grisha Levit + - start_debugger: set $SHELLOPTS and $BASHOPTS to the option values are + reflected if we change or set them here. Fix from Grisha Levit + + +builtins/set.def + - reset_shell_options: add reset values for: posix, nolog, pipefail. + Fix from Grisha Levit + +builtins/shopt.def + - reset_shopt_options: add reset values for: autocd, checkjobs, + complete_fullquote, dirspell, failglob, globstar, gnu_errfmt, + huponexit, inherit_errexit, interactive_comments, lastpipe, + no_empty_cmd_completion, progcomp. Fix from Grisha Levit + + - reset_shopt_options: make sure the following options have the right + defaults based on #defines: checkjobs, checkwinsize, direxpand, + extglob, globasciiranges. Fix from Grisha Levit + + +flags.c + - reset_shell_flags: add missing flags, re-initialize history_expansion + based on STRICT_POSIX + + 5/8 + --- +lib/readline/histexpand.c + - history_expand: if any expansion returns 1 from history_expand_internal, + indicating that :p was supplied, make it apply to the entire line + like tcsh and csh. Fixes bug reported by Dean Stanton + + +variables.[ch] + - ifsname: move define to variables.h + +execute_cmd.c + - execute_for_command: check whether or not the word in the for command + is IFS; call setifs every time the variable is assigned a value. + Fixes bug report from Grisha Levit + + 5/16 + ---- +general.c + - valid_nameref_value: explicitly handle name == 0 and *name == 0 right + away to save calls to legal_identifier + +builtins/declare.def + - declare_internal: if trying to set nameref attribute on a variable + with a null value, flag as invalid assignment, just as if running + `declare -n r=""'. Fixes bug report from Grisha Levit + + - declare_internal: when creating a variable with a temporary value + (""), use ASS_FORCE in the assignment flags to bypass name validity + checks on nameref variable names + +variables.c + - bind_variable_internal: don't call valid_nameref_value if we're + forcing assignment with (flags & ASS_FORCE) + +builtins/read.def + - read_builtin: handle bind_variable returning NULL when setting REPLY. + Report and fix from Grisha Levit + +builtins/setattr.def + - set_var_attribute: handle bind_variable returning NULL + +lib/sh/tmpfile.c + - sh_seedrand(): call srandom() to seed the random number generator + - sh_mktmpname, sh_mktmpfd: if we have random(), assume we have + srandom() and seed the random number generator. Still looking for + better value to see random number generator with + +variables.c + - check_unbind_variable: use internal_error instead of builtin_error + +{execute_cmd,variables}.c + - fix some places where bind_variable could return NULL and it was not + checked. Fix from Piotr Grzybowski + + 5/17 + ---- +arrayfunc.c + - convert_var_to_{array,assoc}: make sure to turn off nameref attribute, + since namerefs can't be arrays + +execute_cmd.c + - coproc_setvars: if the coproc name names a nameref, resolve the + nameref and use it as the name of the coproc. Suggested by Grisha + Levit + +subst.c + - command_substitute: don't bother calling QUIT after calling + reset_signal_handlers in the child, kill the child with SIGINT in + case we just reset the signal handler to SIG_DFL and we should just + exit instead of throwing to top level. Fixes bug reported by + Grisha Levit + + 5/18 + ---- +variables.c + - find_variable_nameref_for_create: find a nameref variable whose value + doesn't resolve to an existing variable and see whether or not that + value is appropriate for a new variable to be created + - find_variable_nameref_for_assignment: find a nameref variable whose + value doesn't resolve to an existing variable and see whether or not + that value is appropriate for a new variable to be created. + Difference between _assignment and _create is that _assignment + allows the nameref value to be a subscripted array reference + +builtins/setattr.def + - set_var_attribute: if variable lookup doesn't return anything, check + for a nameref and make sure that any reference value is something we + should be working on here, using find_variable_nameref_for_create(). + If it fails, error out and return, otherwise it's probably a reference + to a variable that hasn't been set yet, so let bind_variable take care + of that. Report from Grisha Levit + +arrayfunc.c + - bind_array_variable: if find_shell_variable returns NULL, check for a + nameref using find_variable_nameref_for_create and create a new array + variable with the value if it returns a valid nameref variable. + Makes `unset var; declare -n ref=var ; ref[0]=foo' work right. + Report from Grisha Levit + + 5/19 + ---- +variables.[ch] + - unbind_variable_noref: unset a variable NAME without following any + nameref chain. If the first instance of the variable with that name + is a nameref, just unset that nameref variable. + +builtins/getopts.def + - getopts_unbind_variable: if OPTARG is going to be unbound, use + unbind_variable_noref to unbind that name even if it is a nameref + variable. Issue raised by Grisha Levit + +execute_cmd.c + - coproc_unsetvars: use unbind_variable_noref in case someone sets the + coproc _PID variable as a nameref pointing to something read-only or + strange. Issue raised by Grisha Levit + +builtins/set.def + - set_ignoreeof: use unbind_variable_noref to unset "IGNOREEOF" and + "ignoreeof" + - set_posix_mode: use unbind_variable_noref to unset "POSIXLY_CORRECT" + +variables.c + - make_vers_array: use unbind_variable_noref to unset "BASH_VERSINFO" + +lib/sh/shmatch.c + - sh_regmatch: use unbind_variable_noref to unset "BASH_REMATCH" + +bashline.c + - bash_execute_unix_command: use check_unbind_variable to unset + READLINE_LINE and READLINE_POINT + +pcomplete.c + - unbind_compfunc_variables: use unbind_variable_noref to unset + COMP_LINE, COMP_POINT, COMP_WORDS, COMP_CWORD, COMP_TYPE, COMP_KEY + - gen_shell_function_matches: use unbind_variable_noref to unset + COMPREPLY + +config-top.h + - USE_MKTEMP/USE_MKSTEMP: define by default to use libc version of + mktemp and mkstemp in lib/sh/tmpfile.c. Recommended by Mike + Frysinger to fix a FreeBSD problem + +configure.ac,config.h.in + - mkstemp: check for mkstemp, define HAVE_MKSTEMP if available + +config-bot.h + - USE_MKSTEMP: #undef if HAVE_MKSTEMP not defined + + 5/22 + ---- +variables.c + - assign_in_env: if appending to a variable's value, make sure we call + make_variable_value with the empty string if expand_assignment_string_to_string + returns NULL, as do_assignment_internal does. Fixes bug with + `str=''; val=foo ; val+=str printenv val' reported by Grisha Levit + + - assign_in_env: if assigning to a nameref variable in the temporary + environment, and the nameref has a valid value for assignment (even + if the target variable is not set), resolve the nameref and create + a variable in the temporary environment named by the nameref's value. + If the nameref variable is invisible or isn't set to a valid value + for assignment, just create a regular temporary variable with the + nameref's name. This provides a degree of ksh93 compatibility. + Suggested by Grisha Levit + - find_variable_nameref_context,find_variable_last_nameref_context: + instead of returning NULL when detecting a loop, return a + distinguished value: &nameref_maxloop_value + - bind_variable: catch nameref_maxloop_value so we can do different + things based on whether or not we get it. Right now we don't do + anything different, but we could + + 5/24 + ---- +lib/readline/display.c + - update_line,_rl_move_cursor_relative: save value of MB_CUR_MAX in a + variable and use it throughout the functions instead of recomputing it + every time (which possibly costs a function call) + + 5/25 + ---- +builtins/declare.def + - declare_internal: only check whether the value being assigned to a + nameref variable is a valid identifier if we're not appending to an + existing value. Suggested by Grisha Levit + - declare_internal: add a couple of more checks on nameref names: + o make sure `declare -n x[3]=y' is an error + o nameref variable self-references now produce a warning when + in function scope + o nameref variable self-references using subscripted arrays + (a=a[0]) now produce warnings at function scope and errors at + global scope + + 5/29 + ---- +builtins/declare.def + - declare_internal: use name of readonly variable when calling sh_readonly + instead of name passed as argument to declare in case we've followed + a nameref chain + - declare_internal: when turning off attributes on a nameref variable + after following the nameref chain and turning them off on the target + variable, don't allow the readonly attribute to be removed. This is + primarily intended to turn off the nameref attribute. Issue pointed + out by Grisha Levit + - declare_internal: if we are attempting to modify an existing global + nameref variable, and the -n option is supplied, operate on the + nameref variable itself, not the variable it references + +doc/{bash.1,bashref.texi} + - change the descriptions of namerefs and declare -n slightly to note + that using the -n option to declare will operate on the nameref + variable itself rather than the variable it references + +variables.c + - bind_variable_internal: if trying to assign to a read-only variable, + print the error message using the variable's name instead of the + name passed to bind_variable in case we followed a nameref + +builtins/declare.def + - declare_internal: when we're creating a (possibly invisible) variable + as part of another operation, assigning NULL, make sure to use + ASS_FORCE to avoid warning messages from any existing nameref + variables we follow + - declare_internal: allow the nameref attribute to be removed from a + readonly nameref variable without a value but do not allow it to be + removed from a readonly nameref variable that has a value, even if it + doesn't reference an existing variable. This distinction is for ksh93 + compatibility. Pointed out by Grisha Levit + + 5/31 + ---- +builtins/declare.def + - declare_internal: if the call to bind_variable_value fails for some + reason, make sure to restore the nameref attribute to flags_on and + flags_off before calling NEXT_VARIABLE + +subst.c + - make_internal_declare: handle += append op + - shell_expand_word_list: when transforming assignment statement + arguments to `declare', make sure to handle += append op to avoid + passing invalid identifiers to declare. Report by Grisha Levit + + + 6/1 + --- +builtins/declare.def + - declare_internal: if a nameref assignment fails, only call delete_var + to delete the variable if we created it in declare_internal in the + first place + +general.c + - check_selfref: new function, checks a NAME against a VALUE for nameref + self-reference + +general.h + - check_selfref: extern declaration + +builtins/declare.def + - declare_internal: call check_selfref to determine whether a given NAME + and VALUE constitute an invalid nameref variable self-reference + +variables.c + - bind_variable_internal: call check_selfref to determine whether a + given NAME and VALUE constitute an invalid nameref variable self- + reference + + 6/2 + --- +parse.y + - clear_shell_input_line: new function, clears contents of shell_input_line + and sets index to 0, but doesn't free it + +externs.h + - clear_shell_input_line: extern declaration + +builtins/evalstring.c + - parse_and_execute: call clear_shell_input_line after setting input to + string to be executed. Fixes problem with command substitution and + multi-line aliases reported by Grisha Levit + +eval.c + - parse_command: only execute PROMPT_COMMAND if the shell is not + currently expanding an alias; use the same tests as parse.y:SHOULD_PROMPT + and parse.y:prompt_again() use to decide whether or not to print a + prompt. Fixes problems with PROMPT_COMMAND and multi-line aliases + reported by Grisha Levit + +builtins/set.def + - unset_builtin: changes to fix three problems reported by Grisha + Levit : + o if -n is supplied, we should not try to unset a function if + a variable isn't found + o unsetting namerefs whose values are array references does + not work + o unset -n n[0], where n is a nameref, would unset the + referenced variable instead of `n' + +redir.c + - redir_varvalue: handle case where nameref var points to subscripted + array reference. Reported by Grisha Levit + +variables.c + - bind_variable_value: make sure to call check_selfref only if aflags + includes ASS_NAMEREF and not ASS_FORCE. Reported by Grisha Levit + + +general.c + - valid_nameref_value: now understands a FLAGS value of 2 to mean that + the name will be used to create a variable, so only legal_identifier + matters + +arrayfunc.c + - find_or_make_array_variable: call valid_nameref_value with FLAGS value + of 2 to indicate we will be creating a variable. Fixes mapfile issue + reported by Grisha Levit + + 6/5 + --- +builtins/declare.def + - declare_internal: only pass ASS_FORCE as part of assignment flags to + assignments concerning arrays + - declare_internal: when at the global scope, if we resolve a nameref + and commit to using the new name, go back to to the beginning of the + loop and use the new name in the checks and variable references. + Make sure we construct the new name as a straight substitution of + the nameref value into the old name, including array subscripts and + rebuilding the correct values for `offset' and `value', since they + are relative to the original value of name. + Fixes several issues with checking use of subscripted array variables + as nameref values + - declare_internal: when calling assign_array_element, make sure to + pass ASS_APPEND if aflags includes it, so things like + declare -a var; var[1]=1; declare var[1]+=4 + append to the value appropriately and var[1] ends up being `14' + +arrayfunc.c + - valid_array_reference: make sure the array reference is properly + terminated after the first subscript; return invalid if there is + anything following the closing `]' + + 6/12 + ---- +variables.c + - bind_variable_internal: if asked to perform an array subscript + assignment on a nameref variable, display a warning and remove the + nameref attribute (as bash-4.3 did). Reported by Dan Douglas + + + 6/14 + ---- +test.c + - posixtest: handle four-argument case where argv[1] == '(' and + argv[4] == ')' by performing two-argument test on $2 and $3. + Reported by Joerg Schilling + + 6/15 + ---- +variables.c + - sv_ignoreeof: make sure ignoreeof is set only if IGNOREEOF is set and + has a value (no `local IGNOREEOF'). Reported by Grisha Levit + + - sv_strict_posix: make sure posixly_correct is set only if + POSIXLY_CORRECT is set and has a value. Reported by Grisha Levit + + + 6/16 + ---- +builtins/declare.def + - declare_internal: analogous to 6/12 change; when performing an array + subscript assignment on a nameref, display a warning, remove the + nameref attribute, and go on + + 6/21 + ---- +execute_cmd.c + - shell_execve: make sure errno is (re)set appropriately before + returning error value on exec format error + + 6/23 + ---- +subst.c + - param_expand: when expanding $* in a context where splitting is not + desired (pflags & PF_ASSIGNRHS), make sure to quote the word and the + included separators. Reported by Dan Douglas + + 6/30 + ---- +configure.ac + - release version is now `beta2' + +execute_cmd.c + - execute_simple_command: even if already_making_children is non-zero, + don't call wait_for if last_made_pid == NO_PID. Indirectly inspired + by report from Nicolas Vivet + + 7/2 + --- +subst.c + - expand_word_internal: when adding an IFS character to the accumulated + string, don't quote it if word expansion is not going to be + performed ((word->flags & (W_NOSPLIT|W_NOSPLIT2)) == 0) in the + default case. This was already the case everwhere else, when we did + `goto add_ifs_character;'. Fixes bug reported by Ibrahim M. Ghazal + + +subst.[ch],arrayfunc.c + - string_list_dollar_at: now takes a new third argument, currently + reserved for future use; changed callers and declaration + + 7/7 + --- +[bash-4.4-beta2 frozen] + + 7/9 + --- +bashline.c + - check_redir: make sure that index is > 0 before checking previous + char; fixes out of bounds read reported by Hanno Böck + + + 7/16 + ---- +subst.c + - parameter_brace_expand: if ${array[@]} or ${array[*]} is supplied + with an unset (or empty) array, and -u is enabled, don't make it + an unbound variable error, like $@ or $* when there are no + positional parameters. Based on report from Ian Allen + + +lib/readline/signals.c + - rl_pending_signal(): return the number of any signal readline has + caught but is waiting to handle + +lib/readline/callback.c + - rl_persistent_signal_handlers: new variable, restores readline-6.2 + signal handler semantics: installed at rl_callback_handler_install + time and removed with rl_clear_signals when a complete line has + been read + - _rl_callback_newline: call rl_set_signals if rl_persistent_signal_handlers + is non-zero + - rl_callback_read_char: install signal handlers with rl_set_signals + if rl_persistent_signal_handlers is 0 (the default) + - CALLBACK_READ_RETURN: uninstall signal handlers with rl_clear_signals + only if rl_persistent_signal_handlers is 0 (the default) + +lib/readline/readline.h + - rl_pending_signal: new extern declaration + - rl_persistent_signal_handlers: new extern declaration + + 7/19 + ---- +execute_cmd.c + - execute_while_or_until: make sure we decrement `continuing' the way + we decrement `breaking' if the loop test indicates we will be + breaking out of the loop. That keeps `until continue' from + keeping `continuing' set to 1. Reported by Dan Douglas + + + 7/20 + ---- +trap.c + - run_pending_traps,_run_trap_internal: save and restore temporary_env, + set temporary_env to 0 before trap runs so traps don't inherit a + command's temporary env. Fixes bug with IFS assignment in tempenv + and trap reported by Andriy Martynets + +jobs.c + - run_sigchld_trap: save and restore temporary_env, set temporary_env + to 0 before trap runs so traps don't inherit a command's temporary + env (see above) + + 7/21 + ---- +execute_cmd.c + - execute_function: unwind-protect function_line_number, in case we + are executing a function inside another function. Reported by + Grisha Levit in context of evaled functions + and DEBUG traps + - execute_arith_for_command,execute_arith_command,execute_simple_command, + execute_cond_command: make sure line_number doesn't go < 0 when + adjusting it by function_line_number + + 7/23 + ---- +subst.c,command.h + - move the PF_ constants to command.h so other files can see them, now + that PF_ASSIGNRHS has meaning to string_list_dollar_at + +arrayfunc.h + - AV_ASSIGNRHS: new flag, indicate that ${a[@]} is being expanded on + the RHS of an assignment statement + +arrayfunc.c + - array_value_internal: if AV_ASSIGNRHS passed for ${a[@]}, pass + PF_ASSIGNRHS to string_list_dollar_at to support args separated by + spaces even if $IFS does not have the default value. Reported by + Dan Douglas + +subst.c + - string_list_dollar_at: if FLAGS argument includes PF_ASSIGNRHS, obey + rules for $@ on the RHS of an assignment statement: expand to + postitional parameters separated by spaces no matter what the first + character of $IFS is. Reported by Dan Douglas + - parameter_brace_expand_word: pass AV_ASSIGNRHS as flags value to + array_value if PF_ASSIGNRHS is set and we are expanding an array + variable subscripted by @ or * + - param_expand: pass pflags to string_list_dollar_at in case it contains + PF_ASSIGNRHS + - expand_word_internal: if we have an assignment statement argument to + a declaration builtin (W_ASSIGNARG), turn on W_ASSIGNRHS when we see + the `=' to enable special $@ behavior + - expand_word_internal: if W_ASSIGNARG enabled in word flags, pass that + flag and W_ASSIGNRHS to recursive call to expand_word_internal when + expanding double-quoted string; handles "$@" when IFS is not the + default value and word splitting will not be performed + +subst.c + - expand_word_internal: change case that handles '' (single-quoted + empty string) to only discard it if we will not be performing word + splitting (W_NOSPLIT|W_NOSPLIT2), since we need to add a quoted null + argument if the subsequent characters will cause word splitting. + This is how "" (double-quoted empty string) is handled after a bug + fix back in August 2010. Reported by Grisha Levit + , fix for Posix interp 888 + + 7/27 + ---- +subst.c + - param_expand: change fix from 6/23 (expanding $* in a context where + word splitting is not performed) to make sure that $* expands to + something before trying to quote the string. Bug and fix from + Andreas Schwab + +lib/readline/bind.c + - _rl_get_string_variable_value: fix a cut-and-paste error that caused + the emacs mode string to be displayed for both vi insert and command + mode strings. Report and fix from Steve Jones + + 7/28 + ---- +lib/readline/display.c + - update_line: we can't use PROMPT_ENDING_INDEX unless we're testing + against _rl_last_c_pos; if we are testing buffer indices, we need to + use prompt_last_invisible directly. Fixes mode string redisplay issue + with short prompt strings reported by Steve Jones + + 8/4 + --- +nojobs.c + - without_job_control: new function, resets child state that's + eventually used to decide whether or not to wait_for children + +execute_cmd.c + - initialize_subshell: call without_job_control in both the + JOB_CONTROL and no job control paths so we can reset the state in + subshells that will not cause them to wait_for children + inappropriately. Fixes bug reported by Dan Cross + + 8/5 + --- +configure.ac + - release version is now `rc2' + +bashline.c + - command_word_completion_function: if direxpand is set, make sure to + run hint_text through bash_directory_completion_hook, since + readline will do that and we want to be able to match the results + readline returns. Fixes bug reported by Pat Somaru + + +command.h + - W_COMPLETE: new flag word value + - PF_COMPLETE: new flags value for param_expand + +subst.h + - SX_STRIPDQ: new flag, used for string_extract_double_quoted + +bashline.c + - bash_filename_stat_hook,bash_directory_completion_hook: pass W_COMPLETE + flag to expand_prompt_string + +subst.c + - expand_word_internal: if W_COMPLETE in word->flags, pass PF_COMPLETE + to param_expand + - param_expand: if PF_COMPLETE in pflags, pass SX_COMPLETE to + extract_command_subst. This allows `"$(echo ~/' to perform + completion successfully + - string_extract_double_quoted: turn third argument into a flags arg, + old STRIPDQ is now set if flags&SX_STRIPDQ + - string_extract_double_quoted: changed callers, if third argument was + 1, pass SX_STRIPDQ instead + - expand_word_internal: if W_COMPLETE in word->flags, pass SX_COMPLETE + in flags to string_extract_double_quoted for case '"' + - string_extract_double_quoted: if SX_COMPLETE in flags, pass it to + extract_command_subst + - expand_word_internal: if W_COMPLETE in word->flags, make sure W_COMPLETE + is in temp word passed to recursive call to expand_word_internal to + expand double-quoted string. Fixes bug reported by John Passaro + + + 8/9 + --- +[bash-4.4-rc2 frozen] + + 8/10 + ---- +subst.c + - sub_append_string: use size_t variable to store string length to + avoid integer overflow. Report from Siteshwar Vashisht + + - sub_append_string: `size' argument is now pointer to size_t; changed + istring_index in expand_word_internal to accommodate change + +lib/sh/ufuncs.c + - include "posixselect.h" if HAVE_SELECT is defined, make sure that + fd_set and the rest are defined + + 8/11 + ---- +lib/readline/histexpand.c + - history_tokenize_word: use ISDIGIT instead of isdigit for more + argument checking + - "chardefs.h": include for ISDIGIT define and . Fix from + Mike Frysinger + +lib/sh/eaccess.c,externs.h + - sh_eaccess: first argument now const char * + - sh_stataccess,sh_euidaccess: first argument now const char *, since + sh_stat and sh_eaccess call them. + Fix from Mike Frysinger + +lib/glob/glob.c + - sh_eaccess: change local prototype + +general.[ch] + - all_digits,legal_identifier,valid_nameref_value,importable_function_name, + exportable_function_name,check_binary_file,file_exists,file_isdir, + file_iswdir,same_file,make_absolute,valid_nameref_value: first + argument (always identifier or filename) is now a `const char *'; + some second filename arguments now `const char *'. + Fix from Mike Frysinger + +configure.ac,config.h.in + - uintptr_t: make sure it's defined to an integer type wide enough to + hold a pointer + +lib/sh/tmpfile.c + - sh_seedrand: use `uintptr_t' to cast pointer value to int value, + instead of allowing truncation to take place, since srandom takes + an `unsigned int'. + Fix from Mike Frysinger + +arrayfunc.[ch] + - valid_array_reference,array_variable_name,array_variable_part, + array_value_internal,array_value,get_array_value: first argument + (always variable name) now a `const char *' + Fix from Mike Frysinger + + 8/19 + ---- +print_cmd.c + - xtrace_print_word_list: if (xtflags & 2), don't try to quote the + words in the LIST argument. Intended to be used in places where + the list has not yet been expanded + - xtrace_print_for_command_head: call xtrace_print_word_list with + flags argument of 2. Fixes issue reported by Aharon Robbins + + - xtrace_print_select_command_head: call xtrace_print_word_list with + flags argument of 2 + + 8/21 + ---- +lib/sh/netopen.c + - netopen: fix memory leak by freeing allocated path before error + return. Fix from Dmitry Goncharov + +doc/{bash.1,bashref.texi} + - change conditional commands description to make it clearer that + bash doesn't emulate /dev/fd if the OS provides it + + 8/22 + ---- +braces.c + - expand_amble: free partial and tem on failure to allocate memory + for merged partial+result strvec. Fix from Dmitry Goncharov + + + 8/23 + ---- +jobs.c + - wait_for: don't call get_tty_state when a job finishes if we're + running it as part of programmable completion. We test + rl_readline_state. Fixes bug reported by Jaro Punta + + + 8/24 + ---- +subst.c + - pat_subst: fix memory leak (mstr). Fix from Dmitry Goncharov + + - split_at_delims: fix memory leak (d2). Fix from Dmitry Goncharov + + + 8/26 + ---- +subst.c + - match_upattern,match_wpattern: make sure that a trailing `*' is + not escaped (preceded by an odd number of backslashes) before we + append a `*' when checking whether a pattern matches anywhere in + the string + +lib/readline/{input,signals}.c + - protect instances of SIGQUIT with #ifdef SIGQUIT; apparently + MinGW doesn't define it + - protect instances of SIGHUP with #ifdef SIGHUP; apparently + MinGW doesn't define it. From a report from Simon Sobisch + + +xmalloc.o + - allocerr: only try to find the break and report it if we're using + the bash malloc; there's no guarantee that any other malloc is + using sbrk() + +doc/{bash.1,bashref.texi} + - quote removal: add paragraph mentioning quote removal to beginning + of expansions section, referencing later paragraph. Report from + Michel Lanne + + 8/30/2016 + --------- +lib/readline/input.c + - protect instances of SIGALRM and SIGWINCH with #ifdef; apparently + MinGW doesn't define them. From a report from Simon Sobisch + + +subst.c + - SPECIAL_VAR: make sure name is not the empty string before going on, + empty strings can result in unitialized reads + - CHECK_STRING_OVERRUN: semi-general macro to use in *extract* and + similar functions to to check whether a function called to parse an + embedded construct (like a backquoted command substitution) doesn't + consume the entire string because it's unterminated + - skip_double_quoted: make sure other extraction functions don't + consume the entire string (which they can if the construct is + unterminated) before incrementing the index and going on. Uses + CHECK_STRING_OVERRUN + - extract_dollar_brace_string: check for unterminated embedded + constructs consuming the entire string with CHECK_STRING_OVERRUN ('`') + - skip_matched_pair: use CHECK_STRING_OVERRUN to make sure unterminated + embedded "`", $(, ${ don't cause out-of-bounds reads + +parse.y + - parse_comsub: when parsing a here-document delimiter, make sure we + don't try to use `nestret' after freeing it. Fixes bug reported by + Franco Costantini + +[bash-4.4 frozen] + + 9/10 + ---- +trap.c + - run_debug_trap: only give the terminal to pipeline_pgrp if + subshell_environment doesn't include SUBSHELL_ASYNC|SUBSHELL_PIPE. + Fixes bug reported by Matthew Giassa + +execute_cmd.c + - execute_simple_command: if user_subshell is set, check and set + SUBSHELL_ASYNC if asynchronous is set as well as setting + SUBSHELL_PAREN + diff --git a/builtins/complete.def b/builtins/complete.def index e87ecfb9e..1ea308bd4 100644 --- a/builtins/complete.def +++ b/builtins/complete.def @@ -831,7 +831,7 @@ compopt_builtin (list) WORD_LIST *l, *wl; COMPSPEC *cs; - opts_on = opts_off = Eflag = Dflag = 0; + opts_on = opts_off = Eflag = Dflag = Iflag = 0; ret = EXECUTION_SUCCESS; reset_internal_getopt (); diff --git a/config.h.in b/config.h.in index 4c0f4913a..aa0c0312c 100644 --- a/config.h.in +++ b/config.h.in @@ -1028,6 +1028,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_IOCTL_H +/* Define if you have the header file. */ +#undef HAVE_SYS_MMAN_H + /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H diff --git a/configure b/configure index b20c58505..4ad952b60 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac for Bash 5.0, version 4.091. +# From configure.ac for Bash 5.0, version 4.092. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for bash 5.0-alpha. # @@ -9292,7 +9292,7 @@ fi done for ac_header in sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \ - sys/param.h sys/socket.h sys/stat.h \ + sys/mman.h sys/param.h sys/socket.h sys/stat.h \ sys/time.h sys/times.h sys/types.h sys/wait.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` diff --git a/configure.ac b/configure.ac index 5c0e76616..d3287d980 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ dnl Process this file with autoconf to produce a configure script. # You should have received a copy of the GNU General Public License # along with this program. If not, see . -AC_REVISION([for Bash 5.0, version 4.091])dnl +AC_REVISION([for Bash 5.0, version 4.092])dnl define(bashvers, 5.0) define(relstatus, alpha) @@ -714,7 +714,7 @@ AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \ stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \ regex.h syslog.h ulimit.h) AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \ - sys/param.h sys/socket.h sys/stat.h \ + sys/mman.h sys/param.h sys/socket.h sys/stat.h \ sys/time.h sys/times.h sys/types.h sys/wait.h) AC_CHECK_HEADERS(netinet/in.h arpa/inet.h) diff --git a/doc/bash.1 b/doc/bash.1 index 362ea71f8..4798379e8 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -1506,7 +1506,8 @@ only when in extended debugging mode (see the description of the option to the .B shopt builtin below). -Setting \fBextdebug\fP after the shell has started to execute a script +Setting \fBextdebug\fP after the shell has started to execute a script, +or referencing this variable when \fBextdebug\fP is not set, may result in inconsistent values. .TP .B BASH_ARGV @@ -1526,7 +1527,8 @@ only when in extended debugging mode option to the .B shopt builtin below). -Setting \fBextdebug\fP after the shell has started to execute a script +Setting \fBextdebug\fP after the shell has started to execute a script, +or referencing this variable when \fBextdebug\fP is not set, may result in inconsistent values. .TP .B BASH_ARGV0 diff --git a/doc/bashref.texi b/doc/bashref.texi index e2fc386b5..8867f9b0a 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -5636,7 +5636,8 @@ The shell sets @code{BASH_ARGC} only when in extended debugging mode (see @ref{The Shopt Builtin} for a description of the @code{extdebug} option to the @code{shopt} builtin). -Setting @code{extdebug} after the shell has started to execute a script +Setting @code{extdebug} after the shell has started to execute a script, +or referencing this variable when @code{extdebug} is not set, may result in inconsistent values. @item BASH_ARGV @@ -5649,7 +5650,8 @@ The shell sets @code{BASH_ARGV} only when in extended debugging mode (see @ref{The Shopt Builtin} for a description of the @code{extdebug} option to the @code{shopt} builtin). -Setting @code{extdebug} after the shell has started to execute a script +Setting @code{extdebug} after the shell has started to execute a script, +or referencing this variable when @code{extdebug} is not set, may result in inconsistent values. @item BASH_ARGV0 diff --git a/examples/loadables/sleep.c b/examples/loadables/sleep.c index 736c8af1a..92b1a8fa1 100644 --- a/examples/loadables/sleep.c +++ b/examples/loadables/sleep.c @@ -48,13 +48,6 @@ #include "builtins.h" #include "common.h" -#define RETURN(x) \ - do { \ - if (sp) *sp = sec; \ - if (usp) *usp = usec; \ - return (x); \ - } while (0) - int sleep_builtin (list) WORD_LIST *list; diff --git a/lib/malloc/malloc.c b/lib/malloc/malloc.c index 32cb0dadb..5621adf41 100644 --- a/lib/malloc/malloc.c +++ b/lib/malloc/malloc.c @@ -84,6 +84,10 @@ #include #include +#if defined (HAVE_MMAP) +#include +#endif + /* Define getpagesize () if the system does not. */ #ifndef HAVE_GETPAGESIZE # include "getpagesize.h" @@ -196,10 +200,25 @@ typedef union _malloc_guard { #define LESSCORE_MIN 10 #define LESSCORE_FRC 13 -#define MMAP_THRESHOLD 15 /* must be greater than SPLIT_MAX, COMBINE_MAX */ - #define STARTBUCK 1 +/* Should we use mmap for large allocations? */ +#if defined (HAVE_MMAP) +# if !defined (MAP_ANON) && defined (MAP_ANONYMOUS) +# define MAP_ANON MAP_ANONYMOUS +# endif +#endif + +#if defined (HAVE_MMAP) && defined (MAP_ANON) +# define USE_MMAP +#endif + +#if defined (USE_MMAP) +# define MMAP_THRESHOLD 14 /* must be >= SPLIT_MAX, COMBINE_MAX */ +#else +# define MMAP_THRESHOLD (8 * SIZEOF_LONG) +#endif + /* Flags for the internal functions. */ #define MALLOC_WRAPPER 0x01 /* wrapper function */ #define MALLOC_INTERNAL 0x02 /* internal function calling another */ @@ -291,6 +310,9 @@ int malloc_flags = 0; /* future use */ int malloc_trace = 0; /* trace allocations and frees to stderr */ int malloc_register = 0; /* future use */ +/* Use a variable in case we want to dynamically adapt it in the future */ +int malloc_mmap_threshold = MMAP_THRESHOLD; + #ifdef MALLOC_TRACE char _malloc_trace_buckets[NBUCKETS]; @@ -597,7 +619,7 @@ morecore (nu) /* Try to split a larger block here, if we're within the range of sizes to split. */ - if (nu >= SPLIT_MIN) + if (nu >= SPLIT_MIN && nu <= malloc_mmap_threshold) { bsplit (nu); if (nextf[nu] != 0) @@ -606,7 +628,7 @@ morecore (nu) /* Try to coalesce two adjacent blocks from the free list on nextf[nu - 1], if we can, and we're within the range of the block coalescing limits. */ - if (nu >= COMBINE_MIN && nu < COMBINE_MAX && busy[nu - 1] == 0 && nextf[nu - 1]) + if (nu >= COMBINE_MIN && nu < COMBINE_MAX && nu <= malloc_mmap_threshold && busy[nu - 1] == 0 && nextf[nu - 1]) { bcoalesce (nu); if (nextf[nu] != 0) @@ -635,6 +657,25 @@ morecore (nu) nblks = 1; } +#if defined (USE_MMAP) + if (nu > malloc_mmap_threshold) + { + mp = (union mhead *)mmap (0, sbrk_amt, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if ((void *)mp == MAP_FAILED) + goto morecore_done; + nextf[nu] = mp; + mp->mh_alloc = ISFREE; + mp->mh_index = nu; + CHAIN (mp) = 0; +#ifdef MALLOC_STATS + _mstats.nmmap++; + _mstats.tmmap += sbrk_amt; +#endif + goto morecore_done; + } +#endif + + #ifdef MALLOC_STATS _mstats.nsbrk++; _mstats.tsbrk += sbrk_amt; @@ -918,6 +959,17 @@ internal_free (mem, file, line, flags) if (mg.i != p->mh_nbytes) xbotch (mem, ERR_ASSERT_FAILED, _("free: start and end chunk sizes differ"), file, line); +#if defined (USE_MMAP) + if (nunits > malloc_mmap_threshold) + { + munmap (p, binsize (nunits)); +#if defined (MALLOC_STATS) + _mstats.nlesscore[nunits]++; +#endif + goto free_return; + } +#endif + #if GLIBC21 if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == sbrk (0))) #else @@ -1076,6 +1128,8 @@ internal_realloc (mem, n, file, line, flags) _mstats.nrcopy++; #endif + /* If we are using mmap and have mremap, we could use it here. */ + if ((m = internal_malloc (n, file, line, MALLOC_INTERNAL|MALLOC_NOTRACE|MALLOC_NOREG)) == 0) return 0; FASTCOPY (mem, m, tocopy); diff --git a/lib/malloc/mstats.h b/lib/malloc/mstats.h index 11389ffc0..dac029807 100644 --- a/lib/malloc/mstats.h +++ b/lib/malloc/mstats.h @@ -25,6 +25,7 @@ #ifdef MALLOC_STATS +/* This needs to change if the definition in malloc.c changes */ #ifndef NBUCKETS # define NBUCKETS 30 #endif @@ -77,6 +78,8 @@ struct _malstats { int nsplit[NBUCKETS]; int tbcoalesce; int ncoalesce[NBUCKETS]; + int nmmap; + bits32_t tmmap; }; /* Return statistics describing allocation of blocks of size BLOCKSIZE. @@ -98,6 +101,7 @@ struct bucket_stats { int nlesscore; int nsplit; int ncoalesce; + int nmmap; /* currently unused */ }; extern struct bucket_stats malloc_bucket_stats __P((int)); diff --git a/lib/malloc/stats.c b/lib/malloc/stats.c index 4a18a1284..05247970f 100644 --- a/lib/malloc/stats.c +++ b/lib/malloc/stats.c @@ -36,6 +36,8 @@ extern int malloc_free_blocks __P((int)); +extern int malloc_mmap_threshold; + extern struct _malstats _mstats; extern FILE *_imalloc_fopen __P((char *, char *, char *, char *, size_t)); @@ -103,6 +105,10 @@ _print_malloc_stats (s, fp) for (i = totused = totfree = 0; i < NBUCKETS; i++) { v = malloc_bucket_stats (i); + /* Show where the mmap threshold is; sizes greater than this use mmap to + allocate and munmap to free (munmap shows up as lesscore). */ + if (i == malloc_mmap_threshold+1) + fprintf (fp, "--------\n"); if (v.nmal > 0) fprintf (fp, "%8lu\t%4d\t%6d\t%5d\t%8d\t%8d %5d %8d\n", (unsigned long)v.blocksize, v.nfree, v.nused, v.nmal, v.nmorecore, v.nlesscore, v.nsplit, v.ncoalesce); totfree += v.nfree * v.blocksize; @@ -115,6 +121,8 @@ _print_malloc_stats (s, fp) _mstats.nmal, _mstats.nfre, _mstats.nrealloc, _mstats.nrcopy); fprintf (fp, "Total sbrks: %d, total bytes via sbrk: %d\n", _mstats.nsbrk, _mstats.tsbrk); + fprintf (fp, "Total mmaps: %d, total bytes via mmap: %d\n", + _mstats.nmmap, _mstats.tmmap); fprintf (fp, "Total blocks split: %d, total block coalesces: %d\n", _mstats.tbsplit, _mstats.tbcoalesce); } diff --git a/lib/readline/doc/rltech.texi b/lib/readline/doc/rltech.texi index 7d22b2cb6..baf036df5 100644 --- a/lib/readline/doc/rltech.texi +++ b/lib/readline/doc/rltech.texi @@ -846,12 +846,16 @@ Return the function invoked by @var{keyseq} in keymap @var{map}. If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is not @code{NULL}, the type of the object is returned in the @code{int} variable it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}). +It takes a "translated" key sequence and should not be used if the key sequence +can include NUL. @end deftypefun -@deftypefun {rl_command_func_t *} rl_function_of_keyseq_len (const char *keyseq, size_t len Keymap map, int *type) +@deftypefun {rl_command_func_t *} rl_function_of_keyseq_len (const char *keyseq, size_t len, Keymap map, int *type) Return the function invoked by @var{keyseq} of length @var{len} in keymap @var{map}. Equivalent to @code{rl_function_of_keyseq} with the addition of the @var{len} parameter. +It takes a "translated" key sequence and should be used if the key sequence +can include NUL. @end deftypefun @deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function) diff --git a/tests/RUN-ONE-TEST b/tests/RUN-ONE-TEST index 58c375b70..554f3d6ec 100755 --- a/tests/RUN-ONE-TEST +++ b/tests/RUN-ONE-TEST @@ -1,4 +1,4 @@ -BUILD_DIR=/usr/local/build/chet/bash/bash-current +BUILD_DIR=/usr/local/build/bash/bash-current THIS_SH=$BUILD_DIR/bash PATH=$PATH:$BUILD_DIR diff --git a/variables.c b/variables.c index 657883ae3..97113e825 100644 --- a/variables.c +++ b/variables.c @@ -229,7 +229,9 @@ static SHELL_VAR *get_dirstack __P((SHELL_VAR *)); #if defined (ARRAY_VARS) static SHELL_VAR *get_groupset __P((SHELL_VAR *)); - +# if defined (DEBUGGER) +static SHELL_VAR *get_bashargcv __P((SHELL_VAR *)); +# endif static SHELL_VAR *build_hashcmd __P((SHELL_VAR *)); static SHELL_VAR *get_hashcmd __P((SHELL_VAR *)); static SHELL_VAR *assign_hashcmd __P((SHELL_VAR *, char *, arrayind_t, char *)); @@ -1652,6 +1654,27 @@ get_groupset (self) return (self); } +# if defined (DEBUGGER) +static SHELL_VAR * +get_bashargcv (self) + SHELL_VAR *self; +{ + static int self_semaphore = 0; + + /* Backwards compatibility: if we refer to BASH_ARGV or BASH_ARGC at the + top level without enabling debug mode, and we don't have an instance + of the variable set, initialize the arg arrays. + This will already have been done if debugging_mode != 0. */ + if (self_semaphore == 0 && variable_context == 0 && debugging_mode == 0) /* don't do it for shell functions */ + { + self_semaphore = 1; + init_bash_argv (); + self_semaphore = 0; + } + return self; +} +# endif + static SHELL_VAR * build_hashcmd (self) SHELL_VAR *self; @@ -1882,8 +1905,8 @@ initialize_dynamic_variables () v = init_dynamic_array_var ("GROUPS", get_groupset, null_array_assign, att_noassign); # if defined (DEBUGGER) - v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign|att_nounset); - v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign|att_nounset); + v = init_dynamic_array_var ("BASH_ARGC", get_bashargcv, null_array_assign, att_noassign|att_nounset); + v = init_dynamic_array_var ("BASH_ARGV", get_bashargcv, null_array_assign, att_noassign|att_nounset); # endif /* DEBUGGER */ v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign|att_nounset); v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign|att_nounset);