aboutsummaryrefslogtreecommitdiff
path: root/b.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2019-06-04 23:53:31 -0600
committerArnold D. Robbins <arnold@skeeve.com>2019-06-04 23:53:31 -0600
commit28dacbd66b5fb07add399e2ee9e46d85258e078d (patch)
tree4874dfafd4242c24c6b12890f47c8e29e3b65220 /b.c
parent4189ef5d585f54879014a00263300b9dfc7e128c (diff)
downloadone-true-awk-28dacbd66b5fb07add399e2ee9e46d85258e078d.tar.gz
Allow unmatched right paren in regexes. Fixes Issue #40.
Diffstat (limited to 'b.c')
-rw-r--r--b.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/b.c b/b.c
index 37ea0a5..2eeba2a 100644
--- a/b.c
+++ b/b.c
@@ -912,6 +912,7 @@ int relex(void) /* lexical analyzer for reparse */
int i;
int num, m, commafound, digitfound;
const uschar *startreptok;
+ static int parens = 0;
rescan:
starttok = prestr;
@@ -925,9 +926,18 @@ rescan:
case '\0': prestr--; return '\0';
case '^':
case '$':
+ return c;
case '(':
- case ')':
+ parens++;
return c;
+ case ')':
+ if (parens) {
+ parens--;
+ return c;
+ }
+ /* unmatched close parenthesis; per POSIX, treat as literal */
+ rlxval = c;
+ return CHAR;
case '\\':
rlxval = quoted(&prestr);
return CHAR;