summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-01-27 19:27:16 +0000
committerBram Moolenaar <Bram@vim.org>2022-01-27 19:27:16 +0000
commita4bc2dd7cccf5a4a9f78b58b6f35a45d17164323 (patch)
tree24f9080819f0ab341fe959e3d3c25da2417f9278
parent98cd30383a378eb5f2dbf1b4e887fa17b5494a64 (diff)
downloadvim-git-a4bc2dd7cccf5a4a9f78b58b6f35a45d17164323.tar.gz
patch 8.2.4233: crash when recording and using Select modev8.2.4233
Problem: Crash when recording and using Select mode. Solution: When deleting the last recorded character check there is something to delete.
-rw-r--r--src/getchar.c5
-rw-r--r--src/testdir/test_registers.vim9
-rw-r--r--src/version.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/src/getchar.c b/src/getchar.c
index c0dfc2b0b..49eb3d7df 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -252,8 +252,11 @@ add_buff(
static void
delete_buff_tail(buffheader_T *buf, int slen)
{
- int len = (int)STRLEN(buf->bh_curr->b_str);
+ int len;
+ if (buf->bh_curr == NULL || buf->bh_curr->b_str == NULL)
+ return; // nothing to delete
+ len = (int)STRLEN(buf->bh_curr->b_str);
if (len >= slen)
{
buf->bh_curr->b_str[len - slen] = NUL;
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index bbc7c1911..89d9d7cad 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -739,6 +739,15 @@ func Test_record_in_insert_mode()
bwipe!
endfunc
+func Test_record_in_select_mode()
+ new
+ call setline(1, 'text')
+ sil norm q00
+ sil norm q
+ call assert_equal('0ext', getline(1))
+ bwipe!
+endfunc
+
" Make sure that y_append is correctly reset
" and the previous register is working as expected
func Test_register_y_append_reset()
diff --git a/src/version.c b/src/version.c
index 2f872e981..bc956cee0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4233,
+/**/
4232,
/**/
4231,