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    c...@case.edu    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)

Reply via email to