Mercurial > vim
changeset 30815:90a257beac7a v9.0.0742
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 <Bram@vim.org>
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 13 Oct 2022 17:15:05 +0200 |
parents | b3d8ec41adf1 |
children | 33f1af1a6fb4 |
files | src/testdir/test_vim9_func.vim src/testdir/test_vim9_script.vim src/version.c src/vim9cmds.c src/vim9compile.c |
diffstat | 5 files changed, 109 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
index 38766e3301568cc42a62de65fa6676e18e3d25b5..bb5635626484e3f2d732718f0c9fa0d704a9daf2 GIT binary patch literal 101796 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
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2136,15 +2136,66 @@ enddef def Test_skipped_redir() var lines =<< trim END - def T() + def Tredir() if 0 - redir =>l[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()
--- 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,
--- 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;
--- 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 "$"