Skip to content

Commit a9e3d56

Browse files
committed
patch 8.2.3413: Vim9: too many characters are allowed in import name
Problem: Vim9: too many characters are allowed in import name. Solution: Disallow ':' and '#', check for white space. (closes #8845)
1 parent af2d5d2 commit a9e3d56

4 files changed

Lines changed: 31 additions & 5 deletions

File tree

src/errors.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,8 @@ EXTERN char e_missing_as_after_star[]
270270
INIT(= N_("E1045: Missing \"as\" after *"));
271271
EXTERN char e_missing_comma_in_import[]
272272
INIT(= N_("E1046: Missing comma in import"));
273-
EXTERN char e_syntax_error_in_import[]
274-
INIT(= N_("E1047: Syntax error in import"));
273+
EXTERN char e_syntax_error_in_import_str[]
274+
INIT(= N_("E1047: Syntax error in import: %s"));
275275
EXTERN char e_item_not_found_in_script_str[]
276276
INIT(= N_("E1048: Item not found in script: %s"));
277277
EXTERN char e_item_not_exported_in_script_str[]

src/testdir/test_vim9_script.vim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,23 @@ def Test_import_star_fails()
14901490
var that = foo
14911491
END
14921492
CheckScriptFailure(lines, 'E1029: Expected ''.''')
1493+
1494+
lines =<< trim END
1495+
vim9script
1496+
import * as 9foo from './Xfoo.vim'
1497+
END
1498+
CheckScriptFailure(lines, 'E1047:')
1499+
lines =<< trim END
1500+
vim9script
1501+
import * as the#foo from './Xfoo.vim'
1502+
END
1503+
CheckScriptFailure(lines, 'E1047:')
1504+
lines =<< trim END
1505+
vim9script
1506+
import * as g:foo from './Xfoo.vim'
1507+
END
1508+
CheckScriptFailure(lines, 'E1047:')
1509+
14931510
delete('Xfoo.vim')
14941511
enddef
14951512

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,8 @@ static char *(features[]) =
755755

756756
static int included_patches[] =
757757
{ /* Add new patch number below this line */
758+
/**/
759+
3413,
758760
/**/
759761
3412,
760762
/**/

src/vim9script.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,19 @@ handle_import(
396396
arg = skipwhite_and_linebreak(arg, evalarg);
397397
if (STRNCMP("as", arg, 2) == 0 && IS_WHITE_OR_NUL(arg[2]))
398398
{
399-
// skip over "as Name "; no line break allowed after "as"
399+
// Skip over "as Name "; no line break allowed after "as".
400+
// Do not allow for ':' and '#'.
400401
arg = skipwhite(arg + 2);
401402
p = arg;
402403
if (eval_isnamec1(*arg))
403-
while (eval_isnamec(*arg))
404+
while (ASCII_ISALNUM(*arg) || *arg == '_')
404405
++arg;
406+
if (p == arg || !(IS_WHITE_OR_NUL(*arg)
407+
|| (mult && (*arg == ',' || *arg == '}'))))
408+
{
409+
semsg(_(e_syntax_error_in_import_str), p);
410+
goto erret;
411+
}
405412
if (check_defined(p, arg - p, cctx, FALSE) == FAIL)
406413
goto erret;
407414
as_name = vim_strnsave(p, arg - p);
@@ -439,7 +446,7 @@ handle_import(
439446

440447
if (names.ga_len == 0)
441448
{
442-
emsg(_(e_syntax_error_in_import));
449+
semsg(_(e_syntax_error_in_import_str), arg_start);
443450
goto erret;
444451
}
445452

0 commit comments

Comments
 (0)