+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
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>
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;
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)
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;
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;
}