changeset 25755:33ebec729787 v8.2.3413

patch 8.2.3413: Vim9: too many characters are allowed in import name Commit: https://github.com/vim/vim/commit/a9e3d560877489acf751f99e045ab1d78e13249c Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Wed, 08 Sep 2021 12:45:04 +0200
parents f1ed9dbb700a
children 912ae2bec55b
files src/errors.h src/testdir/test_vim9_script.vim src/version.c src/vim9script.c
diffstat 4 files changed, 31 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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[]
--- 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
 
--- 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,
--- 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;
     }