diff options
author | ZyX <kp-pav@yandex.ru> | 2017-07-18 00:20:21 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-07-18 00:20:21 +0300 |
commit | 8a581b918b339b84b5abd80919416a84932eb13f (patch) | |
tree | ef7601643e29b5c42038de9cf2ab1cc8ec00c6cf | |
parent | cfb1d937a64fcec836fdf26d6ea67024aeafabeb (diff) | |
download | rneovim-8a581b918b339b84b5abd80919416a84932eb13f.tar.gz rneovim-8a581b918b339b84b5abd80919416a84932eb13f.tar.bz2 rneovim-8a581b918b339b84b5abd80919416a84932eb13f.zip |
ex_getln: Check prev_prompt_errors before running redrawcmdline
Otherwise there will be infinite recursion and shortly a crash. Running
redrawcmdline recursively occurs under color_cmdline_error label.
-rw-r--r-- | src/nvim/ex_getln.c | 12 | ||||
-rw-r--r-- | test/functional/ui/cmdline_highlight_spec.lua | 16 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 13bae4dadc..4be0dd0e0d 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -2364,6 +2364,12 @@ static bool color_cmdline(void) bool dgc_ret = true; bool tl_ret = true; + if (ccline.prompt_id != prev_prompt_id) { + prev_prompt_errors = 0; + prev_prompt_id = ccline.prompt_id; + } else if (prev_prompt_errors >= MAX_CB_ERRORS) { + goto color_cmdline_end; + } if (ccline.highlight_callback.type != kCallbackNone) { // Currently this should only happen while processing input() prompts. assert(ccline.input_fn); @@ -2392,12 +2398,6 @@ static bool color_cmdline(void) if (color_cb.type == kCallbackNone) { goto color_cmdline_end; } - if (ccline.prompt_id != prev_prompt_id) { - prev_prompt_errors = 0; - prev_prompt_id = ccline.prompt_id; - } else if (prev_prompt_errors >= MAX_CB_ERRORS) { - goto color_cmdline_end; - } if (ccline.cmdbuff[ccline.cmdlen] != NUL) { arg_allocated = true; arg.vval.v_string = xmemdupz((const char *)ccline.cmdbuff, diff --git a/test/functional/ui/cmdline_highlight_spec.lua b/test/functional/ui/cmdline_highlight_spec.lua index 6698ced596..e12961039a 100644 --- a/test/functional/ui/cmdline_highlight_spec.lua +++ b/test/functional/ui/cmdline_highlight_spec.lua @@ -527,6 +527,22 @@ describe('Ex commands coloring support', function() eq('\nError detected while processing :\nE605: Exception not caught: 42', meths.command_output('messages')) end) + it('errors out when failing to get callback', function() + meths.set_var('Nvim_color_cmdline', 42) + feed(':#') + screen:expect([[ + {EOB:~ }| + {EOB:~ }| + {EOB:~ }| + : | + {ERR:E5408: Unable to get Nvim_color_cmdline }| + {ERR:callback from g:: Vim:E6000: Argument is}| + {ERR: not a function or function name} | + :#^ | + ]]) + end) +end) +describe('Expressions coloring support', function() end) -- TODO Specifically test for coloring in cmdline and expr modes |