mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 13:38:34 +00:00
vim-patch:9.0.0011: reading beyond the end of the line with put command (#19166)
Problem: Reading beyond the end of the line with put command.
Solution: Adjust the end mark position.
d25f003342
This commit is contained in:
@@ -3344,7 +3344,6 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
|
|||||||
|
|
||||||
totlen = (size_t)(count * (yanklen + spaces)
|
totlen = (size_t)(count * (yanklen + spaces)
|
||||||
+ bd.startspaces + bd.endspaces);
|
+ bd.startspaces + bd.endspaces);
|
||||||
int addcount = (int)totlen + lines_appended;
|
|
||||||
newp = (char_u *)xmalloc(totlen + oldlen + 1);
|
newp = (char_u *)xmalloc(totlen + oldlen + 1);
|
||||||
|
|
||||||
// copy part up to cursor to new line
|
// copy part up to cursor to new line
|
||||||
@@ -3366,7 +3365,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
|
|||||||
memset(ptr, ' ', (size_t)spaces);
|
memset(ptr, ' ', (size_t)spaces);
|
||||||
ptr += spaces;
|
ptr += spaces;
|
||||||
} else {
|
} else {
|
||||||
addcount -= spaces;
|
totlen -= (size_t)spaces; // didn't use these spaces
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3380,7 +3379,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
|
|||||||
memmove(ptr, oldp + bd.textcol + delcount, (size_t)columns);
|
memmove(ptr, oldp + bd.textcol + delcount, (size_t)columns);
|
||||||
ml_replace(curwin->w_cursor.lnum, (char *)newp, false);
|
ml_replace(curwin->w_cursor.lnum, (char *)newp, false);
|
||||||
extmark_splice_cols(curbuf, (int)curwin->w_cursor.lnum - 1, bd.textcol,
|
extmark_splice_cols(curbuf, (int)curwin->w_cursor.lnum - 1, bd.textcol,
|
||||||
delcount, addcount, kExtmarkUndo);
|
delcount, (int)totlen + lines_appended, kExtmarkUndo);
|
||||||
|
|
||||||
++curwin->w_cursor.lnum;
|
++curwin->w_cursor.lnum;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
@@ -213,5 +213,17 @@ func Test_put_empty_register()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" this was putting the end mark after the end of the line
|
||||||
|
func Test_put_visual_mode()
|
||||||
|
edit! SomeNewBuffer
|
||||||
|
set selection=exclusive
|
||||||
|
exe "norm o\t"
|
||||||
|
m0
|
||||||
|
sil! norm
|
||||||
|
p
|
||||||
|
p
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
set selection&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user