To: vim_dev@googlegroups.com Subject: Patch 8.2.2299 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2299 Problem: Vim9: invalid memory access making error message flaky. Solution: Do not check cmd_argt for CMD_USER. (issue #7467) Files: src/ex_docmd.c, src/vim9execute.c, src/errors.h, src/vim9compile.c, src/testdir/test_vim9_cmd.vim *** ../vim-8.2.2298/src/ex_docmd.c 2021-01-04 12:41:49.503891371 +0100 --- src/ex_docmd.c 2021-01-04 15:41:22.305416266 +0100 *************** *** 2025,2031 **** if (p == NULL) { if (!ea.skip) ! errormsg = _("E464: Ambiguous use of user-defined command"); goto doend; } // Check for wrong commands. --- 2025,2031 ---- if (p == NULL) { if (!ea.skip) ! errormsg = _(e_ambiguous_use_of_user_defined_command); goto doend; } // Check for wrong commands. *************** *** 3531,3539 **** eap->cmdidx = CMD_finally; #ifdef FEAT_EVAL ! if (eap->cmdidx != CMD_SIZE && in_vim9script() && !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!' ! && (cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0) { semsg(_(e_command_not_followed_by_white_space_str), eap->cmd); eap->cmdidx = CMD_SIZE; --- 3531,3541 ---- eap->cmdidx = CMD_finally; #ifdef FEAT_EVAL ! if (eap->cmdidx < CMD_SIZE ! && in_vim9script() && !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!' ! && (eap->cmdidx < 0 || ! (cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0)) { semsg(_(e_command_not_followed_by_white_space_str), eap->cmd); eap->cmdidx = CMD_SIZE; *** ../vim-8.2.2298/src/vim9execute.c 2021-01-04 10:47:21.698153964 +0100 --- src/vim9execute.c 2021-01-04 15:34:38.271057083 +0100 *************** *** 3054,3059 **** --- 3054,3060 ---- goto failed; ++ectx.ec_stack.ga_len; tv = STACK_TV_BOT(-1); + ea.addr_count = 0; ea.addr_type = ADDR_LINES; ea.cmd = iptr->isn_arg.string; if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL) *** ../vim-8.2.2298/src/errors.h 2021-01-01 19:17:52.293976798 +0100 --- src/errors.h 2021-01-04 15:41:31.253381270 +0100 *************** *** 16,21 **** --- 16,23 ---- EXTERN char e_undefined_variable_char_str[] INIT(= N_("E121: Undefined variable: %c:%s")); #endif + EXTERN char e_ambiguous_use_of_user_defined_command[] + INIT(= N_("E464: Ambiguous use of user-defined command")); EXTERN char e_invalid_command[] INIT(= N_("E476: Invalid command")); #ifdef FEAT_EVAL *** ../vim-8.2.2298/src/vim9compile.c 2021-01-04 12:41:49.507891351 +0100 --- src/vim9compile.c 2021-01-04 15:42:44.809095238 +0100 *************** *** 7797,7802 **** --- 7797,7809 ---- : (int (*)(char_u *, size_t, void *, cctx_T *))lookup_local, &cctx); + if (p == NULL) + { + if (cctx.ctx_skip != SKIP_YES) + emsg(_(e_ambiguous_use_of_user_defined_command)); + goto erret; + } + if (p == ea.cmd && ea.cmdidx != CMD_SIZE) { if (cctx.ctx_skip == SKIP_YES) *** ../vim-8.2.2298/src/testdir/test_vim9_cmd.vim 2021-01-02 19:44:50.702794031 +0100 --- src/testdir/test_vim9_cmd.vim 2021-01-04 16:11:54.726874382 +0100 *************** *** 771,776 **** --- 771,794 ---- CheckScriptSuccess(lines) enddef + def Test_user_command_comment() + command -nargs=1 Comd echom + + var lines =<< trim END + vim9script + Comd # comment + END + CheckScriptSuccess(lines) + + lines =<< trim END + vim9script + Comd# comment + END + CheckScriptFailure(lines, 'E1144:') + + delcommand Comd + enddef + def Test_star_command() var lines =<< trim END vim9script *************** *** 798,809 **** enddef def Test_ambiguous_user_cmd() var lines =<< trim END - com Cmd1 eval 0 - com Cmd2 eval 0 Cmd END ! CheckScriptFailure(lines, 'E464:') enddef def Test_command_not_recognized() --- 816,829 ---- enddef def Test_ambiguous_user_cmd() + command Cmd1 eval 0 + command Cmd2 eval 0 var lines =<< trim END Cmd END ! CheckDefAndScriptFailure(lines, 'E464:', 1) ! delcommand Cmd1 ! delcommand Cmd2 enddef def Test_command_not_recognized() *** ../vim-8.2.2298/src/version.c 2021-01-04 14:09:40.053795023 +0100 --- src/version.c 2021-01-04 15:27:30.544758787 +0100 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2299, /**/ -- I AM THANKFUL... ...for the taxes that I pay because it means that I am employed. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///