mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.2299: Vim9: invalid memory access making error message flaky
Problem: Vim9: invalid memory access making error message flaky. Solution: Do not check cmd_argt for CMD_USER. (issue #7467)
This commit is contained in:
parent
cef1270dec
commit
d1510ee946
@ -16,6 +16,8 @@ EXTERN char e_undefined_variable_str[]
|
|||||||
EXTERN char e_undefined_variable_char_str[]
|
EXTERN char e_undefined_variable_char_str[]
|
||||||
INIT(= N_("E121: Undefined variable: %c:%s"));
|
INIT(= N_("E121: Undefined variable: %c:%s"));
|
||||||
#endif
|
#endif
|
||||||
|
EXTERN char e_ambiguous_use_of_user_defined_command[]
|
||||||
|
INIT(= N_("E464: Ambiguous use of user-defined command"));
|
||||||
EXTERN char e_invalid_command[]
|
EXTERN char e_invalid_command[]
|
||||||
INIT(= N_("E476: Invalid command"));
|
INIT(= N_("E476: Invalid command"));
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
|
@ -2025,7 +2025,7 @@ do_one_cmd(
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
if (!ea.skip)
|
if (!ea.skip)
|
||||||
errormsg = _("E464: Ambiguous use of user-defined command");
|
errormsg = _(e_ambiguous_use_of_user_defined_command);
|
||||||
goto doend;
|
goto doend;
|
||||||
}
|
}
|
||||||
// Check for wrong commands.
|
// Check for wrong commands.
|
||||||
@ -3531,9 +3531,11 @@ find_ex_command(
|
|||||||
eap->cmdidx = CMD_finally;
|
eap->cmdidx = CMD_finally;
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (eap->cmdidx != CMD_SIZE && in_vim9script()
|
if (eap->cmdidx < CMD_SIZE
|
||||||
|
&& in_vim9script()
|
||||||
&& !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!'
|
&& !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!'
|
||||||
&& (cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0)
|
&& (eap->cmdidx < 0 ||
|
||||||
|
(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
|
||||||
{
|
{
|
||||||
semsg(_(e_command_not_followed_by_white_space_str), eap->cmd);
|
semsg(_(e_command_not_followed_by_white_space_str), eap->cmd);
|
||||||
eap->cmdidx = CMD_SIZE;
|
eap->cmdidx = CMD_SIZE;
|
||||||
|
@ -771,6 +771,24 @@ def Test_f_args()
|
|||||||
CheckScriptSuccess(lines)
|
CheckScriptSuccess(lines)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def Test_user_command_comment()
|
||||||
|
command -nargs=1 Comd echom <q-args>
|
||||||
|
|
||||||
|
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()
|
def Test_star_command()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
@ -798,12 +816,14 @@ def Test_cmd_argument_without_colon()
|
|||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_ambiguous_user_cmd()
|
def Test_ambiguous_user_cmd()
|
||||||
|
command Cmd1 eval 0
|
||||||
|
command Cmd2 eval 0
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
com Cmd1 eval 0
|
|
||||||
com Cmd2 eval 0
|
|
||||||
Cmd
|
Cmd
|
||||||
END
|
END
|
||||||
CheckScriptFailure(lines, 'E464:')
|
CheckDefAndScriptFailure(lines, 'E464:', 1)
|
||||||
|
delcommand Cmd1
|
||||||
|
delcommand Cmd2
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_command_not_recognized()
|
def Test_command_not_recognized()
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2299,
|
||||||
/**/
|
/**/
|
||||||
2298,
|
2298,
|
||||||
/**/
|
/**/
|
||||||
|
@ -7797,6 +7797,13 @@ compile_def_function(ufunc_T *ufunc, int check_return_type, cctx_T *outer_cctx)
|
|||||||
: (int (*)(char_u *, size_t, void *, cctx_T *))lookup_local,
|
: (int (*)(char_u *, size_t, void *, cctx_T *))lookup_local,
|
||||||
&cctx);
|
&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 (p == ea.cmd && ea.cmdidx != CMD_SIZE)
|
||||||
{
|
{
|
||||||
if (cctx.ctx_skip == SKIP_YES)
|
if (cctx.ctx_skip == SKIP_YES)
|
||||||
|
@ -3054,6 +3054,7 @@ call_def_function(
|
|||||||
goto failed;
|
goto failed;
|
||||||
++ectx.ec_stack.ga_len;
|
++ectx.ec_stack.ga_len;
|
||||||
tv = STACK_TV_BOT(-1);
|
tv = STACK_TV_BOT(-1);
|
||||||
|
ea.addr_count = 0;
|
||||||
ea.addr_type = ADDR_LINES;
|
ea.addr_type = ADDR_LINES;
|
||||||
ea.cmd = iptr->isn_arg.string;
|
ea.cmd = iptr->isn_arg.string;
|
||||||
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
|
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user