summaryrefslogtreecommitdiff
path: root/src/regex/regcomp.c
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2015-04-18 17:28:49 +0000
committerRich Felker <dalias@aerifal.cx>2016-01-30 20:53:42 -0500
commit25160f1c08235cf5b6a9617c5640380618a0f6ff (patch)
treea71afcd0c327dc78a2e005c3b8d749ab9554305a /src/regex/regcomp.c
parent03498ec22a4804ddbd8203d9ac94b6f7b6574b3c (diff)
downloadmusl-25160f1c08235cf5b6a9617c5640380618a0f6ff.tar.gz
regex: treat \+, \? as repetitions in BRE
These are undefined escape sequences by the standard, but often used in sed scripts.
Diffstat (limited to 'src/regex/regcomp.c')
-rw-r--r--src/regex/regcomp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/regex/regcomp.c b/src/regex/regcomp.c
index ccd3755b..b3dbb252 100644
--- a/src/regex/regcomp.c
+++ b/src/regex/regcomp.c
@@ -838,6 +838,9 @@ static reg_errcode_t parse_atom(tre_parse_ctx_t *ctx, const char *s)
s--;
break;
case '{':
+ case '+':
+ case '?':
+ /* extension: treat \+, \? as repetitions in BRE */
/* reject repetitions after empty expression in BRE */
if (!ere)
return REG_BADRPT;
@@ -993,7 +996,8 @@ static reg_errcode_t tre_parse(tre_parse_ctx_t *ctx)
}
if (*s=='\\' && ere)
break;
- if (*s=='\\' && s[1]!='{')
+ /* extension: treat \+, \? as repetitions in BRE */
+ if (*s=='\\' && s[1]!='+' && s[1]!='?' && s[1]!='{')
break;
if (*s=='\\')
s++;