mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.1433: illegal memory access after undo
Problem: Illegal memory access after undo. (Dominique Pelle)
Solution: Avoid the column becomes negative. (Christian Brabandt,
closes vim/vim#2533)
95dbcbea6d
This commit is contained in:
parent
4e963f2462
commit
6853690c78
@ -1465,7 +1465,11 @@ void mark_mb_adjustpos(buf_T *buf, pos_T *lp)
|
|||||||
{
|
{
|
||||||
if (lp->col > 0 || lp->coladd > 1) {
|
if (lp->col > 0 || lp->coladd > 1) {
|
||||||
const char_u *const p = ml_get_buf(buf, lp->lnum, false);
|
const char_u *const p = ml_get_buf(buf, lp->lnum, false);
|
||||||
lp->col -= (*mb_head_off)(p, p + lp->col);
|
if (*p == NUL || (int)STRLEN(p) < lp->col) {
|
||||||
|
lp->col = 0;
|
||||||
|
} else {
|
||||||
|
lp->col -= (*mb_head_off)(p, p + lp->col);
|
||||||
|
}
|
||||||
// Reset "coladd" when the cursor would be on the right half of a
|
// Reset "coladd" when the cursor would be on the right half of a
|
||||||
// double-wide character.
|
// double-wide character.
|
||||||
if (lp->coladd == 1
|
if (lp->coladd == 1
|
||||||
|
@ -566,7 +566,9 @@ int utf_off2cells(unsigned off, unsigned max_off)
|
|||||||
/// Convert a UTF-8 byte sequence to a wide character
|
/// Convert a UTF-8 byte sequence to a wide character
|
||||||
///
|
///
|
||||||
/// If the sequence is illegal or truncated by a NUL then the first byte is
|
/// If the sequence is illegal or truncated by a NUL then the first byte is
|
||||||
/// returned. Does not include composing characters for obvious reasons.
|
/// returned.
|
||||||
|
/// For an overlong sequence this may return zero.
|
||||||
|
/// Does not include composing characters for obvious reasons.
|
||||||
///
|
///
|
||||||
/// @param[in] p String to convert.
|
/// @param[in] p String to convert.
|
||||||
///
|
///
|
||||||
|
@ -348,3 +348,12 @@ func Test_redo_empty_line()
|
|||||||
exe "norm."
|
exe "norm."
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" This used to cause an illegal memory access
|
||||||
|
func Test_undo_append()
|
||||||
|
new
|
||||||
|
call feedkeys("axx\<Esc>v", 'xt')
|
||||||
|
undo
|
||||||
|
norm o
|
||||||
|
quit
|
||||||
|
endfunc
|
||||||
|
Loading…
Reference in New Issue
Block a user