changeset 26424:f6ca4276c4cc v8.2.3743

patch 8.2.3743: ":sign" can add a highlight group without a name Commit: https://github.com/vim/vim/commit/5e18ccc60bdddc4aa39ab039f1a7c918f29e67ce Author: Bram Moolenaar <Bram@vim.org> Date: Sun Dec 5 13:02:50 2021 +0000 patch 8.2.3743: ":sign" can add a highlight group without a name Problem: ":sign" can add a highlight group without a name. Solution: Give an error if the group name is missing. (closes https://github.com/vim/vim/issues/9280)
author Bram Moolenaar <Bram@vim.org>
date Sun, 05 Dec 2021 14:15:03 +0100
parents 2f222239640f
children 976b5fc1ff82
files src/errors.h src/sign.c src/testdir/test_signs.vim src/version.c
diffstat 4 files changed, 34 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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"));
--- a/src/sign.c
+++ b/src/sign.c
@@ -1295,6 +1295,17 @@ sign_jump(int sign_id, char_u *sign_grou
     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_
 	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
--- 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
--- 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,