diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-05-20 22:20:02 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-05-20 22:20:02 +0200 |
commit | 745fc029ba7541ac08b93bb2304a1a407e73336b (patch) | |
tree | fd2db8c4aa68f915a51fcd60b3191aaa85f2017d | |
parent | e3c7b86aab8882a0c185c5e62c9f9f264e967a52 (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.c | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |