65 lines
1.8 KiB
Diff
65 lines
1.8 KiB
Diff
From 2de9b7c7c8791da8853a9a7ca9c467867465b655 Mon Sep 17 00:00:00 2001
|
|
From: Bram Moolenaar <Bram@vim.org>
|
|
Date: Fri, 19 Nov 2021 19:41:13 +0000
|
|
Subject: [PATCH] patch 8.2.3625: illegal memory access when C-indenting
|
|
|
|
Problem: Illegal memory access when C-indenting.
|
|
Solution: Also set the cursor column.
|
|
---
|
|
src/cindent.c | 10 +++++-----
|
|
src/testdir/test_cindent.vim | 12 ++++++++++++
|
|
2 files changed, 17 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/cindent.c b/src/cindent.c
|
|
index c7caed6..28d1558 100644
|
|
--- a/src/cindent.c
|
|
+++ b/src/cindent.c
|
|
@@ -1635,10 +1635,10 @@ get_baseclass_amount(int col)
|
|
static pos_T *
|
|
find_start_brace(void) // XXX
|
|
{
|
|
- pos_T cursor_save;
|
|
- pos_T *trypos;
|
|
- pos_T *pos;
|
|
- static pos_T pos_copy;
|
|
+ pos_T cursor_save;
|
|
+ pos_T *trypos;
|
|
+ pos_T *pos;
|
|
+ static pos_T pos_copy;
|
|
|
|
cursor_save = curwin->w_cursor;
|
|
while ((trypos = findmatchlimit(NULL, '{', FM_BLOCKSTOP, 0)) != NULL)
|
|
@@ -1652,7 +1652,7 @@ find_start_brace(void) // XXX
|
|
&& (pos = ind_find_start_CORS(NULL)) == NULL) // XXX
|
|
break;
|
|
if (pos != NULL)
|
|
- curwin->w_cursor.lnum = pos->lnum;
|
|
+ curwin->w_cursor = *pos;
|
|
}
|
|
curwin->w_cursor = cursor_save;
|
|
return trypos;
|
|
diff --git a/src/testdir/test_cindent.vim b/src/testdir/test_cindent.vim
|
|
index 2cb3f24..2a87460 100644
|
|
--- a/src/testdir/test_cindent.vim
|
|
+++ b/src/testdir/test_cindent.vim
|
|
@@ -5251,4 +5251,16 @@ func Test_cindent_56()
|
|
enew! | close
|
|
endfunc
|
|
|
|
+func Test_find_brace_backwards()
|
|
+ " this was looking beyond the end of the line
|
|
+ new
|
|
+ norm R/*
|
|
+ norm o0{
|
|
+ norm o//
|
|
+ norm V{=
|
|
+ call assert_equal(['/*', ' 0{', '//'], getline(1, 3))
|
|
+ bwipe!
|
|
+endfunc
|
|
+
|
|
+
|
|
" vim: shiftwidth=2 sts=2 expandtab
|
|
--
|
|
1.8.3.1
|
|
|