Revert "resolve parsing of a slash character within a cclass "/[/]/" without escape"

This reverts commit d91c473c7c.
master
ozan yigit 10 months ago
parent cfe6b6b99d
commit 01749f04cf
  1. 33
      lex.c
  2. 4
      testdir/T.misc

33
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;
}

@ -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() }

Loading…
Cancel
Save