2004-01-27 Elena Zannoni <ezannoni@redhat.com>
Merge in official patches to readline-4.3 from ftp://ftp.cwru.edu/pub/bash/readline-4.3-patches: NOTE: Patch-ID readline-43-004 was already applied (see below). * bind.c (rl_generic_bind): Pressing certain key sequences causes an infinite loop in _rl_dispatch_subseq with the `key' argument set to 256. This eventually causes bash to exceed the stack size limit and crash with a segmentation violation. Patch-ID: readline43-001. * readline.c (_rl_dispatch_subseq): Repeating an edit in vi-mode with `.' does not work. Patch-ID: readline43-002. * mbutil.c (_rl_get_char_len, _rl_compare_chars, _rl_adjust_point): When in a locale with multibyte characters, the readline display updater will occasionally cause a segmentation fault when attempting to compute the length of the first multibyte character on the line. Patch-ID: readline43-003. * vi_mode.c (_rl_vi_change_mbchar_case): Using the vi editing mode's case-changing commands in a locale with multibyte characters will cause garbage characters to be inserted into the editing buffer. Patch-ID: readline43-005.
This commit is contained in:
parent
e142c38c71
commit
5af408ce2f
5 changed files with 56 additions and 9 deletions
|
@ -1,3 +1,31 @@
|
|||
2004-01-27 Elena Zannoni <ezannoni@redhat.com>
|
||||
|
||||
Merge in official patches to readline-4.3 from
|
||||
ftp://ftp.cwru.edu/pub/bash/readline-4.3-patches:
|
||||
NOTE: Patch-ID readline-43-004 was already applied (see below).
|
||||
|
||||
* bind.c (rl_generic_bind): Pressing certain key sequences
|
||||
causes an infinite loop in _rl_dispatch_subseq with the `key' argument
|
||||
set to 256. This eventually causes bash to exceed the stack size
|
||||
limit and crash with a segmentation violation.
|
||||
Patch-ID: readline43-001.
|
||||
|
||||
* readline.c (_rl_dispatch_subseq): Repeating an edit in
|
||||
vi-mode with `.' does not work.
|
||||
Patch-ID: readline43-002.
|
||||
|
||||
* mbutil.c (_rl_get_char_len, _rl_compare_chars,
|
||||
_rl_adjust_point): When in a locale with multibyte characters, the
|
||||
readline display updater will occasionally cause a
|
||||
segmentation fault when attempting to compute the length of the first
|
||||
multibyte character on the line.
|
||||
Patch-ID: readline43-003.
|
||||
|
||||
* vi_mode.c (_rl_vi_change_mbchar_case): Using the vi editing
|
||||
mode's case-changing commands in a locale with multibyte characters
|
||||
will cause garbage characters to be inserted into the editing buffer.
|
||||
Patch-ID: readline43-005.
|
||||
|
||||
2003-12-28 Eli Zaretskii <eliz@elta.co.il>
|
||||
|
||||
* readline.c (rl_save_state, rl_restore_state): Support systems
|
||||
|
@ -57,7 +85,14 @@
|
|||
2003-01-09 Michael Chastain <mec@shout.net>
|
||||
|
||||
From Chet Ramey, <chet@po.cwru.edu>, the readline maintainer:
|
||||
ftp://ftp.cwru.edu/pub/bash/readline-4.3-patches/readline43-004
|
||||
|
||||
* display.c: Fix perverse screen refresh with UTF-8.
|
||||
When running in a locale with multibyte characters, the
|
||||
readline display updater will use carriage returns when
|
||||
drawing the line, overwriting any partial output already on
|
||||
the screen and not terminated by a newline.
|
||||
Patch-ID: readline43-004
|
||||
|
||||
2003-01-08 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
|
|
|
@ -311,7 +311,7 @@ rl_generic_bind (type, keyseq, data, map)
|
|||
mapped to something, `abc' to be mapped to something else,
|
||||
and the function bound to `a' to be executed when the user
|
||||
types `abx', leaving `bx' in the input queue. */
|
||||
if (k.function /* && k.type == ISFUNC */)
|
||||
if (k.function && ((k.type == ISFUNC && k.function != rl_do_lowercase_version) || k.type == ISMACR))
|
||||
{
|
||||
map[ANYOTHERKEY] = k;
|
||||
k.function = 0;
|
||||
|
|
|
@ -205,14 +205,16 @@ _rl_get_char_len (src, ps)
|
|||
if (tmp == (size_t)(-2))
|
||||
{
|
||||
/* shorted to compose multibyte char */
|
||||
memset (ps, 0, sizeof(mbstate_t));
|
||||
if (ps)
|
||||
memset (ps, 0, sizeof(mbstate_t));
|
||||
return -2;
|
||||
}
|
||||
else if (tmp == (size_t)(-1))
|
||||
{
|
||||
/* invalid to compose multibyte char */
|
||||
/* initialize the conversion state */
|
||||
memset (ps, 0, sizeof(mbstate_t));
|
||||
if (ps)
|
||||
memset (ps, 0, sizeof(mbstate_t));
|
||||
return -1;
|
||||
}
|
||||
else if (tmp == (size_t)0)
|
||||
|
@ -225,9 +227,12 @@ _rl_get_char_len (src, ps)
|
|||
return 1. Otherwise return 0. */
|
||||
int
|
||||
_rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2)
|
||||
char *buf1, *buf2;
|
||||
mbstate_t *ps1, *ps2;
|
||||
int pos1, pos2;
|
||||
char *buf1;
|
||||
int pos1;
|
||||
mbstate_t *ps1;
|
||||
char *buf2;
|
||||
int pos2;
|
||||
mbstate_t *ps2;
|
||||
{
|
||||
int i, w1, w2;
|
||||
|
||||
|
@ -276,8 +281,11 @@ _rl_adjust_point(string, point, ps)
|
|||
pos++;
|
||||
/* clear the state of the byte sequence, because
|
||||
in this case effect of mbstate is undefined */
|
||||
memset (ps, 0, sizeof (mbstate_t));
|
||||
if (ps)
|
||||
memset (ps, 0, sizeof (mbstate_t));
|
||||
}
|
||||
else if (tmp == 0)
|
||||
pos++;
|
||||
else
|
||||
pos += tmp;
|
||||
}
|
||||
|
|
|
@ -684,6 +684,7 @@ _rl_dispatch_subseq (key, map, got_subseq)
|
|||
}
|
||||
#if defined (VI_MODE)
|
||||
if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
|
||||
key != ANYOTHERKEY &&
|
||||
_rl_vi_textmod_command (key))
|
||||
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
|
||||
#endif
|
||||
|
|
|
@ -680,7 +680,8 @@ _rl_vi_change_mbchar_case (count)
|
|||
int count;
|
||||
{
|
||||
wchar_t wc;
|
||||
char mb[MB_LEN_MAX];
|
||||
char mb[MB_LEN_MAX+1];
|
||||
int mblen;
|
||||
mbstate_t ps;
|
||||
|
||||
memset (&ps, 0, sizeof (mbstate_t));
|
||||
|
@ -703,7 +704,9 @@ _rl_vi_change_mbchar_case (count)
|
|||
/* Vi is kind of strange here. */
|
||||
if (wc)
|
||||
{
|
||||
wctomb (mb, wc);
|
||||
mblen = wctomb (mb, wc);
|
||||
if (mblen >= 0)
|
||||
mb[mblen] = '\0';
|
||||
rl_begin_undo_group ();
|
||||
rl_delete (1, 0);
|
||||
rl_insert_text (mb);
|
||||
|
|
Loading…
Reference in a new issue