From 01749f04cf1366ac50d998c4747acc89549c082f Mon Sep 17 00:00:00 2001 From: ozan yigit Date: Thu, 25 Nov 2021 13:29:49 -0500 Subject: [PATCH] Revert "resolve parsing of a slash character within a cclass "/[/]/" without escape" This reverts commit d91c473c7c187079a886fcbc27fc7955da52a8fd. --- lex.c | 33 ++------------------------------- testdir/T.misc | 4 ++++ 2 files changed, 6 insertions(+), 31 deletions(-) diff --git a/lex.c b/lex.c index f588602..9d1ae06 100644 --- a/lex.c +++ b/lex.c @@ -523,12 +523,11 @@ int regexpr(void) static char *buf = NULL; static int bufsz = 500; char *bp; - int brackets = 0; if (buf == NULL && (buf = (char *) malloc(bufsz)) == NULL) - FATAL("out of space for reg expr"); + FATAL("out of space for rex expr"); bp = buf; - for ( ; ((c = input()) != '/' || brackets > 0) && c != 0; ) { + for ( ; (c = input()) != '/' && c != 0; ) { if (!adjbuf(&buf, &bufsz, bp-buf+3, 500, &bp, "regexpr")) FATAL("out of space for reg expr %.10s...", buf); if (c == '\n') { @@ -539,34 +538,6 @@ int regexpr(void) } else if (c == '\\') { *bp++ = '\\'; *bp++ = input(); - } else if (c == '[') { - *bp++ = c; - brackets++; - if ((c = input()) == '^') { - *bp++ = c; - if ((c = input()) == ']') { - *bp++ = c; - if ((c = input()) == '[') - *bp++ = c; - else - unput(c); - } else if (c == '[') { - *bp++ = c; - } else - unput(c); - } else if (c == ']') { /* []] is ok */ - *bp++ = c; - if ((c = input()) == '[') - *bp++ = c; - else - unput(c); - } else if (brackets == 1 && c == '[') { /* [[] is also ok */ - *bp++ = c; - } else - unput(c); - } else if (c == ']') { - *bp++ = c; - brackets--; } else { *bp++ = c; } diff --git a/testdir/T.misc b/testdir/T.misc index f12d459..ad34ab8 100755 --- a/testdir/T.misc +++ b/testdir/T.misc @@ -164,6 +164,10 @@ $awk 'BEGIN { unireghf() } function unireghf(hfeed) { hfeed[1] = 0 }' if test -r core; then echo 1>&2 "BAD: T.misc unireghf dropped core"; fi +echo x | $awk '/[/]/' 2>foo +grep 'nonterminated character class' foo >/dev/null || error 'BAD: T.misc nonterminated fails' +if test -r core; then echo 1>&2 "BAD: T.misc nonterminated dropped core"; fi + $awk ' function f() { return 12345 } BEGIN { printf "<%s>\n", f() }