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.
diff --git a/src/getchar.c b/src/getchar.c
index c0dfc2b..49eb3d7 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -252,8 +252,11 @@
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 bbc7c19..89d9d7c 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -739,6 +739,15 @@
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 2f872e9..bc956ce 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4233,
+/**/
4232,
/**/
4231,