readline-8.2.7

This commit is contained in:
Rmys
2023-11-19 20:36:48 +03:00
parent adf6c6c45f
commit 37439abe8d
19 changed files with 366 additions and 653 deletions
@@ -1,43 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.3
Patch-ID: readline63-001
Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
Bug-Reference-URL:
Bug-Description:
The `.' command in vi mode cannot undo multi-key commands beginning with
`c', `d', and `y' (command plus motion specifier).
Patch (apply with `patch -p0'):
*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
--- readline.c 2014-03-07 15:20:33.000000000 -0500
***************
*** 965,969 ****
if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
key != ANYOTHERKEY &&
! rl_key_sequence_length == 1 && /* XXX */
_rl_vi_textmod_command (key))
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
--- 965,969 ----
if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
key != ANYOTHERKEY &&
! _rl_dispatching_keymap == vi_movement_keymap &&
_rl_vi_textmod_command (key))
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 5
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 1
@@ -1,44 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.3
Patch-ID: readline63-002
Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
Bug-Description:
When in callback mode, some readline commands can cause readline to seg
fault by passing invalid contexts to callback functions.
Patch (apply with `patch -p0'):
*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
--- readline.c 2014-03-10 14:15:02.000000000 -0400
***************
*** 745,749 ****
RL_CHECK_SIGNALS ();
! if (r == 0) /* success! */
{
_rl_keyseq_chain_dispose ();
--- 745,750 ----
RL_CHECK_SIGNALS ();
! /* We only treat values < 0 specially to simulate recursion. */
! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
{
_rl_keyseq_chain_dispose ();
*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 1
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 2
@@ -1,47 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 6.3
Patch-ID: readline63-003
Bug-Reported-by:
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
There are debugging functions in the readline release that are theoretically
exploitable as security problems. They are not public functions, but have
global linkage.
Patch (apply with `patch -p0'):
*** ../readline-6.3/util.c 2013-09-02 13:36:12.000000000 -0400
--- util.c 2014-03-20 10:25:53.000000000 -0400
***************
*** 477,480 ****
--- 479,483 ----
}
+ #if defined (DEBUG)
#if defined (USE_VARARGS)
static FILE *_rl_tracefp;
***************
*** 539,542 ****
--- 542,546 ----
}
#endif
+ #endif /* DEBUG */
*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 2
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 3
@@ -1,57 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 7.0
Patch-ID: readline70-001
Bug-Reported-by: Sean Zha <freeman_cha@hotmail.com>
Bug-Reference-ID: <BN3PR01MB13657D9303EB94BF6E54216E8CCA0@BN3PR01MB1365.prod.exchangelabs.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00107.html
Bug-Description:
Readline-7.0 changed the way the history list is initially allocated to reduce
the number of reallocations and copies. Users who set the readline
history-size variable to a very large number to essentially unlimit the size
of the history list will get memory allocation errors
Patch (apply with `patch -p0'):
*** ../readline-7.0/history.c 2015-12-28 13:50:31.000000000 -0500
--- history.c 2016-09-30 14:28:40.000000000 -0400
***************
*** 58,61 ****
--- 58,63 ----
#define DEFAULT_HISTORY_INITIAL_SIZE 502
+ #define MAX_HISTORY_INITIAL_SIZE 8192
+
/* The number of slots to increase the_history by. */
#define DEFAULT_HISTORY_GROW_SIZE 50
***************
*** 308,312 ****
{
if (history_stifled && history_max_entries > 0)
! history_size = history_max_entries + 2;
else
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
--- 310,316 ----
{
if (history_stifled && history_max_entries > 0)
! history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE)
! ? MAX_HISTORY_INITIAL_SIZE
! : history_max_entries + 2;
else
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
*** ../readline-7.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 0
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 1
@@ -1,103 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 7.0
Patch-ID: readline70-002
Bug-Reported-by: Hong Cho <hong.cho@citrix.com>
Bug-Reference-ID: <c30b5fe62b2543af8297e47ca487c29c@SJCPEX02CL02.citrite.net>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2016-12/msg00002.html
Bug-Description:
There is a race condition in add_history() that can be triggered by a fatal
signal arriving between the time the history length is updated and the time
the history list update is completed. A later attempt to reference an
invalid history entry can cause a crash.
Patch (apply with `patch -p0'):
*** ../readline-7.0-patched/history.c 2016-11-11 13:42:49.000000000 -0500
--- history.c 2016-12-05 10:37:51.000000000 -0500
***************
*** 280,283 ****
--- 280,284 ----
{
HIST_ENTRY *temp;
+ int new_length;
if (history_stifled && (history_length == history_max_entries))
***************
*** 296,306 ****
/* Copy the rest of the entries, moving down one slot. Copy includes
trailing NULL. */
- #if 0
- for (i = 0; i < history_length; i++)
- the_history[i] = the_history[i + 1];
- #else
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
- #endif
history_base++;
}
--- 297,303 ----
/* Copy the rest of the entries, moving down one slot. Copy includes
trailing NULL. */
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
+ new_length = history_length;
history_base++;
}
***************
*** 316,320 ****
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
! history_length = 1;
}
else
--- 313,317 ----
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
! new_length = 1;
}
else
***************
*** 326,330 ****
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! history_length++;
}
}
--- 323,327 ----
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! new_length = history_length + 1;
}
}
***************
*** 332,337 ****
temp = alloc_history_entry ((char *)string, hist_inittime ());
! the_history[history_length] = (HIST_ENTRY *)NULL;
! the_history[history_length - 1] = temp;
}
--- 329,335 ----
temp = alloc_history_entry ((char *)string, hist_inittime ());
! the_history[new_length] = (HIST_ENTRY *)NULL;
! the_history[new_length - 1] = temp;
! history_length = new_length;
}
*** ../readline-7.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 1
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 2
@@ -1,40 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 7.0
Patch-ID: readline70-003
Bug-Reported-by: Frédéric Brière <fbriere@fbriere.net>
Bug-Reference-ID: <20170120180724.7ydq7fb2hsp366dj@fabul.fbriere.net>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2017-01/msg00002.html
Bug-Description:
Readline-7.0 uses pselect(2) to allow readline to handle signals that do not
interrupt read(2), such as SIGALRM, before reading another character. The
signal mask used in the pselect call did not take into account signals the
calling application blocked before calling readline().
Patch (apply with `patch -p0'):
*** ../readline-7.0-patched/input.c 2016-08-30 10:21:47.000000000 -0400
--- input.c 2017-01-23 10:21:56.000000000 -0500
***************
*** 514,517 ****
--- 514,518 ----
#if defined (HAVE_PSELECT)
sigemptyset (&empty_set);
+ sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &empty_set);
FD_ZERO (&readfds);
FD_SET (fileno (stream), &readfds);
*** ../readline-7.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 2
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 3
@@ -1,47 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 7.0
Patch-ID: readline70-004
Bug-Reported-by: Kieran Grant <kieran.thehacker.grant@gmail.com>
Bug-Reference-ID: <ec9071ae-efb1-9e09-5d03-e905daf2835c@gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2018-02/msg00002.html
Bug-Description:
With certain values for PS1, especially those that wrap onto three or more
lines, readline will miscalculate the number of invisible characters,
leading to crashes and core dumps.
Patch (apply with `patch -p0'):
*** ../readline-7.0.3/display.c 2016-07-28 14:49:33.000000000 -0400
--- display.c 2018-02-03 19:19:35.000000000 -0500
***************
*** 772,776 ****
wadjust = (newlines == 0)
? prompt_invis_chars_first_line
! : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line);
/* fix from Darin Johnson <darin@acuson.com> for prompt string with
--- 788,794 ----
wadjust = (newlines == 0)
? prompt_invis_chars_first_line
! : ((newlines == prompt_lines_estimate)
! ? (wrap_offset - prompt_invis_chars_first_line)
! : 0);
/* fix from Darin Johnson <darin@acuson.com> for prompt string with
*** ../readline-7.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 3
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 4
@@ -1,58 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 7.0
Patch-ID: readline70-005
Bug-Reported-by: Nuzhna Pomoshch <nuzhna_pomoshch@yahoo.com>
Bug-Reference-ID: <1317167476.1492079.1495999776464@mail.yahoo.com>
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2017-05/msg00005.html
Bug-Description:
There are cases where a failing readline command (e.g., delete-char at the end
of a line) can cause a multi-character key sequence to `back up' and attempt
to re-read some of the characters in the sequence.
Patch (apply with `patch -p0'):
*** ../readline-7.0/readline.c 2016-04-20 15:53:52.000000000 -0400
--- readline.c 2018-05-26 17:19:00.000000000 -0400
***************
*** 1058,1062 ****
r = _rl_dispatch (ANYOTHERKEY, m);
}
! else if (r && map[ANYOTHERKEY].function)
{
/* We didn't match (r is probably -1), so return something to
--- 1056,1060 ----
r = _rl_dispatch (ANYOTHERKEY, m);
}
! else if (r < 0 && map[ANYOTHERKEY].function)
{
/* We didn't match (r is probably -1), so return something to
***************
*** 1070,1074 ****
return -2;
}
! else if (r && got_subseq)
{
/* OK, back up the chain. */
--- 1068,1072 ----
return -2;
}
! else if (r < 0 && got_subseq) /* XXX */
{
/* OK, back up the chain. */
*** ../readline-7.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 4
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 5
@@ -1,38 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.0
Patch-ID: readline80-001
Bug-Reported-by: chet.ramey@case.edu
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
The history file reading code doesn't close the file descriptor open to
the history file when it encounters a zero-length file.
Patch (apply with `patch -p0'):
*** ../readline-8.0-patched/histfile.c 2018-06-11 09:14:52.000000000 -0400
--- histfile.c 2019-05-16 15:55:57.000000000 -0400
***************
*** 306,309 ****
--- 312,316 ----
{
free (input);
+ close (file);
return 0; /* don't waste time if we don't have to */
}
*** ../readline-8.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 0
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 1
@@ -1,60 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.0
Patch-ID: readline80-002
Bug-Reported-by: lessbug@qq.com
Bug-Reference-ID: <tencent_6AA531D9A5CC4121D86BD5CDA2E0DA98C605@qq.com>
Bug-Reference-URL:
Bug-Description:
When using previous-history to go back beyond the beginning of the history list,
it's possible to move to an incorrect partial line.
Patch (apply with `patch -p0'):
*** ../readline-8.0-patched/misc.c 2017-07-07 17:30:12.000000000 -0400
--- misc.c 2019-05-16 11:43:46.000000000 -0400
***************
*** 577,580 ****
--- 590,594 ----
{
HIST_ENTRY *old_temp, *temp;
+ int had_saved_line;
if (count < 0)
***************
*** 589,592 ****
--- 603,607 ----
/* If we don't have a line saved, then save this one. */
+ had_saved_line = _rl_saved_line_for_history != 0;
rl_maybe_save_line ();
***************
*** 612,616 ****
if (temp == 0)
{
! rl_maybe_unsave_line ();
rl_ding ();
}
--- 627,632 ----
if (temp == 0)
{
! if (had_saved_line == 0)
! _rl_free_saved_history_line ();
rl_ding ();
}
*** ../readline-8.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 1
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 2
@@ -1,69 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.0
Patch-ID: readline80-003
Bug-Reported-by: HIROSE Masaaki <hirose31@gmail.com>
Bug-Reference-ID: <CAGSOfA-RqiTe=+GsXsDKyZrrMWH4bDbXgMVVegMa6OjqC5xbnQ@mail.gmail.com>
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00038.html
Bug-Description:
Reading history entries with timestamps can result in history entries joined
by linefeeds.
Patch (apply with `patch -p0'):
*** ../readline-8.0-patched/histfile.c 2018-06-11 09:14:52.000000000 -0400
--- histfile.c 2019-05-16 15:55:57.000000000 -0400
***************
*** 370,376 ****
has_timestamps = HIST_TIMESTAMP_START (buffer);
! history_multiline_entries += has_timestamps && history_write_timestamps;
/* Skip lines until we are at FROM. */
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++)
if (*line_end == '\n')
--- 370,378 ----
has_timestamps = HIST_TIMESTAMP_START (buffer);
! history_multiline_entries += has_timestamps && history_write_timestamps;
/* Skip lines until we are at FROM. */
+ if (has_timestamps)
+ last_ts = buffer;
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++)
if (*line_end == '\n')
***************
*** 381,385 ****
--- 383,398 ----
if (HIST_TIMESTAMP_START(p) == 0)
current_line++;
+ else
+ last_ts = p;
line_start = p;
+ /* If we are at the last line (current_line == from) but we have
+ timestamps (has_timestamps), then line_start points to the
+ text of the last command, and we need to skip to its end. */
+ if (current_line >= from && has_timestamps)
+ {
+ for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++)
+ ;
+ line_start = (*line_end == '\n') ? line_end + 1 : line_end;
+ }
}
*** ../readline-8.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 2
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 3
@@ -1,47 +0,0 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.0
Patch-ID: readline80-004
Bug-Reported-by: auroralanes@protonmail.ch
Bug-Reference-ID: <WikEDKluAyoha9IDLp83rbN7_Uinr2rrpvSV_z4wmt9qur9piN-FNOn17P0cAizEVah1Fvc9d641vIIWX_7SC6EUTz0CatnOH-C-UK3rPYc=@protonmail.ch>
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2020-01/msg00008.html
Bug-Description:
If writing the history file fails, and renaming the backup history file fails,
it's possible for readline's history code to return the wrong error to its
caller.
Patch (apply with `patch -p0'):
*** ../bash-20200124/lib/readline/histfile.c 2019-11-19 10:31:58.000000000 -0500
--- histfile.c 2020-02-01 16:28:29.000000000 -0500
***************
*** 621,624 ****
--- 621,625 ----
if (rv != 0)
{
+ rv = errno;
if (tempname)
unlink (tempname);
***************
*** 768,771 ****
--- 769,773 ----
if (rv != 0)
{
+ rv = errno;
if (tempname)
unlink (tempname);
*** ../readline-8.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 3
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 4
@@ -0,0 +1,48 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-002
Bug-Reported-by: srobertson@peratonlabs.com
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00049.html
Bug-Description:
It's possible for readline to try to zero out a line that's not null-
terminated, leading to a memory fault.
Patch (apply with `patch -p0'):
*** ../readline-8.2-patched/display.c 2022-04-05 10:47:31.000000000 -0400
--- display.c 2022-12-13 13:11:22.000000000 -0500
***************
*** 2684,2692 ****
if (visible_line)
! {
! temp = visible_line;
! while (*temp)
! *temp++ = '\0';
! }
rl_on_new_line ();
forced_display++;
--- 2735,2740 ----
if (visible_line)
! memset (visible_line, 0, line_size);
!
rl_on_new_line ();
forced_display++;
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 1
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 2
@@ -0,0 +1,43 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-003
Bug-Reported-by: Stefan Klinger <readline-gnu.org@stefan-klinger.de>
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2023-08/msg00018.html
Bug-Description:
Patch (apply with `patch -p0'):
The custom color prefix that readline uses to color possible completions
must have a leading `.'.
*** ../readline-8.2-patched/colors.c 2021-12-08 11:38:25.000000000 -0500
--- colors.c 2023-08-28 16:40:04.000000000 -0400
***************
*** 74,78 ****
static void restore_default_color (void);
! #define RL_COLOR_PREFIX_EXTENSION "readline-colored-completion-prefix"
COLOR_EXT_TYPE *_rl_color_ext_list = 0;
--- 74,78 ----
static void restore_default_color (void);
! #define RL_COLOR_PREFIX_EXTENSION ".readline-colored-completion-prefix"
COLOR_EXT_TYPE *_rl_color_ext_list = 0;
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 2
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 3
@@ -0,0 +1,65 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-004
Bug-Reported-by: Henry Bent <henry.r.bent@gmail.com>
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00044.html
Bug-Description:
Patch (apply with `patch -p0'):
There are systems that supply one of select or pselect, but not both.
*** ../readline-8.2-patched/input.c 2022-04-08 15:43:24.000000000 -0400
--- input.c 2022-11-28 09:41:08.000000000 -0500
***************
*** 152,156 ****
--- 152,158 ----
int _rl_timeout_init (void);
int _rl_timeout_sigalrm_handler (void);
+ #if defined (RL_TIMEOUT_USE_SELECT)
int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *);
+ #endif
static void _rl_timeout_handle (void);
***************
*** 249,253 ****
int chars_avail, k;
char input;
! #if defined(HAVE_SELECT)
fd_set readfds, exceptfds;
struct timeval timeout;
--- 251,255 ----
int chars_avail, k;
char input;
! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
fd_set readfds, exceptfds;
struct timeval timeout;
***************
*** 806,810 ****
unsigned char c;
int fd;
! #if defined (HAVE_PSELECT)
sigset_t empty_set;
fd_set readfds;
--- 815,819 ----
unsigned char c;
int fd;
! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
sigset_t empty_set;
fd_set readfds;
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 3
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 4
@@ -0,0 +1,50 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-005
Bug-Reported-by: Simon Marchi <simon.marchi@polymtl.ca>
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-09/msg00005.html
Bug-Description:
If an application is using readline in callback mode, and a signal arrives
after readline checks for it in rl_callback_read_char() but before it
restores the application's signal handlers, it won't get processed until the
next time the application calls rl_callback_read_char(). Readline needs to
check for and resend any pending signals after restoring the application's
signal handlers.
Patch (apply with `patch -p0'):
*** ../readline-8.2-patched/callback.c 2022-04-29 12:02:56.000000000 -0400
--- callback.c 2022-10-11 10:59:06.000000000 -0400
***************
*** 116,120 ****
do { \
if (rl_persistent_signal_handlers == 0) \
! rl_clear_signals (); \
return; \
} while (0)
--- 116,123 ----
do { \
if (rl_persistent_signal_handlers == 0) \
! { \
! rl_clear_signals (); \
! if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \
! } \
return; \
} while (0)
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 4
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 5
@@ -0,0 +1,99 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-006
Bug-Reported-by: Tom de Vries <tdevries@suse.de>
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-09/msg00001.html
Bug-Description:
This is a variant of the same issue as the one fixed by patch 5. In this
case, the signal arrives and is pending before readline calls rl_getc().
When this happens, the pending signal will be handled by the loop, but may
alter or destroy some state that the callback uses. Readline needs to treat
this case the same way it would if a signal interrupts pselect/select, so
compound operations like searches and reading numeric arguments get cleaned
up properly.
Patch (apply with `patch -p0'):
*** ../readline-8.2-patched/input.c 2022-12-22 16:15:48.000000000 -0500
--- input.c 2023-01-10 11:53:45.000000000 -0500
***************
*** 812,816 ****
rl_getc (FILE *stream)
{
! int result;
unsigned char c;
int fd;
--- 812,816 ----
rl_getc (FILE *stream)
{
! int result, ostate, osig;
unsigned char c;
int fd;
***************
*** 823,828 ****
--- 823,842 ----
while (1)
{
+ osig = _rl_caught_signal;
+ ostate = rl_readline_state;
+
RL_CHECK_SIGNALS ();
+ #if defined (READLINE_CALLBACKS)
+ /* Do signal handling post-processing here, but just in callback mode
+ for right now because the signal cleanup can change some of the
+ callback state, and we need to either let the application have a
+ chance to react or abort some current operation that gets cleaned
+ up by rl_callback_sigcleanup(). If not, we'll just run through the
+ loop again. */
+ if (osig != 0 && (ostate & RL_STATE_CALLBACK))
+ goto postproc_signal;
+ #endif
+
/* We know at this point that _rl_caught_signal == 0 */
***************
*** 888,891 ****
--- 902,908 ----
handle_error:
+ osig = _rl_caught_signal;
+ ostate = rl_readline_state;
+
/* If the error that we received was EINTR, then try again,
this is simply an interrupted system call to read (). We allow
***************
*** 928,933 ****
--- 945,959 ----
#endif /* SIGALRM */
+ postproc_signal:
+ /* POSIX says read(2)/pselect(2)/select(2) don't return EINTR for any
+ reason other than being interrupted by a signal, so we can safely
+ call the application's signal event hook. */
if (rl_signal_event_hook)
(*rl_signal_event_hook) ();
+ #if defined (READLINE_CALLBACKS)
+ else if (osig == SIGINT && (ostate & RL_STATE_CALLBACK) && (ostate & (RL_STATE_ISEARCH|RL_STATE_NSEARCH|RL_STATE_NUMERICARG)))
+ /* just these cases for now */
+ _rl_abort_internal ();
+ #endif
}
}
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 5
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 6
@@ -0,0 +1,48 @@
READLINE PATCH REPORT
=====================
Readline-Release: 8.2
Patch-ID: readline82-007
Bug-Reported-by: Kevin Pulo <kev@pulo.com.au>
Bug-Reference-ID:
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-11/msg00002.html
Bug-Description:
If readline is called with no prompt, it should display a newline if return
is typed on an empty line. It should still suppress the final newline if
return is typed on the last (empty) line of a multi-line command.
Patch (apply with `patch -p0'):
*** ../readline-8.2-patched/display.c 2022-04-05 10:47:31.000000000 -0400
--- display.c 2022-12-13 13:11:22.000000000 -0500
***************
*** 3342,3348 ****
&last_face[_rl_screenwidth - 1 + woff], 1);
}
! _rl_vis_botlin = 0;
! if (botline_length > 0 || _rl_last_c_pos > 0)
rl_crlf ();
fflush (rl_outstream);
rl_display_fixed++;
--- 3394,3400 ----
&last_face[_rl_screenwidth - 1 + woff], 1);
}
! if ((_rl_vis_botlin == 0 && botline_length == 0) || botline_length > 0 || _rl_last_c_pos > 0)
rl_crlf ();
+ _rl_vis_botlin = 0;
fflush (rl_outstream);
rl_display_fixed++;
*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
--- patchlevel 2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
# Do not edit -- exists only for use by patch
! 6
--- 1,3 ----
# Do not edit -- exists only for use by patch
! 7
+13
View File
@@ -18,6 +18,12 @@
</BuildDependencies>
<Patches>
<Patch>readline82-001.patch</Patch>
<Patch>readline82-002.patch</Patch>
<Patch>readline82-003.patch</Patch>
<Patch>readline82-004.patch</Patch>
<Patch>readline82-005.patch</Patch>
<Patch>readline82-006.patch</Patch>
<Patch>readline82-007.patch</Patch>
</Patches>
</Source>
@@ -68,6 +74,13 @@
</Files>
</Package>
<History>
<Update release="11">
<Date>2023-11-19</Date>
<Version>8.2.7</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="10">
<Date>2023-01-28</Date>
<Version>8.2.1</Version>