patch 8.2.1755: Vim9: crash when using invalid heredoc marker

Problem:    Vim9: crash when using invalid heredoc marker. (Dhiraj Mishra)
Solution:   Check for NULL list. (closes #7027)  Fix comment character.
This commit is contained in:
Bram Moolenaar 2020-09-27 14:22:48 +02:00
parent 8c7ad3631a
commit c0e29010f6
4 changed files with 17 additions and 2 deletions

View File

@ -558,6 +558,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
int text_indent_len = 0;
char_u *text_indent = NULL;
char_u dot[] = ".";
int comment_char = in_vim9script() ? '#' : '"';
if (eap->getline == NULL)
{
@ -585,11 +586,11 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
}
// The marker is the next word.
if (*cmd != NUL && *cmd != '"')
if (*cmd != NUL && *cmd != comment_char)
{
marker = skipwhite(cmd);
p = skiptowhite(marker);
if (*skipwhite(p) != NUL && *skipwhite(p) != '"')
if (*skipwhite(p) != NUL && *skipwhite(p) != comment_char)
{
semsg(_(e_trailing_arg), p);
return NULL;

View File

@ -732,4 +732,14 @@ def Test_assign_lambda()
CheckScriptSuccess(lines)
enddef
def Test_heredoc()
var lines =<< trim END # comment
text
END
assert_equal(['text'], lines)
CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:')
CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:')
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1755,
/**/
1754,
/**/

View File

@ -4632,6 +4632,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
eap->getline = exarg_getline;
eap->cookie = cctx;
l = heredoc_get(eap, op + 3, FALSE);
if (l == NULL)
return NULL;
if (cctx->ctx_skip != SKIP_YES)
{