# HG changeset patch # User Bram Moolenaar # Date 1631097904 -7200 # Node ID 33ebec72978793f10cc12bc01fb3691890ad430d # Parent f1ed9dbb700ade7771e3c2542460f339f4e53e5c patch 8.2.3413: Vim9: too many characters are allowed in import name Commit: https://github.com/vim/vim/commit/a9e3d560877489acf751f99e045ab1d78e13249c Author: Bram Moolenaar Date: Wed Sep 8 12:31:35 2021 +0200 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 https://github.com/vim/vim/issues/8845) diff --git a/src/errors.h b/src/errors.h --- a/src/errors.h +++ b/src/errors.h @@ -270,8 +270,8 @@ EXTERN char e_missing_as_after_star[] INIT(= N_("E1045: Missing \"as\" after *")); EXTERN char e_missing_comma_in_import[] INIT(= N_("E1046: Missing comma in import")); -EXTERN char e_syntax_error_in_import[] - INIT(= N_("E1047: Syntax error in import")); +EXTERN char e_syntax_error_in_import_str[] + INIT(= N_("E1047: Syntax error in import: %s")); EXTERN char e_item_not_found_in_script_str[] INIT(= N_("E1048: Item not found in script: %s")); EXTERN char e_item_not_exported_in_script_str[] diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1490,6 +1490,23 @@ def Test_import_star_fails() var that = foo END CheckScriptFailure(lines, 'E1029: Expected ''.''') + + lines =<< trim END + vim9script + import * as 9foo from './Xfoo.vim' + END + CheckScriptFailure(lines, 'E1047:') + lines =<< trim END + vim9script + import * as the#foo from './Xfoo.vim' + END + CheckScriptFailure(lines, 'E1047:') + lines =<< trim END + vim9script + import * as g:foo from './Xfoo.vim' + END + CheckScriptFailure(lines, 'E1047:') + delete('Xfoo.vim') enddef diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3413, +/**/ 3412, /**/ 3411, diff --git a/src/vim9script.c b/src/vim9script.c --- a/src/vim9script.c +++ b/src/vim9script.c @@ -396,12 +396,19 @@ handle_import( arg = skipwhite_and_linebreak(arg, evalarg); if (STRNCMP("as", arg, 2) == 0 && IS_WHITE_OR_NUL(arg[2])) { - // skip over "as Name "; no line break allowed after "as" + // Skip over "as Name "; no line break allowed after "as". + // Do not allow for ':' and '#'. arg = skipwhite(arg + 2); p = arg; if (eval_isnamec1(*arg)) - while (eval_isnamec(*arg)) + while (ASCII_ISALNUM(*arg) || *arg == '_') ++arg; + if (p == arg || !(IS_WHITE_OR_NUL(*arg) + || (mult && (*arg == ',' || *arg == '}')))) + { + semsg(_(e_syntax_error_in_import_str), p); + goto erret; + } if (check_defined(p, arg - p, cctx, FALSE) == FAIL) goto erret; as_name = vim_strnsave(p, arg - p); @@ -439,7 +446,7 @@ handle_import( if (names.ga_len == 0) { - emsg(_(e_syntax_error_in_import)); + semsg(_(e_syntax_error_in_import_str), arg_start); goto erret; }