TRE wants to treat + and ? after a +, ?, or * as special; ? means
ungreedy and + is reserved for future use. however, this is
non-conformant. although redundant, these redundant characters have
well-defined (no-op) meaning for POSIX ERE, and are actually _literal_
characters (which TRE is wrongly ignoring) in POSIX BRE mode.
the simplest fix is to simply remove the unneeded nonstandard
functionality. as a plus, this shaves off a small amount of bloat.
if (*ctx->re == CHAR_QUESTIONMARK)
rep_max = 1;
- {
- if (*(ctx->re + 1) == CHAR_QUESTIONMARK)
- {
- minimal = 1;
- ctx->re++;
- }
- else if (*(ctx->re + 1) == CHAR_STAR
- || *(ctx->re + 1) == CHAR_PLUS)
- {
- /* These are reserved for future extensions. */
- return REG_BADRPT;
- }
- }
-
ctx->re++;
tmp_node = tre_ast_new_iter(ctx->mem, result, rep_min, rep_max,
minimal);