1
0
forked from aniani/vim

patch 8.1.1720: crash with very long %[] pattern

Problem:    Crash with very long %[] pattern. (Reza Mirzazade farkhani)
Solution:   Check for reg_toolong. (closes #4703)
This commit is contained in:
Bram Moolenaar
2019-07-20 18:56:06 +02:00
parent 331bafd481
commit 2a5b52758b
3 changed files with 17 additions and 0 deletions

View File

@@ -2175,7 +2175,11 @@ regatom(int *flagp)
if (ret == NULL)
ret = br;
else
{
regtail(lastnode, br);
if (reg_toolong)
return NULL;
}
ungetchr();
one_exactly = TRUE;
@@ -2200,6 +2204,8 @@ regatom(int *flagp)
if (OP(br) == BRANCH)
{
regtail(br, lastbranch);
if (reg_toolong)
return NULL;
br = OPERAND(br);
}
else

View File

@@ -206,3 +206,12 @@ func Test_large_class()
call assert_equal(1, "\u3042" =~# '[\u3000-\u4000]')
set re=0
endfunc
func Test_optmatch_toolong()
set re=1
" Can only handle about 8000 characters.
let pat = '\\%[' .. repeat('x', 9000) .. ']'
call assert_fails('call match("abc def", "' .. pat .. '")', 'E339:')
set re=0
endfunc

View File

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