summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-03-13 21:36:40 +0100
committerBram Moolenaar <Bram@vim.org>2020-03-13 21:36:40 +0100
commit346f18e5fe12e6aaba5a6a18f6d0deb55eb7a9e8 (patch)
tree95ecb1be20705e9abbcd4d75f97169c4cbca8e46
parentd47e6f0b4cc82e3ccdc4605bb1811861a5b2d115 (diff)
downloadvim-git-346f18e5fe12e6aaba5a6a18f6d0deb55eb7a9e8.tar.gz
patch 8.2.0378: prop_find() does not find all propsv8.2.0378
Problem: prop_find() does not find all props. Solution: Check being in the start line. (Axel Forsman, closes #5776)
-rw-r--r--src/testdir/test_textprop.vim11
-rw-r--r--src/textprop.c15
-rw-r--r--src/version.c2
3 files changed, 21 insertions, 7 deletions
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 6d3aaa3be..692b0c4bd 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -213,6 +213,17 @@ func Test_prop_find()
call prop_type_delete('prop_name')
endfunc
+func Test_prop_find_smaller_len_than_match_col()
+ new
+ call prop_type_add('test', {'highlight': 'ErrorMsg'})
+ call setline(1, ['xxxx', 'x'])
+ call prop_add(1, 4, {'type': 'test'})
+ call assert_equal({'id': 0, 'lnum': 1, 'col': 4, 'type': 'test', 'length': 0, 'start': 1, 'end': 1},
+ \ prop_find({'type': 'test', 'lnum': 2, 'col': 1}, 'b'))
+ bwipe!
+ call prop_type_delete('test')
+endfunc
+
func Test_prop_add()
new
call AddPropTypes()
diff --git a/src/textprop.c b/src/textprop.c
index 4f5329ebb..6e3ed5f7b 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -663,13 +663,14 @@ f_prop_find(typval_T *argvars, typval_T *rettv)
mch_memmove(&prop, text + textlen + i * sizeof(textprop_T),
sizeof(textprop_T));
- if (dir < 0)
- {
- if (col < prop.tp_col)
- break;
- }
- else if (prop.tp_col + prop.tp_len - (prop.tp_len != 0) < col)
- continue;
+ if (lnum == lnum_start)
+ if (dir < 0)
+ {
+ if (col < prop.tp_col)
+ break;
+ }
+ else if (prop.tp_col + prop.tp_len - (prop.tp_len != 0) < col)
+ continue;
if (prop.tp_id == id || prop.tp_type == type_id)
{
diff --git a/src/version.c b/src/version.c
index 140814203..303f7eca5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 378,
+/**/
377,
/**/
376,