aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2020-11-22 22:48:04 -0500
committerJames McCoy <jamessan@jamessan.com>2020-11-22 22:48:04 -0500
commite26d074fedbb691bf4604663a5ea93742d824c05 (patch)
treebc3a86ee069cbb07b26a681e00f863d763cc1148
parent503e758a2ff5dbf9e783cd2769b8a973ef5a7610 (diff)
downloadrneovim-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.c32
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"