Bash-5.0 patch 8: fix history offset when HISTSIZE == 0 that can lead to crashes

This commit is contained in:
Chet Ramey
2019-08-14 14:57:48 -04:00
parent 3ba697465b
commit 01323582f7
2 changed files with 5 additions and 2 deletions

View File

@@ -560,15 +560,18 @@ pre_process_line (line, print_changes, addit)
add that line to the history if ADDIT is non-zero. */ add that line to the history if ADDIT is non-zero. */
if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) 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 /* If we are expanding the second or later line of a multi-line
command, decrease history_length so references to history expansions command, decrease history_length so references to history expansions
in these lines refer to the previous history entry and not the in these lines refer to the previous history entry and not the
current command. */ current command. */
old_len = history_length;
if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
history_length--; history_length--;
expanded = history_expand (line, &history_value); expanded = history_expand (line, &history_value);
if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
history_length++; history_length = old_len;
if (expanded) if (expanded)
{ {

View File

@@ -25,6 +25,6 @@
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
looks for to find the patch level (for the sccs version string). */ looks for to find the patch level (for the sccs version string). */
#define PATCHLEVEL 7 #define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */ #endif /* _PATCHLEVEL_H_ */