fix ^* at the start of a complete BRE
authorSzabolcs Nagy <nsz@port70.net>
Mon, 29 Feb 2016 16:36:25 +0000 (16:36 +0000)
committerRich Felker <dalias@aerifal.cx>
Wed, 2 Mar 2016 05:47:22 +0000 (00:47 -0500)
This is a workaround to treat * as literal * at the start of a BRE.

Ideally ^ would be treated as an anchor at the start of any BRE
subexpression and similarly $ would be an anchor at the end of any
subexpression.  This is not required by the standard and hard to do
with the current code, but it's the existing practice.  If it is
changed, * should be treated as literal after such anchor as well.

src/regex/regcomp.c

index 7a2864cd1458c6abc084a570a3731c77068d8d9d..5fad98b322751bd97712dd0c69c0704b8c3f97e3 100644 (file)
@@ -994,6 +994,10 @@ static reg_errcode_t tre_parse(tre_parse_ctx_t *ctx)
                        if (*s=='\\')
                                s++;
 
+                       /* handle ^* at the start of a complete BRE. */
+                       if (!ere && s==ctx->re+1 && s[-1]=='^')
+                               break;
+
                        /* extension: multiple consecutive *+?{,} is unspecified,
                           but (a+)+ has to be supported so accepting a++ makes
                           sense, note however that the RE_DUP_MAX limit can be