]> granicus.if.org Git - vim/commitdiff
patch 8.2.3413: Vim9: too many characters are allowed in import name v8.2.3413
authorBram Moolenaar <Bram@vim.org>
Wed, 8 Sep 2021 10:31:35 +0000 (12:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 8 Sep 2021 10:31:35 +0000 (12:31 +0200)
Problem:    Vim9: too many characters are allowed in import name.
Solution:   Disallow ':' and '#', check for white space. (closes #8845)

src/errors.h
src/testdir/test_vim9_script.vim
src/version.c
src/vim9script.c

index dd72a74a9dfa92359770164357c837e335f80a46..2a76504b4291ae6165d0c8b62352247a7d7a2df1 100644 (file)
@@ -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[]
index 2600bbdb4ceb59e40298e3e625c352f2a0cc8b44..313bfbcf05a74b3008f84142dd4bcfd01d54d5c2 100644 (file)
@@ -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
 
index 81845b7d2abe0dba6e41fae7310ba86898db5653..7d810aacc63c4fb2098ecf6577ea8f1505c78770 100644 (file)
@@ -755,6 +755,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3413,
 /**/
     3412,
 /**/
index 9ddc48930328dd13015651c2f3e8bfe5e5ccac28..ca245b2552042eb96eb6e65838af7fea703af685 100644 (file)
@@ -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;
     }