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)
|
call assert_report('Caught exception: ' .. v:exception)
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
|
try
|
||||||
|
let [] =<< trim TEXT
|
||||||
|
TEXT
|
||||||
|
call assert_report('No exception thrown')
|
||||||
|
catch /E475:/
|
||||||
|
catch
|
||||||
|
call assert_report('Caught exception: ' .. v:exception)
|
||||||
|
endtry
|
||||||
|
|
||||||
try
|
try
|
||||||
let [a b c] =<< trim TEXT
|
let [a b c] =<< trim TEXT
|
||||||
change
|
|
||||||
insert
|
|
||||||
append
|
|
||||||
TEXT
|
TEXT
|
||||||
call assert_report('No exception thrown')
|
call assert_report('No exception thrown')
|
||||||
catch /E475:/
|
catch /E475:/
|
||||||
@@ -422,9 +428,6 @@ func Test_let_heredoc_fails()
|
|||||||
|
|
||||||
try
|
try
|
||||||
let [a; b; c] =<< trim TEXT
|
let [a; b; c] =<< trim TEXT
|
||||||
change
|
|
||||||
insert
|
|
||||||
append
|
|
||||||
TEXT
|
TEXT
|
||||||
call assert_report('No exception thrown')
|
call assert_report('No exception thrown')
|
||||||
catch /E452:/
|
catch /E452:/
|
||||||
|
@@ -2029,6 +2029,20 @@ def Test_heredoc()
|
|||||||
END
|
END
|
||||||
v9.CheckScriptSuccess(lines)
|
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 X', 'END'], 'E488:')
|
||||||
v9.CheckDefFailure(['var lines =<< trim END " comment', '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 save_sc_version = current_sctx.sc_version;
|
||||||
int var_count = 0;
|
int var_count = 0;
|
||||||
int semicolon = 0;
|
int semicolon = 0;
|
||||||
char_u *argend;
|
|
||||||
|
|
||||||
current_sctx.sc_version
|
current_sctx.sc_version
|
||||||
= vim9_function ? SCRIPT_VERSION_VIM9 : 1;
|
= 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);
|
TRUE);
|
||||||
if (argend == NULL)
|
if (arg != NULL)
|
||||||
// Invalid list assignment: skip to closing bracket.
|
arg = skipwhite(arg);
|
||||||
argend = find_name_end(arg, NULL, NULL, FNE_INCL_BR);
|
|
||||||
arg = skipwhite(argend);
|
|
||||||
current_sctx.sc_version = save_sc_version;
|
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);
|
p = skipwhite(arg + 3);
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
301,
|
||||||
/**/
|
/**/
|
||||||
300,
|
300,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user