48 lines
1.4 KiB
Diff
48 lines
1.4 KiB
Diff
|
|
From c99cbf8f289bdda5d4a77d7ec415850a520330ba Mon Sep 17 00:00:00 2001
|
|||
|
|
From: Bram Moolenaar <Bram@vim.org>
|
|||
|
|
Date: Sat, 4 Mar 2023 14:13:10 +0000
|
|||
|
|
Subject: [PATCH] patch 9.0.1378: illegal memory access when using virtual
|
|||
|
|
editing
|
|||
|
|
|
|||
|
|
Problem: Illegal memory access when using virtual editing.
|
|||
|
|
Solution: Make sure "startspaces" is not negative.
|
|||
|
|
---
|
|||
|
|
src/register.c | 2 ++
|
|||
|
|
src/testdir/test_virtualedit.vim | 10 ++++++++++
|
|||
|
|
2 files changed, 12 insertions(+)
|
|||
|
|
|
|||
|
|
diff --git a/src/register.c b/src/register.c
|
|||
|
|
index 461363be378d..f3df79cfd642 100644
|
|||
|
|
--- a/src/register.c
|
|||
|
|
+++ b/src/register.c
|
|||
|
|
@@ -1247,6 +1247,8 @@ op_yank(oparg_T *oap, int deleting, int mess)
|
|||
|
|
// double-count it.
|
|||
|
|
bd.startspaces = (ce - cs + 1)
|
|||
|
|
- oap->start.coladd;
|
|||
|
|
+ if (bd.startspaces < 0)
|
|||
|
|
+ bd.startspaces = 0;
|
|||
|
|
startcol++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
diff --git a/src/testdir/test_virtualedit.vim b/src/testdir/test_virtualedit.vim
|
|||
|
|
index 71cea427bac1..edaae678609d 100644
|
|||
|
|
--- a/src/testdir/test_virtualedit.vim
|
|||
|
|
+++ b/src/testdir/test_virtualedit.vim
|
|||
|
|
@@ -88,6 +88,16 @@ func Test_edit_change()
|
|||
|
|
set virtualedit=
|
|||
|
|
endfunc
|
|||
|
|
|
|||
|
|
+func Test_edit_special_char()
|
|||
|
|
+ new
|
|||
|
|
+ se ve=all
|
|||
|
|
+ norm a0
|
|||
|
|
+ sil! exe "norm o00000\<Nul>k<a0s"
|
|||
|
|
+
|
|||
|
|
+ bwipe!
|
|||
|
|
+ set virtualedit=
|
|||
|
|
+endfunc
|
|||
|
|
+
|
|||
|
|
" Tests for pasting at the beginning, end and middle of a tab character
|
|||
|
|
" in virtual edit mode.
|
|||
|
|
func Test_paste_in_tab()
|