summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-20 21:04:35 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-20 21:04:35 +0200
commit8902b31f1b31c117915defc23ac45cdc1f5c671b (patch)
treee2c7dd046e68cd28bbf8a7b5959069be7294161d
parent7795bfea6d30c85f2c05d986a0cfe4019df4d74d (diff)
downloadvim-git-8.2.1714.tar.gz
patch 8.2.1714: text properties corrupted with substitute commandv8.2.1714
Problem: Text properties corrupted with substitute command. (Filipe Brandenburger) Solution: Get the changed line again after using u_savesub(). (closes #6984)
-rw-r--r--src/testdir/test_textprop.vim13
-rw-r--r--src/textprop.c4
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 0 deletions
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 5bd7e95c3..dbf393f89 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1132,6 +1132,19 @@ func Test_proptype_substitute2()
bwipe!
endfunc
+" This was causing property corruption.
+func Test_proptype_substitute3()
+ new
+ call setline(1, ['abcxxx', 'def'])
+ call prop_type_add("test", {"highlight": "Search"})
+ call prop_add(1, 2, {"end_lnum": 2, "end_col": 2, "type": "test"})
+ %s/x\+$//
+ redraw
+
+ call prop_type_delete('test')
+ bwipe!
+endfunc
+
func SaveOptions()
let d = #{tabstop: &tabstop,
\ softtabstop: &softtabstop,
diff --git a/src/textprop.c b/src/textprop.c
index 639c5df8a..bca0d9e02 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1349,6 +1349,10 @@ adjust_prop_columns(
&& u_savesub(lnum) == FAIL)
return FALSE;
dirty = TRUE;
+
+ // u_savesub() may have updated curbuf->b_ml, fetch it again
+ if (curbuf->b_ml.ml_line_lnum != lnum)
+ proplen = get_text_props(curbuf, lnum, &props, TRUE);
}
if (res.can_drop)
continue; // Drop this text property
diff --git a/src/version.c b/src/version.c
index a7def1b6c..7031d7a56 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 */
/**/
+ 1714,
+/**/
1713,
/**/
1712,