diff options
author | James McCoy <jamessan@jamessan.com> | 2020-11-22 22:48:04 -0500 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2020-11-22 22:48:04 -0500 |
commit | e26d074fedbb691bf4604663a5ea93742d824c05 (patch) | |
tree | bc3a86ee069cbb07b26a681e00f863d763cc1148 | |
parent | 503e758a2ff5dbf9e783cd2769b8a973ef5a7610 (diff) | |
download | rneovim-e26d074fedbb691bf4604663a5ea93742d824c05.tar.gz rneovim-e26d074fedbb691bf4604663a5ea93742d824c05.tar.bz2 rneovim-e26d074fedbb691bf4604663a5ea93742d824c05.zip |
Add eap->skip checks to script_host_{execute_file,do_range}
As a safety measure, return immediately from these functions if
eap->skip is set. This is set when VimL is being parsed, to skip past
dead code, and should not be executed.
-rw-r--r-- | src/nvim/ex_cmds2.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 42454b7c9a..04624be9a2 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -4232,25 +4232,29 @@ static void script_host_execute(char *name, exarg_T *eap) static void script_host_execute_file(char *name, exarg_T *eap) { - uint8_t buffer[MAXPATHL]; - vim_FullName((char *)eap->arg, (char *)buffer, sizeof(buffer), false); + if (!eap->skip) { + uint8_t buffer[MAXPATHL]; + vim_FullName((char *)eap->arg, (char *)buffer, sizeof(buffer), false); - list_T *args = tv_list_alloc(3); - // filename - tv_list_append_string(args, (const char *)buffer, -1); - // current range - tv_list_append_number(args, (int)eap->line1); - tv_list_append_number(args, (int)eap->line2); - (void)eval_call_provider(name, "execute_file", args, true); + list_T *args = tv_list_alloc(3); + // filename + tv_list_append_string(args, (const char *)buffer, -1); + // current range + tv_list_append_number(args, (int)eap->line1); + tv_list_append_number(args, (int)eap->line2); + (void)eval_call_provider(name, "execute_file", args, true); + } } static void script_host_do_range(char *name, exarg_T *eap) { - list_T *args = tv_list_alloc(3); - tv_list_append_number(args, (int)eap->line1); - tv_list_append_number(args, (int)eap->line2); - tv_list_append_string(args, (const char *)eap->arg, -1); - (void)eval_call_provider(name, "do_range", args, true); + if (!eap->skip) { + list_T *args = tv_list_alloc(3); + tv_list_append_number(args, (int)eap->line1); + tv_list_append_number(args, (int)eap->line2); + tv_list_append_string(args, (const char *)eap->arg, -1); + (void)eval_call_provider(name, "do_range", args, true); + } } /// ":drop" |