readline-8.2.13
This commit is contained in:
@@ -0,0 +1,75 @@
|
|||||||
|
READLINE PATCH REPORT
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Readline-Release: 8.2
|
||||||
|
Patch-ID: readline82-011
|
||||||
|
|
||||||
|
Bug-Reported-by: Grisha Levit <grishalevit@gmail.com>
|
||||||
|
Bug-Reference-ID: <CAMu=BrqWa_iNkiEwchpFmtrUhFrAanOO8pjy7VCKqRKUvqdsbw@mail.gmail.com>
|
||||||
|
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2024-02/msg00075.html
|
||||||
|
|
||||||
|
Bug-Description:
|
||||||
|
|
||||||
|
Patch (apply with `patch -p0'):
|
||||||
|
|
||||||
|
Some systems (e.g., macOS) send signals early on in interactive initialization,
|
||||||
|
so readline should retry a failed open of the init file.
|
||||||
|
|
||||||
|
*** ../readline-8.2-patched/bind.c Wed Feb 9 11:02:22 2022
|
||||||
|
--- bind.c Tue Apr 23 15:07:13 2024
|
||||||
|
***************
|
||||||
|
*** 979,987 ****
|
||||||
|
int i, file;
|
||||||
|
|
||||||
|
! file = -1;
|
||||||
|
! if (((file = open (filename, O_RDONLY, 0666)) < 0) || (fstat (file, &finfo) < 0))
|
||||||
|
{
|
||||||
|
if (file >= 0)
|
||||||
|
close (file);
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
--- 969,986 ----
|
||||||
|
int i, file;
|
||||||
|
|
||||||
|
! file = open (filename, O_RDONLY, 0666);
|
||||||
|
! /* If the open is interrupted, retry once */
|
||||||
|
! if (file < 0 && errno == EINTR)
|
||||||
|
{
|
||||||
|
+ RL_CHECK_SIGNALS ();
|
||||||
|
+ file = open (filename, O_RDONLY, 0666);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((file < 0) || (fstat (file, &finfo) < 0))
|
||||||
|
+ {
|
||||||
|
+ i = errno;
|
||||||
|
if (file >= 0)
|
||||||
|
close (file);
|
||||||
|
+ errno = i;
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
***************
|
||||||
|
*** 992,999 ****
|
||||||
|
--- 991,1001 ----
|
||||||
|
if (file_size != finfo.st_size || file_size + 1 < file_size)
|
||||||
|
{
|
||||||
|
+ i = errno;
|
||||||
|
if (file >= 0)
|
||||||
|
close (file);
|
||||||
|
#if defined (EFBIG)
|
||||||
|
errno = EFBIG;
|
||||||
|
+ #else
|
||||||
|
+ errno = i;
|
||||||
|
#endif
|
||||||
|
return ((char *)NULL);
|
||||||
|
|
||||||
|
*** ../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
|
||||||
|
|
||||||
|
! 10
|
||||||
|
--- 1,3 ----
|
||||||
|
# Do not edit -- exists only for use by patch
|
||||||
|
|
||||||
|
! 11
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
READLINE PATCH REPORT
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Readline-Release: 8.2
|
||||||
|
Patch-ID: readline82-012
|
||||||
|
|
||||||
|
Bug-Reported-by: Grisha Levit <grishalevit@gmail.com>
|
||||||
|
Bug-Reference-ID: <CAMu=BroaH+41uumYt89FPqt8Fsatj-d6mZzmPV2HZYjtcbvbvw@mail.gmail.com>
|
||||||
|
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2023-11/msg00019.html
|
||||||
|
|
||||||
|
Bug-Description:
|
||||||
|
|
||||||
|
If a user happens to bind do-lowercase-version to something that isn't a
|
||||||
|
capital letter, so _rl_to_lower doesn't change anything and the result is
|
||||||
|
still bound to do-lowercase-version, readline can recurse infinitely.
|
||||||
|
|
||||||
|
Patch (apply with `patch -p0'):
|
||||||
|
|
||||||
|
*** ../readline-8.2-patched/readline.c Thu Aug 11 18:35:37 2022
|
||||||
|
--- readline.c Fri Feb 2 12:05:36 2024
|
||||||
|
***************
|
||||||
|
*** 900,905 ****
|
||||||
|
/* Special case rl_do_lowercase_version (). */
|
||||||
|
if (func == rl_do_lowercase_version)
|
||||||
|
! /* Should we do anything special if key == ANYOTHERKEY? */
|
||||||
|
! return (_rl_dispatch (_rl_to_lower ((unsigned char)key), map));
|
||||||
|
|
||||||
|
rl_executing_keymap = map;
|
||||||
|
--- 912,926 ----
|
||||||
|
/* Special case rl_do_lowercase_version (). */
|
||||||
|
if (func == rl_do_lowercase_version)
|
||||||
|
! {
|
||||||
|
! /* Should we do anything special if key == ANYOTHERKEY? */
|
||||||
|
! newkey = _rl_to_lower ((unsigned char)key);
|
||||||
|
! if (newkey != key)
|
||||||
|
! return (_rl_dispatch (newkey, map));
|
||||||
|
! else
|
||||||
|
! {
|
||||||
|
! rl_ding (); /* gentle failure */
|
||||||
|
! return 0;
|
||||||
|
! }
|
||||||
|
! }
|
||||||
|
|
||||||
|
rl_executing_keymap = map;
|
||||||
|
***************
|
||||||
|
*** 1110,1114 ****
|
||||||
|
func = m[ANYOTHERKEY].function;
|
||||||
|
if (type == ISFUNC && func == rl_do_lowercase_version)
|
||||||
|
! r = _rl_dispatch (_rl_to_lower ((unsigned char)key), map);
|
||||||
|
else if (type == ISFUNC)
|
||||||
|
{
|
||||||
|
--- 1131,1139 ----
|
||||||
|
func = m[ANYOTHERKEY].function;
|
||||||
|
if (type == ISFUNC && func == rl_do_lowercase_version)
|
||||||
|
! {
|
||||||
|
! int newkey = _rl_to_lower ((unsigned char)key);
|
||||||
|
! /* check that there is actually a lowercase version to avoid infinite recursion */
|
||||||
|
! r = (newkey != key) ? _rl_dispatch (newkey, map) : 1;
|
||||||
|
! }
|
||||||
|
else if (type == ISFUNC)
|
||||||
|
{
|
||||||
|
|
||||||
|
*** ../readline-8.2-patched/isearch.c Thu Aug 11 18:35:37 2022
|
||||||
|
--- isearch.c Fri Feb 2 12:05:36 2024
|
||||||
|
***************
|
||||||
|
*** 429,433 ****
|
||||||
|
f = cxt->keymap[c].function;
|
||||||
|
if (f == rl_do_lowercase_version)
|
||||||
|
! f = cxt->keymap[_rl_to_lower (c)].function;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- 431,439 ----
|
||||||
|
f = cxt->keymap[c].function;
|
||||||
|
if (f == rl_do_lowercase_version)
|
||||||
|
! {
|
||||||
|
! f = cxt->keymap[_rl_to_lower (c)].function;
|
||||||
|
! if (f == rl_do_lowercase_version)
|
||||||
|
! f = rl_insert;
|
||||||
|
! }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*** ../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
|
||||||
|
|
||||||
|
! 11
|
||||||
|
--- 1,3 ----
|
||||||
|
# Do not edit -- exists only for use by patch
|
||||||
|
|
||||||
|
! 12
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
READLINE PATCH REPORT
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Readline-Release: 8.2
|
||||||
|
Patch-ID: readline82-013
|
||||||
|
|
||||||
|
Bug-Reported-by: Grisha Levit <grishalevit@gmail.com>
|
||||||
|
Bug-Reference-ID: <CAMu=Brrv5qKY6LPfw8PxqNXNO8rNsZo0Fb=BcFb-uHObWPqnrw@mail.gmail.
|
||||||
|
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2023-04/msg00082.html
|
||||||
|
|
||||||
|
Bug-Description:
|
||||||
|
|
||||||
|
When readline is accumulating bytes until it reads a complete multibyte
|
||||||
|
character, reading a byte that makes the multibyte character invalid can
|
||||||
|
result in discarding the bytes in the partial character.
|
||||||
|
|
||||||
|
Patch (apply with `patch -p0'):
|
||||||
|
|
||||||
|
*** ../readline-8.2-patched/text.c Mon May 1 09:37:52 2023
|
||||||
|
--- text.c Mon May 29 12:22:29 2023
|
||||||
|
***************
|
||||||
|
*** 86,90 ****
|
||||||
|
rl_insert_text (const char *string)
|
||||||
|
{
|
||||||
|
! register int i, l;
|
||||||
|
|
||||||
|
l = (string && *string) ? strlen (string) : 0;
|
||||||
|
--- 86,91 ----
|
||||||
|
rl_insert_text (const char *string)
|
||||||
|
{
|
||||||
|
! register int i;
|
||||||
|
! size_t l;
|
||||||
|
|
||||||
|
l = (string && *string) ? strlen (string) : 0;
|
||||||
|
***************
|
||||||
|
*** 705,709 ****
|
||||||
|
/* Insert the character C at the current location, moving point forward.
|
||||||
|
If C introduces a multibyte sequence, we read the whole sequence and
|
||||||
|
! then insert the multibyte char into the line buffer. */
|
||||||
|
int
|
||||||
|
_rl_insert_char (int count, int c)
|
||||||
|
--- 706,714 ----
|
||||||
|
/* Insert the character C at the current location, moving point forward.
|
||||||
|
If C introduces a multibyte sequence, we read the whole sequence and
|
||||||
|
! then insert the multibyte char into the line buffer.
|
||||||
|
! If C == 0, we immediately insert any pending partial multibyte character,
|
||||||
|
! assuming that we have read a character that doesn't map to self-insert.
|
||||||
|
! This doesn't completely handle characters that are part of a multibyte
|
||||||
|
! character but map to editing functions. */
|
||||||
|
int
|
||||||
|
_rl_insert_char (int count, int c)
|
||||||
|
***************
|
||||||
|
*** 719,727 ****
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (count <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
! #if defined (HANDLE_MULTIBYTE)
|
||||||
|
! if (MB_CUR_MAX == 1 || rl_byte_oriented)
|
||||||
|
{
|
||||||
|
incoming[0] = c;
|
||||||
|
--- 724,749 ----
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ #if !defined (HANDLE_MULTIBYTE)
|
||||||
|
if (count <= 0)
|
||||||
|
return 0;
|
||||||
|
+ #else
|
||||||
|
+ if (count < 0)
|
||||||
|
+ return 0;
|
||||||
|
+ if (count == 0)
|
||||||
|
+ {
|
||||||
|
+ if (pending_bytes_length == 0)
|
||||||
|
+ return 0;
|
||||||
|
+ if (stored_count <= 0)
|
||||||
|
+ stored_count = count;
|
||||||
|
+ else
|
||||||
|
+ count = stored_count;
|
||||||
|
|
||||||
|
! memcpy (incoming, pending_bytes, pending_bytes_length);
|
||||||
|
! incoming[pending_bytes_length] = '\0';
|
||||||
|
! incoming_length = pending_bytes_length;
|
||||||
|
! pending_bytes_length = 0;
|
||||||
|
! memset (&ps, 0, sizeof (mbstate_t));
|
||||||
|
! }
|
||||||
|
! else if (MB_CUR_MAX == 1 || rl_byte_oriented)
|
||||||
|
{
|
||||||
|
incoming[0] = c;
|
||||||
|
***************
|
||||||
|
*** 731,734 ****
|
||||||
|
--- 753,759 ----
|
||||||
|
else if (_rl_utf8locale && (c & 0x80) == 0)
|
||||||
|
{
|
||||||
|
+ if (pending_bytes_length)
|
||||||
|
+ _rl_insert_char (0, 0);
|
||||||
|
+
|
||||||
|
incoming[0] = c;
|
||||||
|
incoming[1] = '\0';
|
||||||
|
***************
|
||||||
|
*** 765,769 ****
|
||||||
|
incoming_length = 1;
|
||||||
|
pending_bytes_length--;
|
||||||
|
! memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);
|
||||||
|
/* Clear the state of the byte sequence, because in this case the
|
||||||
|
effect of mbstate is undefined. */
|
||||||
|
--- 790,795 ----
|
||||||
|
incoming_length = 1;
|
||||||
|
pending_bytes_length--;
|
||||||
|
! if (pending_bytes_length)
|
||||||
|
! memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);
|
||||||
|
/* Clear the state of the byte sequence, because in this case the
|
||||||
|
effect of mbstate is undefined. */
|
||||||
|
***************
|
||||||
|
*** 828,832 ****
|
||||||
|
--- 854,862 ----
|
||||||
|
xfree (string);
|
||||||
|
|
||||||
|
+ #if defined (HANDLE_MULTIBYTE)
|
||||||
|
+ return (pending_bytes_length != 0);
|
||||||
|
+ #else
|
||||||
|
return 0;
|
||||||
|
+ #endif
|
||||||
|
}
|
||||||
|
|
||||||
|
***************
|
||||||
|
*** 861,864 ****
|
||||||
|
--- 891,896 ----
|
||||||
|
incoming_length = 0;
|
||||||
|
stored_count = 0;
|
||||||
|
+
|
||||||
|
+ return (pending_bytes_length != 0);
|
||||||
|
#else /* !HANDLE_MULTIBYTE */
|
||||||
|
char str[TEXT_COUNT_MAX+1];
|
||||||
|
***************
|
||||||
|
*** 874,880 ****
|
||||||
|
count -= decreaser;
|
||||||
|
}
|
||||||
|
- #endif /* !HANDLE_MULTIBYTE */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- 906,912 ----
|
||||||
|
count -= decreaser;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
+ #endif /* !HANDLE_MULTIBYTE */
|
||||||
|
}
|
||||||
|
|
||||||
|
***************
|
||||||
|
*** 904,910 ****
|
||||||
|
stored_count = 0;
|
||||||
|
}
|
||||||
|
! #endif
|
||||||
|
!
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- 936,944 ----
|
||||||
|
stored_count = 0;
|
||||||
|
}
|
||||||
|
!
|
||||||
|
! return (pending_bytes_length != 0);
|
||||||
|
! #else
|
||||||
|
return 0;
|
||||||
|
+ #endif
|
||||||
|
}
|
||||||
|
|
||||||
|
***************
|
||||||
|
*** 984,987 ****
|
||||||
|
--- 1018,1026 ----
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* If we didn't insert n and there are pending bytes, we need to insert
|
||||||
|
+ them if _rl_insert_char didn't do that on its own. */
|
||||||
|
+ if (r == 1 && rl_insert_mode == RL_IM_INSERT)
|
||||||
|
+ r = _rl_insert_char (0, 0); /* flush partial multibyte char */
|
||||||
|
+
|
||||||
|
if (n != (unsigned short)-2) /* -2 = sentinel value for having inserted N */
|
||||||
|
{
|
||||||
|
***************
|
||||||
|
*** 1055,1058 ****
|
||||||
|
--- 1094,1099 ----
|
||||||
|
rl_quoted_insert (int count, int key)
|
||||||
|
{
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
/* Let's see...should the callback interface futz with signal handling? */
|
||||||
|
#if defined (HANDLE_SIGNALS)
|
||||||
|
***************
|
||||||
|
*** 1073,1085 ****
|
||||||
|
if (count < 0)
|
||||||
|
{
|
||||||
|
- int r;
|
||||||
|
-
|
||||||
|
do
|
||||||
|
r = _rl_insert_next (1);
|
||||||
|
while (r == 0 && ++count < 0);
|
||||||
|
- return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
! return _rl_insert_next (count);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- 1114,1128 ----
|
||||||
|
if (count < 0)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
r = _rl_insert_next (1);
|
||||||
|
while (r == 0 && ++count < 0);
|
||||||
|
}
|
||||||
|
+ else
|
||||||
|
+ r = _rl_insert_next (count);
|
||||||
|
|
||||||
|
! if (r == 1)
|
||||||
|
! _rl_insert_char (0, 0); /* insert partial multibyte character */
|
||||||
|
!
|
||||||
|
! return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*** ../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
|
||||||
|
|
||||||
|
! 12
|
||||||
|
--- 1,3 ----
|
||||||
|
# Do not edit -- exists only for use by patch
|
||||||
|
|
||||||
|
! 13
|
||||||
@@ -27,6 +27,9 @@
|
|||||||
<Patch>readline82-008.patch</Patch>
|
<Patch>readline82-008.patch</Patch>
|
||||||
<Patch>readline82-009.patch</Patch>
|
<Patch>readline82-009.patch</Patch>
|
||||||
<Patch>readline82-010.patch</Patch>
|
<Patch>readline82-010.patch</Patch>
|
||||||
|
<Patch>readline82-011.patch</Patch>
|
||||||
|
<Patch>readline82-012.patch</Patch>
|
||||||
|
<Patch>readline82-013.patch</Patch>
|
||||||
</Patches>
|
</Patches>
|
||||||
</Source>
|
</Source>
|
||||||
|
|
||||||
@@ -77,6 +80,13 @@
|
|||||||
</Files>
|
</Files>
|
||||||
</Package>
|
</Package>
|
||||||
<History>
|
<History>
|
||||||
|
<Update release="13">
|
||||||
|
<Date>2024-08-03</Date>
|
||||||
|
<Version>8.2.13</Version>
|
||||||
|
<Comment>Version bump.</Comment>
|
||||||
|
<Name>Mustafa Cinasal</Name>
|
||||||
|
<Email>muscnsl@gmail.com</Email>
|
||||||
|
</Update>
|
||||||
<Update release="12">
|
<Update release="12">
|
||||||
<Date>2024-01-15</Date>
|
<Date>2024-01-15</Date>
|
||||||
<Version>8.2.10</Version>
|
<Version>8.2.10</Version>
|
||||||
|
|||||||
Reference in New Issue
Block a user