diff options
author | Stefan Monnier <[email protected]> | 2004-12-06 00:41:40 +0000 |
---|---|---|
committer | Stefan Monnier <[email protected]> | 2004-12-06 00:41:40 +0000 |
commit | c72b0edd085ee95677140e78c42eb104f74a3354 (patch) | |
tree | cbc7592716372cfe8178d8aca942bb2e4501cbeb /src/regex.c | |
parent | 952cb0846a0f0e4faf4075180062f0e0e91b9170 (diff) |
(GET_UNSIGNED_NUMBER): Signal an error when reaching the end.
Remove redundant correctness checks.
(regex_compile): Fix up error codes for \{..\} expressions.
Diffstat (limited to 'src/regex.c')
-rw-r--r-- | src/regex.c | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/src/regex.c b/src/regex.c index 130765134f..1009c837dc 100644 --- a/src/regex.c +++ b/src/regex.c @@ -1950,28 +1950,27 @@ struct range_table_work_area /* Get the next unsigned number in the uncompiled pattern. */ #define GET_UNSIGNED_NUMBER(num) \ - do { if (p != pend) \ - { \ - PATFETCH (c); \ - if (c == ' ') \ - FREE_STACK_RETURN (REG_BADBR); \ - while ('0' <= c && c <= '9') \ - { \ - int prev; \ - if (num < 0) \ - num = 0; \ - prev = num; \ - num = num * 10 + c - '0'; \ - if (num / 10 != prev) \ - FREE_STACK_RETURN (REG_BADBR); \ - if (p == pend) \ - break; \ - PATFETCH (c); \ - } \ - if (c == ' ') \ - FREE_STACK_RETURN (REG_BADBR); \ - } \ - } while (0) + do { \ + if (p == pend) \ + FREE_STACK_RETURN (REG_EBRACE); \ + else \ + { \ + PATFETCH (c); \ + while ('0' <= c && c <= '9') \ + { \ + int prev; \ + if (num < 0) \ + num = 0; \ + prev = num; \ + num = num * 10 + c - '0'; \ + if (num / 10 != prev) \ + FREE_STACK_RETURN (REG_BADBR); \ + if (p == pend) \ + FREE_STACK_RETURN (REG_EBRACE); \ + PATFETCH (c); \ + } \ + } \ + } while (0) #if ! WIDE_CHAR_SUPPORT @@ -3234,9 +3233,6 @@ regex_compile (pattern, size, syntax, bufp) beg_interval = p; - if (p == pend) - FREE_STACK_RETURN (REG_EBRACE); - GET_UNSIGNED_NUMBER (lower_bound); if (c == ',') @@ -3253,7 +3249,8 @@ regex_compile (pattern, size, syntax, bufp) { if (c != '\\') FREE_STACK_RETURN (REG_BADBR); - + if (p == pend) + FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c); } |