From a4bc2dd7cccf5a4a9f78b58b6f35a45d17164323 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 27 Jan 2022 19:27:16 +0000 Subject: [PATCH] patch 8.2.4233: crash when recording and using Select mode Problem: Crash when recording and using Select mode. Solution: When deleting the last recorded character check there is something to delete. --- src/getchar.c | 5 ++++- src/testdir/test_registers.vim | 9 +++++++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/getchar.c b/src/getchar.c index c0dfc2b0b8997..49eb3d7df9e86 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 bbc7c1911d2bd..89d9d7cad7c46 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 2f872e98110e4..bc956cee0a66a 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4233, /**/ 4232, /**/