Accepting request 1127840 from Base:System

- Add upstream patch readline82-002
  * It's possible for readline to try to zero out a line that's not null-
    terminated, leading to a memory fault.
- Add upstream patch readline82-003
- Add upstream patch readline82-004
- Add upstream patch readline82-005
  * 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.
- Add upstream patch readline82-006
  * 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.
- Add upstream patch readline82-007
  * 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.

OBS-URL: https://build.opensuse.org/request/show/1127840
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/readline?expand=0&rev=15
This commit is contained in:
Ana Guerrero 2023-11-22 17:54:01 +00:00 committed by Git OBS Bridge
commit de484f9533
15 changed files with 411 additions and 12 deletions

View File

@ -5,7 +5,7 @@
--- lib/readline/input.c
+++ lib/readline/input.c 2018-11-29 08:29:58.432878428 +0000
@@ -799,6 +799,8 @@ rl_read_key (void)
@@ -801,6 +801,8 @@ rl_read_key (void)
return (c);
}
@ -14,7 +14,7 @@
int
rl_getc (FILE *stream)
{
@@ -846,7 +848,10 @@ rl_getc (FILE *stream)
@@ -862,7 +864,10 @@ rl_getc (FILE *stream)
/* If zero characters are returned, then the file that we are
reading from is empty! Return EOF in that case. */
if (result == 0)

View File

@ -1,3 +1,31 @@
-------------------------------------------------------------------
Tue Nov 21 07:04:06 UTC 2023 - Dr. Werner Fink <werner@suse.de>
- Add upstream patch readline82-002
* It's possible for readline to try to zero out a line that's not null-
terminated, leading to a memory fault.
- Add upstream patch readline82-003
- Add upstream patch readline82-004
- Add upstream patch readline82-005
* 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.
- Add upstream patch readline82-006
* 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.
- Add upstream patch readline82-007
* 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.
-------------------------------------------------------------------
Fri Oct 21 08:36:57 UTC 2022 - Dr. Werner Fink <werner@suse.de>

View File

@ -1,7 +1,7 @@
#
# spec file for package readline
#
# Copyright (c) 2022 SUSE LLC
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -34,7 +34,19 @@ Source4: https://tiswww.case.edu/php/chet/gpgkey.asc#/%{name}.keyring
# signatures for official patches
# official patches
Patch101: readline82-001
Patch102: readline82-002
Patch103: readline82-003
Patch104: readline82-004
Patch105: readline82-005
Patch106: readline82-006
Patch107: readline82-007
Source101: readline82-001.sig
Source102: readline82-002.sig
Source103: readline82-003.sig
Source104: readline82-004.sig
Source105: readline82-005.sig
Source106: readline82-006.sig
Source107: readline82-007.sig
# local patches
Patch200: readline-%{version}.dif
Patch201: readline-6.3-input.dif
@ -105,16 +117,22 @@ as well as programming with the interface of the readline library.
%prep
%setup -q -n readline-%{version}%{rextend}
# official patches
%patch101 -p0
%patch -P101 -p0
%patch -P102 -p0
%patch -P103 -p0
%patch -P104 -p0
%patch -P105 -p0
%patch -P106 -p0
%patch -P107 -p0
# local patches
%patch201 -p2 -b .zerotty
%patch202 -p2 -b .conf
%patch203 -p2 -b .metamode
%patch205 -b .xm
%patch206 -b .destdir
%patch207 -p2 -b .tmp
%patch208 -p2 -b .screen
%patch200 -b .0
%patch -P201 -p2 -b .zerotty
%patch -P202 -p2 -b .conf
%patch -P203 -p2 -b .metamode
%patch -P205 -b .xm
%patch -P206 -b .destdir
%patch -P207 -p2 -b .tmp
%patch -P208 -p2 -b .screen
%patch -P200 -b .0
%build
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects

48
readline82-002 Normal file
View File

@ -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

BIN
readline82-002.sig Normal file

Binary file not shown.

43
readline82-003 Normal file
View File

@ -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

BIN
readline82-003.sig Normal file

Binary file not shown.

65
readline82-004 Normal file
View File

@ -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

BIN
readline82-004.sig Normal file

Binary file not shown.

50
readline82-005 Normal file
View File

@ -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

BIN
readline82-005.sig Normal file

Binary file not shown.

99
readline82-006 Normal file
View File

@ -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

BIN
readline82-006.sig Normal file

Binary file not shown.

48
readline82-007 Normal file
View File

@ -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

BIN
readline82-007.sig Normal file

Binary file not shown.