From 5e18ccc60bdddc4aa39ab039f1a7c918f29e67ce Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 5 Dec 2021 13:02:50 +0000 Subject: 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 #9280) --- src/errors.h | 2 ++ src/sign.c | 26 ++++++++++++++++++++++++++ src/testdir/test_signs.vim | 4 ++++ src/version.c | 2 ++ 4 files changed, 34 insertions(+) diff --git a/src/errors.h b/src/errors.h index 96aef67fcb..e035f076d8 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 a4c89679b4..66a29db1d7 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 80f7160b10..18a6edc772 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 531642ec00..cd7a964022 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3743, /**/ 3742, /**/ -- cgit v1.2.3