On 2/20/19 8:10 AM, Michael Albinus wrote:
> Bash Version: 5.0
> Patch Level: 0
> Release Status: release
>
> Description:
> This is an error report from an Emacs/Tramp user. With bash 5.0, bash
> 5.0 dies when HISTSIZE is set to 0. Setting it to 1 seems to work. Using
> bash 4.4 works as well. <See https://debbugs.gnu.org/34192> for details.
>
> Repeat-By:
> The following is an extract from what Tramp does inside Emacs. I could
> reproduce it in a a shell:
>
>
> # env TERM='dumb' INSIDE_EMACS='27.0.50,tramp:2.4.2-pre' ENV='' HISTFILE=''
> HISTFILESIZE=0 HISTSIZE=0 PROMPT_COMMAND='' PS1=\#\$\ PS2='' PS3=''
> /home/albinus/src/bash-5.0/bash -norc -noprofile
> #$ tramp_perl_file_name_all_completions () {
> \perl -e '
> opendir(d, $ARGV[0]) || die("$ARGV[0]: $!\nfail\n");
Thanks for the report. Try the attached patch and see if that fixes the
crash.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU [email protected] http://tiswww.cwru.edu/~chet/
*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400
--- bashhist.c 2019-02-20 16:20:04.000000000 -0500
***************
*** 561,573 ****
if (!history_expansion_inhibited && history_expansion &&
history_expansion_p (line))
{
/* If we are expanding the second or later line of a multi-line
command, decrease history_length so references to history expansions
in these lines refer to the previous history entry and not the
current command. */
if (history_length > 0 && command_oriented_history &&
current_command_first_line_saved && current_command_line_count > 1)
history_length--;
expanded = history_expand (line, &history_value);
if (history_length >= 0 && command_oriented_history &&
current_command_first_line_saved && current_command_line_count > 1)
! history_length++;
if (expanded)
--- 561,576 ----
if (!history_expansion_inhibited && history_expansion &&
history_expansion_p (line))
{
+ int old_len;
+
/* If we are expanding the second or later line of a multi-line
command, decrease history_length so references to history expansions
in these lines refer to the previous history entry and not the
current command. */
+ old_len = history_length;
if (history_length > 0 && command_oriented_history &&
current_command_first_line_saved && current_command_line_count > 1)
history_length--;
expanded = history_expand (line, &history_value);
if (history_length >= 0 && command_oriented_history &&
current_command_first_line_saved && current_command_line_count > 1)
! history_length = old_len;
if (expanded)