1
0
forked from aniani/vim

updated for version 7.3.980

Problem:    Regexp logs may contain garbage. Character classes don't work
            correctly for multi-byte characters.
Solution:   Check for end of post list.  Only use "is" functions for
            characters up to 255. (Ken Takata)
This commit is contained in:
Bram Moolenaar
2013-05-20 22:20:02 +02:00
parent e3c7b86aab
commit 745fc029ba
2 changed files with 9 additions and 7 deletions

View File

@@ -1826,13 +1826,13 @@ nfa_postfix_dump(expr, retval)
else if (retval == OK) else if (retval == OK)
fprintf(f, ">>> NFA engine succeeded !\n"); fprintf(f, ">>> NFA engine succeeded !\n");
fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr); fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
for (p=post_start; *p; p++) for (p = post_start; *p && p < post_end; p++)
{ {
nfa_set_code(*p); nfa_set_code(*p);
fprintf(f, "%s, ", code); fprintf(f, "%s, ", code);
} }
fprintf(f, "\"\nPostfix notation (int): "); fprintf(f, "\"\nPostfix notation (int): ");
for (p=post_start; *p; p++) for (p = post_start; *p && p < post_end; p++)
fprintf(f, "%d ", *p); fprintf(f, "%d ", *p);
fprintf(f, "\n\n"); fprintf(f, "\n\n");
fclose(f); fclose(f);
@@ -2667,11 +2667,11 @@ check_char_class(class, c)
switch (class) switch (class)
{ {
case NFA_CLASS_ALNUM: case NFA_CLASS_ALNUM:
if (isalnum(c)) if (c >= 1 && c <= 255 && isalnum(c))
return OK; return OK;
break; break;
case NFA_CLASS_ALPHA: case NFA_CLASS_ALPHA:
if (isalpha(c)) if (c >= 1 && c <= 255 && isalpha(c))
return OK; return OK;
break; break;
case NFA_CLASS_BLANK: case NFA_CLASS_BLANK:
@@ -2679,7 +2679,7 @@ check_char_class(class, c)
return OK; return OK;
break; break;
case NFA_CLASS_CNTRL: case NFA_CLASS_CNTRL:
if (iscntrl(c)) if (c >= 1 && c <= 255 && iscntrl(c))
return OK; return OK;
break; break;
case NFA_CLASS_DIGIT: case NFA_CLASS_DIGIT:
@@ -2687,7 +2687,7 @@ check_char_class(class, c)
return OK; return OK;
break; break;
case NFA_CLASS_GRAPH: case NFA_CLASS_GRAPH:
if (isgraph(c)) if (c >= 1 && c <= 255 && isgraph(c))
return OK; return OK;
break; break;
case NFA_CLASS_LOWER: case NFA_CLASS_LOWER:
@@ -2699,7 +2699,7 @@ check_char_class(class, c)
return OK; return OK;
break; break;
case NFA_CLASS_PUNCT: case NFA_CLASS_PUNCT:
if (ispunct(c)) if (c >= 1 && c <= 255 && ispunct(c))
return OK; return OK;
break; break;
case NFA_CLASS_SPACE: case NFA_CLASS_SPACE:

View File

@@ -728,6 +728,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 */
/**/
980,
/**/ /**/
979, 979,
/**/ /**/