# HG changeset patch # User Bram Moolenaar # Date 1665674105 -7200 # Node ID 90a257beac7a94e4e6a87f9e6a8d102bc99d321d # Parent b3d8ec41adf1366f3201fd4e73bd325234520b34 patch 9.0.0742: reading past end of the line when compiling a function Commit: https://github.com/vim/vim/commit/3558afe9e9e904cabb8475392d859f2d2fc21041 Author: Bram Moolenaar Date: Thu Oct 13 16:12:57 2022 +0100 patch 9.0.0742: reading past end of the line when compiling a function Problem: Reading past end of the line when compiling a function with errors. Solution: Do not return an invalid pointer. Fix skipping redirection. diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 38766e3301568cc42a62de65fa6676e18e3d25b5..bb5635626484e3f2d732718f0c9fa0d704a9daf2 GIT binary patch literal 101796 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[0] + redir => l[0] + redir END + endif + enddef + defcompile + END + v9.CheckScriptSuccess(lines) + delfunc g:Tredir + + lines =<< trim END + def Tredir() + if 0 + redir => l[0] + endif + echo 'executed' + if 0 redir END endif enddef defcompile END v9.CheckScriptSuccess(lines) + delfunc g:Tredir + + lines =<< trim END + def Tredir() + var l = [''] + if 1 + redir => l[0] + endif + echo 'executed' + if 0 + redir END + else + redir END + endif + enddef + defcompile + END + v9.CheckScriptSuccess(lines) + delfunc g:Tredir + + lines =<< trim END + let doit = 1 + def Tredir() + var l = [''] + if g:doit + redir => l[0] + endif + echo 'executed' + if g:doit + redir END + endif + enddef + defcompile + END + v9.CheckScriptSuccess(lines) + delfunc g:Tredir enddef def Test_for_loop() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 742, +/**/ 741, /**/ 740, diff --git a/src/vim9cmds.c b/src/vim9cmds.c --- a/src/vim9cmds.c +++ b/src/vim9cmds.c @@ -2412,34 +2412,37 @@ compile_redir(char_u *line, exarg_T *eap { if (STRNCMP(arg, "END", 3) == 0) { - if (lhs->lhs_append) + if (cctx->ctx_skip != SKIP_YES) { - // First load the current variable value. - if (compile_load_lhs_with_index(lhs, lhs->lhs_whole, + if (lhs->lhs_append) + { + // First load the current variable value. + if (compile_load_lhs_with_index(lhs, lhs->lhs_whole, cctx) == FAIL) - return NULL; - } + return NULL; + } - // Gets the redirected text and put it on the stack, then store it - // in the variable. - generate_instr_type(cctx, ISN_REDIREND, &t_string); + // Gets the redirected text and put it on the stack, then store + // it in the variable. + generate_instr_type(cctx, ISN_REDIREND, &t_string); - if (lhs->lhs_append) - generate_CONCAT(cctx, 2); + if (lhs->lhs_append) + generate_CONCAT(cctx, 2); - if (lhs->lhs_has_index) - { - // Use the info in "lhs" to store the value at the index in the - // list or dict. - if (compile_assign_unlet(lhs->lhs_whole, lhs, TRUE, + if (lhs->lhs_has_index) + { + // Use the info in "lhs" to store the value at the index in + // the list or dict. + if (compile_assign_unlet(lhs->lhs_whole, lhs, TRUE, &t_string, cctx) == FAIL) + return NULL; + } + else if (generate_store_lhs(cctx, lhs, -1, FALSE) == FAIL) return NULL; + + VIM_CLEAR(lhs->lhs_name); + VIM_CLEAR(lhs->lhs_whole); } - else if (generate_store_lhs(cctx, lhs, -1, FALSE) == FAIL) - return NULL; - - VIM_CLEAR(lhs->lhs_name); - VIM_CLEAR(lhs->lhs_whole); return arg + 3; } emsg(_(e_cannot_nest_redir)); @@ -2465,13 +2468,20 @@ compile_redir(char_u *line, exarg_T *eap if (need_type(&t_string, lhs->lhs_member_type, -1, 0, cctx, FALSE, FALSE) == FAIL) return NULL; - generate_instr(cctx, ISN_REDIRSTART); - lhs->lhs_append = append; - if (lhs->lhs_has_index) + if (cctx->ctx_skip == SKIP_YES) + { + VIM_CLEAR(lhs->lhs_name); + } + else { - lhs->lhs_whole = vim_strnsave(arg, lhs->lhs_varlen_total); - if (lhs->lhs_whole == NULL) - return NULL; + generate_instr(cctx, ISN_REDIRSTART); + lhs->lhs_append = append; + if (lhs->lhs_has_index) + { + lhs->lhs_whole = vim_strnsave(arg, lhs->lhs_varlen_total); + if (lhs->lhs_whole == NULL) + return NULL; + } } return arg + lhs->lhs_varlen_total; diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1284,6 +1284,19 @@ vim9_declare_error(char_u *name) } /* + * Return TRUE if "name" is a valid register to use. + * Return FALSE and give an error message if not. + */ + static int +valid_dest_reg(int name) +{ + if ((name == '@' || valid_yank_reg(name, FALSE)) && name != '.') + return TRUE; + emsg_invreg(name); + return FAIL; +} + +/* * For one assignment figure out the type of destination. Return it in "dest". * When not recognized "dest" is not set. * For an option "option_scope" is set. @@ -1364,12 +1377,8 @@ get_var_dest( } else if (*name == '@') { - if (name[1] != '@' - && (!valid_yank_reg(name[1], FALSE) || name[1] == '.')) - { - emsg_invreg(name[1]); + if (!valid_dest_reg(name[1])) return FAIL; - } *dest = dest_reg; *type = name[1] == '#' ? &t_number_or_string : &t_string; } @@ -1445,7 +1454,11 @@ compile_lhs( // "var_end" is the end of the variable/option/etc. name. lhs->lhs_dest_end = skip_var_one(var_start, FALSE); if (*var_start == '@') + { + if (!valid_dest_reg(var_start[1])) + return FAIL; var_end = var_start + 2; + } else { // skip over the leading "&", "&l:", "&g:" and "$"