summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-05-20 22:20:02 +0200
committerBram Moolenaar <Bram@vim.org>2013-05-20 22:20:02 +0200
commit745fc029ba7541ac08b93bb2304a1a407e73336b (patch)
treefd2db8c4aa68f915a51fcd60b3191aaa85f2017d
parente3c7b86aab8882a0c185c5e62c9f9f264e967a52 (diff)
updated for version 7.3.980v7.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)
-rw-r--r--src/regexp_nfa.c14
-rw-r--r--src/version.c2
2 files changed, 9 insertions, 7 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index ef0148cf08..d70e46a6f1 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1826,13 +1826,13 @@ nfa_postfix_dump(expr, retval)
else if (retval == OK)
fprintf(f, ">>> NFA engine succeeded !\n");
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);
fprintf(f, "%s, ", code);
}
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, "\n\n");
fclose(f);
@@ -2667,11 +2667,11 @@ check_char_class(class, c)
switch (class)
{
case NFA_CLASS_ALNUM:
- if (isalnum(c))
+ if (c >= 1 && c <= 255 && isalnum(c))
return OK;
break;
case NFA_CLASS_ALPHA:
- if (isalpha(c))
+ if (c >= 1 && c <= 255 && isalpha(c))
return OK;
break;
case NFA_CLASS_BLANK:
@@ -2679,7 +2679,7 @@ check_char_class(class, c)
return OK;
break;
case NFA_CLASS_CNTRL:
- if (iscntrl(c))
+ if (c >= 1 && c <= 255 && iscntrl(c))
return OK;
break;
case NFA_CLASS_DIGIT:
@@ -2687,7 +2687,7 @@ check_char_class(class, c)
return OK;
break;
case NFA_CLASS_GRAPH:
- if (isgraph(c))
+ if (c >= 1 && c <= 255 && isgraph(c))
return OK;
break;
case NFA_CLASS_LOWER:
@@ -2699,7 +2699,7 @@ check_char_class(class, c)
return OK;
break;
case NFA_CLASS_PUNCT:
- if (ispunct(c))
+ if (c >= 1 && c <= 255 && ispunct(c))
return OK;
break;
case NFA_CLASS_SPACE:
diff --git a/src/version.c b/src/version.c
index 6dc7e7ee54..bef4af2ee1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 980,
+/**/
979,
/**/
978,