diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-31 19:47:10 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-31 19:47:10 +0800 |
commit | fa747d004a1e91b30066020f2f592e4dc5d94084 (patch) | |
tree | cde286673b3b87cb0154813e08736f2e0c2888d0 | |
parent | 0903702634d8e5714749ea599a2f1042b3377525 (diff) | |
download | rneovim-fa747d004a1e91b30066020f2f592e4dc5d94084.tar.gz rneovim-fa747d004a1e91b30066020f2f592e4dc5d94084.tar.bz2 rneovim-fa747d004a1e91b30066020f2f592e4dc5d94084.zip |
fix(api): nvim_set_hl bail out on invalid group name (#20021)
-rw-r--r-- | src/nvim/api/vim.c | 10 | ||||
-rw-r--r-- | test/functional/api/highlight_spec.lua | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index b164106cef..a1721d433f 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -86,8 +86,7 @@ Dictionary nvim_get_hl_by_name(String name, Boolean rgb, Error *err) int id = syn_name2id(name.data); if (id == 0) { - api_set_error(err, kErrorTypeException, "Invalid highlight name: %s", - name.data); + api_set_error(err, kErrorTypeException, "Invalid highlight name: %s", name.data); return result; } result = nvim_get_hl_by_id(id, rgb, err); @@ -105,8 +104,7 @@ Dictionary nvim_get_hl_by_id(Integer hl_id, Boolean rgb, Error *err) { Dictionary dic = ARRAY_DICT_INIT; if (syn_get_final_id((int)hl_id) == 0) { - api_set_error(err, kErrorTypeException, - "Invalid highlight id: %" PRId64, hl_id); + api_set_error(err, kErrorTypeException, "Invalid highlight id: %" PRId64, hl_id); return dic; } int attrcode = syn_id2attr((int)hl_id); @@ -175,6 +173,10 @@ void nvim_set_hl(Integer ns_id, String name, Dict(highlight) *val, Error *err) FUNC_API_SINCE(7) { int hl_id = syn_check_group(name.data, name.size); + if (hl_id == 0) { + api_set_error(err, kErrorTypeException, "Invalid highlight name: %s", name.data); + return; + } int link_id = -1; HlAttrs attrs = dict2hlattrs(val, true, &link_id, err); diff --git a/test/functional/api/highlight_spec.lua b/test/functional/api/highlight_spec.lua index 2730f7e23d..3b36563d21 100644 --- a/test/functional/api/highlight_spec.lua +++ b/test/functional/api/highlight_spec.lua @@ -354,4 +354,9 @@ describe("API: set highlight", function() meths.set_hl(0, 'Normal', {fg='#000083', bg='#0000F3'}) eq({foreground = 131, background = 243}, nvim("get_hl_by_name", 'Normal', true)) end) + + it('does not segfault on invalid group name #20009', function() + eq('Invalid highlight name: foo bar', pcall_err(meths.set_hl, 0, 'foo bar', {bold = true})) + assert_alive() + end) end) |