summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-12-19 11:55:26 +0100
committerBram Moolenaar <Bram@vim.org>2017-12-19 11:55:26 +0100
commit338e47fdfdf0d918dae50a5cbf0cf4f7be45b4f0 (patch)
tree77167ff3898adcfed642be034f6840e68aa4d8bf
parent132f75255ecea17ff621f71236568c5d8d8e0163 (diff)
patch 8.0.1410: hang when using count() with an empty stringv8.0.1410
Problem: Hang when using count() with an empty string. Solution: Return zero for an empty string. (Dominique Pelle, closes #2465)
-rw-r--r--runtime/doc/eval.txt6
-rw-r--r--src/evalfunc.c2
-rw-r--r--src/testdir/test_functions.vim1
-rw-r--r--src/version.c2
4 files changed, 7 insertions, 4 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index c621ba1ffe..df00dc9e4d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 8.0. Last change: 2017 Dec 16
+*eval.txt* For Vim version 8.0. Last change: 2017 Dec 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3338,8 +3338,8 @@ count({comp}, {expr} [, {ic} [, {start}]]) *count()*
When {ic} is given and it's |TRUE| then case is ignored.
When {comp} is a string then the number of not overlapping
- occurrences of {expr} is returned.
-
+ occurrences of {expr} is returned. Zero is returned when
+ {expr} is an empty string.
*cscope_connection()*
cscope_connection([{num} , {dbpath} [, {prepend}]])
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 9aacd30786..7f78a9d707 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -2382,7 +2382,7 @@ f_count(typval_T *argvars, typval_T *rettv)
char_u *p = argvars[0].vval.v_string;
char_u *next;
- if (!error && expr != NULL && p != NULL)
+ if (!error && expr != NULL && *expr != NUL && p != NULL)
{
if (ic)
{
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index d9040137c6..20e4280c15 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -692,6 +692,7 @@ func Test_count()
call assert_equal(0, count("foo", "O"))
call assert_equal(2, count("foo", "O", 1))
call assert_equal(2, count("fooooo", "oo"))
+ call assert_equal(0, count("foo", ""))
endfunc
func Test_changenr()
diff --git a/src/version.c b/src/version.c
index 97f0d66ca9..cf53357a71 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1410,
+/**/
1409,
/**/
1408,