summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-05 13:02:50 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-05 13:02:50 +0000
commit5e18ccc60bdddc4aa39ab039f1a7c918f29e67ce (patch)
tree6c28c6d5d92597d7ec9b7ed42183cdedcd365a1f
parentf589fd3e1047cdf90566b68aaf9a13389e54d26a (diff)
downloadvim-git-5e18ccc60bdddc4aa39ab039f1a7c918f29e67ce.tar.gz
patch 8.2.3743: ":sign" can add a highlight group without a namev8.2.3743
Problem: ":sign" can add a highlight group without a name. Solution: Give an error if the group name is missing. (closes #9280)
-rw-r--r--src/errors.h2
-rw-r--r--src/sign.c26
-rw-r--r--src/testdir/test_signs.vim4
-rw-r--r--src/version.c2
4 files changed, 34 insertions, 0 deletions
diff --git a/src/errors.h b/src/errors.h
index 96aef67fc..e035f076d 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -694,3 +694,5 @@ EXTERN char e_line_number_out_of_range[]
INIT(= N_("E1247: Line number out of range"));
EXTERN char e_closure_called_from_invalid_context[]
INIT(= N_("E1248: Closure called from invalid context"));
+EXTERN char e_group_name_missing_for_str[]
+ INIT(= N_("E1249: Group name missing for %s"));
diff --git a/src/sign.c b/src/sign.c
index a4c89679b..66a29db1d 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -1295,6 +1295,17 @@ sign_jump(int sign_id, char_u *sign_group, buf_T *buf)
return lnum;
}
+ static int
+check_empty_group(size_t len, char *name)
+{
+ if (len == 0)
+ {
+ semsg(_(e_group_name_missing_for_str), name);
+ return FAIL;
+ }
+ return OK;
+}
+
/*
* ":sign define {name} ..." command
*/
@@ -1330,16 +1341,31 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
else if (STRNCMP(arg, "linehl=", 7) == 0)
{
arg += 7;
+ if (check_empty_group(p - arg, "linehl") == FAIL)
+ {
+ failed = TRUE;
+ break;
+ }
linehl = vim_strnsave(arg, p - arg);
}
else if (STRNCMP(arg, "texthl=", 7) == 0)
{
arg += 7;
+ if (check_empty_group(p - arg, "texthl") == FAIL)
+ {
+ failed = TRUE;
+ break;
+ }
texthl = vim_strnsave(arg, p - arg);
}
else if (STRNCMP(arg, "culhl=", 6) == 0)
{
arg += 6;
+ if (check_empty_group(p - arg, "culhl") == FAIL)
+ {
+ failed = TRUE;
+ break;
+ }
culhl = vim_strnsave(arg, p - arg);
}
else
diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim
index 80f7160b1..18a6edc77 100644
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -126,6 +126,10 @@ func Test_sign()
call assert_fails("sign define Sign4 text= linehl=Comment", 'E239:')
call assert_fails("sign define Sign4 text=\\ ab linehl=Comment", 'E239:')
+ call assert_fails("sign define Sign4 linehl=", 'E1249: Group name missing for linehl')
+ call assert_fails("sign define Sign4 culhl=", 'E1249: Group name missing for culhl')
+ call assert_fails("sign define Sign4 texthl=", 'E1249: Group name missing for texthl')
+
" define sign with whitespace
sign define Sign4 text=\ X linehl=Comment
sign undefine Sign4
diff --git a/src/version.c b/src/version.c
index 531642ec0..cd7a96402 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3743,
+/**/
3742,
/**/
3741,