do not treat \0 as a backref in BRE

The valid BRE backref tokens are \1 .. \9, and 0 is not a special
character either so \0 is undefined by the standard.

Such undefined escaped characters are treated as literal characters
currently, following existing practice, so \0 is the same as 0.
This commit is contained in:
Szabolcs Nagy
2015-03-22 18:32:55 +00:00
committed by Rich Felker
parent 11d1e2e2de
commit 32dee9b9b1

View File

@ -839,7 +839,7 @@ static reg_errcode_t parse_atom(tre_parse_ctx_t *ctx, const char *s)
s--; s--;
break; break;
default: default:
if (!ere && isdigit(*s)) { if (!ere && (unsigned)*s-'1' < 9) {
/* back reference */ /* back reference */
int val = *s - '0'; int val = *s - '0';
node = tre_ast_new_literal(ctx->mem, BACKREF, val, ctx->position); node = tre_ast_new_literal(ctx->mem, BACKREF, val, ctx->position);