Patch 8.2.3413

13 views
Skip to first unread message

Bram Moolenaar

unread,
Sep 8, 2021, 6:32:11 AM9/8/21
to vim...@googlegroups.com

Patch 8.2.3413
Problem: Vim9: too many characters are allowed in import name.
Solution: Disallow ':' and '#', check for white space. (closes #8845)
Files: src/vim9script.c, src/errors.h, src/testdir/test_vim9_script.vim


*** ../vim-8.2.3412/src/vim9script.c 2021-08-15 14:39:09.164363110 +0200
--- src/vim9script.c 2021-09-08 12:30:01.654606403 +0200
***************
*** 396,407 ****
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"
arg = skipwhite(arg + 2);
p = arg;
if (eval_isnamec1(*arg))
! while (eval_isnamec(*arg))
++arg;
if (check_defined(p, arg - p, cctx, FALSE) == FAIL)
goto erret;
as_name = vim_strnsave(p, arg - p);
--- 396,414 ----
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".
! // Do not allow for ':' and '#'.
arg = skipwhite(arg + 2);
p = arg;
if (eval_isnamec1(*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,445 ****

if (names.ga_len == 0)
{
! emsg(_(e_syntax_error_in_import));
goto erret;
}

--- 446,452 ----

if (names.ga_len == 0)
{
! semsg(_(e_syntax_error_in_import_str), arg_start);
goto erret;
}

*** ../vim-8.2.3412/src/errors.h 2021-09-07 22:12:15.489452165 +0200
--- src/errors.h 2021-09-08 12:21:13.796096935 +0200
***************
*** 270,277 ****
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_item_not_found_in_script_str[]
INIT(= N_("E1048: Item not found in script: %s"));
EXTERN char e_item_not_exported_in_script_str[]
--- 270,277 ----
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_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[]
*** ../vim-8.2.3412/src/testdir/test_vim9_script.vim 2021-09-07 22:35:30.665999020 +0200
--- src/testdir/test_vim9_script.vim 2021-09-08 12:30:50.202469417 +0200
***************
*** 1490,1495 ****
--- 1490,1512 ----
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

*** ../vim-8.2.3412/src/version.c 2021-09-07 22:35:30.665999020 +0200
--- src/version.c 2021-09-08 12:19:42.356355078 +0200
***************
*** 757,758 ****
--- 757,760 ----
{ /* Add new patch number below this line */
+ /**/
+ 3413,
/**/

--
hundred-and-one symptoms of being an internet addict:
5. You find yourself brainstorming for new subjects to search.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages