mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.1.0301: Vim9: heredoc start may be recognized in string
Problem: Vim9: heredoc start may be recognized in string. Solution: Don't skip to closing bracket for invalid list assignment. (zeertzjq) closes: #14472 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
aa8e22b035
commit
1817ccdb10
@@ -408,11 +408,17 @@ func Test_let_heredoc_fails()
|
||||
call assert_report('Caught exception: ' .. v:exception)
|
||||
endtry
|
||||
|
||||
try
|
||||
let [] =<< trim TEXT
|
||||
TEXT
|
||||
call assert_report('No exception thrown')
|
||||
catch /E475:/
|
||||
catch
|
||||
call assert_report('Caught exception: ' .. v:exception)
|
||||
endtry
|
||||
|
||||
try
|
||||
let [a b c] =<< trim TEXT
|
||||
change
|
||||
insert
|
||||
append
|
||||
TEXT
|
||||
call assert_report('No exception thrown')
|
||||
catch /E475:/
|
||||
@@ -422,9 +428,6 @@ func Test_let_heredoc_fails()
|
||||
|
||||
try
|
||||
let [a; b; c] =<< trim TEXT
|
||||
change
|
||||
insert
|
||||
append
|
||||
TEXT
|
||||
call assert_report('No exception thrown')
|
||||
catch /E452:/
|
||||
|
@@ -2029,6 +2029,20 @@ def Test_heredoc()
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
|
||||
# heredoc start should not be recognized in string
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
def Func()
|
||||
new
|
||||
@" = 'bar'
|
||||
['foo', @"]->setline("]=<<"->count('='))
|
||||
assert_equal(['foo', 'bar'], getline(1, '$'))
|
||||
bwipe!
|
||||
enddef
|
||||
Func()
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
|
||||
v9.CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:')
|
||||
v9.CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:')
|
||||
|
||||
|
@@ -1230,18 +1230,15 @@ get_function_body(
|
||||
int save_sc_version = current_sctx.sc_version;
|
||||
int var_count = 0;
|
||||
int semicolon = 0;
|
||||
char_u *argend;
|
||||
|
||||
current_sctx.sc_version
|
||||
= vim9_function ? SCRIPT_VERSION_VIM9 : 1;
|
||||
argend = skip_var_list(arg, TRUE, &var_count, &semicolon,
|
||||
arg = skip_var_list(arg, TRUE, &var_count, &semicolon,
|
||||
TRUE);
|
||||
if (argend == NULL)
|
||||
// Invalid list assignment: skip to closing bracket.
|
||||
argend = find_name_end(arg, NULL, NULL, FNE_INCL_BR);
|
||||
arg = skipwhite(argend);
|
||||
if (arg != NULL)
|
||||
arg = skipwhite(arg);
|
||||
current_sctx.sc_version = save_sc_version;
|
||||
if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<')
|
||||
if (arg != NULL && STRNCMP(arg, "=<<", 3) == 0)
|
||||
{
|
||||
p = skipwhite(arg + 3);
|
||||
while (TRUE)
|
||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
301,
|
||||
/**/
|
||||
300,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user