1
0
forked from aniani/vim

updated for version 7.4.104

Problem:    ":help s/\_" reports an internal error. (John Beckett)
Solution:   Check for NUL and invalid character classes.
This commit is contained in:
Bram Moolenaar
2013-11-28 14:20:17 +01:00
parent 3678208477
commit 174a848b67
2 changed files with 15 additions and 2 deletions

View File

@@ -239,7 +239,9 @@ static int nfa_classcodes[] = {
NFA_UPPER, NFA_NUPPER NFA_UPPER, NFA_NUPPER
}; };
static char_u e_nul_found[] = N_("E865: (NFA) Regexp end encountered prematurely");
static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c"); static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
/* NFA regexp \ze operator encountered. */ /* NFA regexp \ze operator encountered. */
static int nfa_has_zend; static int nfa_has_zend;
@@ -1137,7 +1139,7 @@ nfa_regatom()
switch (c) switch (c)
{ {
case NUL: case NUL:
EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely")); EMSG_RET_FAIL(_(e_nul_found));
case Magic('^'): case Magic('^'):
EMIT(NFA_BOL); EMIT(NFA_BOL);
@@ -1160,6 +1162,9 @@ nfa_regatom()
case Magic('_'): case Magic('_'):
c = no_Magic(getchr()); c = no_Magic(getchr());
if (c == NUL)
EMSG_RET_FAIL(_(e_nul_found));
if (c == '^') /* "\_^" is start-of-line */ if (c == '^') /* "\_^" is start-of-line */
{ {
EMIT(NFA_BOL); EMIT(NFA_BOL);
@@ -1216,6 +1221,12 @@ nfa_regatom()
p = vim_strchr(classchars, no_Magic(c)); p = vim_strchr(classchars, no_Magic(c));
if (p == NULL) if (p == NULL)
{ {
if (extra == NFA_ADD_NL)
{
EMSGN(_(e_ill_char_class), c);
rc_did_emsg = TRUE;
return FAIL;
}
EMSGN("INTERNAL: Unknown character class char: %ld", c); EMSGN("INTERNAL: Unknown character class char: %ld", c);
return FAIL; return FAIL;
} }
@@ -4733,7 +4744,7 @@ check_char_class(class, c)
default: default:
/* should not be here :P */ /* should not be here :P */
EMSGN("E877: (NFA regexp) Invalid character class: %ld", class); EMSGN(_(e_ill_char_class), class);
return FAIL; return FAIL;
} }
return FAIL; return FAIL;

View File

@@ -738,6 +738,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 */
/**/
104,
/**/ /**/
103, 103,
/**/ /**/