mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
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:
@@ -558,6 +558,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
|
|||||||
int text_indent_len = 0;
|
int text_indent_len = 0;
|
||||||
char_u *text_indent = NULL;
|
char_u *text_indent = NULL;
|
||||||
char_u dot[] = ".";
|
char_u dot[] = ".";
|
||||||
|
int comment_char = in_vim9script() ? '#' : '"';
|
||||||
|
|
||||||
if (eap->getline == NULL)
|
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.
|
// The marker is the next word.
|
||||||
if (*cmd != NUL && *cmd != '"')
|
if (*cmd != NUL && *cmd != comment_char)
|
||||||
{
|
{
|
||||||
marker = skipwhite(cmd);
|
marker = skipwhite(cmd);
|
||||||
p = skiptowhite(marker);
|
p = skiptowhite(marker);
|
||||||
if (*skipwhite(p) != NUL && *skipwhite(p) != '"')
|
if (*skipwhite(p) != NUL && *skipwhite(p) != comment_char)
|
||||||
{
|
{
|
||||||
semsg(_(e_trailing_arg), p);
|
semsg(_(e_trailing_arg), p);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@@ -732,4 +732,14 @@ def Test_assign_lambda()
|
|||||||
CheckScriptSuccess(lines)
|
CheckScriptSuccess(lines)
|
||||||
enddef
|
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
|
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1755,
|
||||||
/**/
|
/**/
|
||||||
1754,
|
1754,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -4632,6 +4632,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
eap->getline = exarg_getline;
|
eap->getline = exarg_getline;
|
||||||
eap->cookie = cctx;
|
eap->cookie = cctx;
|
||||||
l = heredoc_get(eap, op + 3, FALSE);
|
l = heredoc_get(eap, op + 3, FALSE);
|
||||||
|
if (l == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (cctx->ctx_skip != SKIP_YES)
|
if (cctx->ctx_skip != SKIP_YES)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user