--- readline-6.0.orig/display.c 2009-08-02 19:43:39.000000000 +0200 +++ readline6-6.0/display.c 2009-08-02 19:14:14.000000000 +0200 @@ -1319,11 +1319,15 @@ ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps); if (ret != 0 && bytes != 0) { - if (MB_INVALIDCH (ret)) - memmove (old+bytes, old+1, strlen (old+1)); - else - memmove (old+bytes, old+ret, strlen (old+ret)); + int i; + if (MB_INVALIDCH (ret)){ + ret = 1; + } + memmove (old+bytes, old+ret, strlen (old+ret)); memcpy (old, new, bytes); + omax += bytes - ret; + for(i = current_line + 1; i <= inv_botlin + 1; i++) + vis_lbreaks[i] += bytes - ret; } } else @@ -1668,7 +1672,7 @@ multibyte characters and prompt strings with invisible characters, but was previously disabled. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); + twidth = _rl_col_width (nfd+lendiff, 0, temp-lendiff); else twidth = temp - lendiff; _rl_last_c_pos += twidth;