]> Cypherpunks repositories - gostls13.git/commitdiff
regexp/syntax: fix handling of \Q...\E
authorRuss Cox <rsc@golang.org>
Wed, 25 Nov 2015 17:32:34 +0000 (12:32 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 1 Dec 2015 22:45:12 +0000 (22:45 +0000)
It's not a group: must handle the inside as a sequence of literal chars,
not a single literal string.

That is, \Qab\E+ is the same as ab+, not (ab)+.

Fixes #11187.

Change-Id: I5406d05ccf7efff3a7f15395bdb0cfb2bd23a8ed
Reviewed-on: https://go-review.googlesource.com/17233
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/regexp/syntax/parse.go
src/regexp/syntax/parse_test.go

index d579a4069b16021b11438e9d04543c2d6c68d028..c2b92c1d44ab43dccb9cd4091a002216e028515e 100644 (file)
@@ -830,7 +830,14 @@ func Parse(s string, flags Flags) (*Regexp, error) {
                                                lit = t[2:i]
                                                t = t[i+2:]
                                        }
-                                       p.push(literalRegexp(lit, p.flags))
+                                       for lit != "" {
+                                               c, rest, err := nextRune(lit)
+                                               if err != nil {
+                                                       return nil, err
+                                               }
+                                               p.literal(c)
+                                               lit = rest
+                                       }
                                        break BigSwitch
                                case 'z':
                                        p.op(OpEndText)
index c4a1117ff86ced2e46b04c9f68e593eed383d7ff..626ceeadf6d72b68c03c89f2df9fe7cf16328e0a 100644 (file)
@@ -144,6 +144,7 @@ var parseTests = []parseTest{
        // Test Perl quoted literals
        {`\Q+|*?{[\E`, `str{+|*?{[}`},
        {`\Q+\E+`, `plus{lit{+}}`},
+       {`\Qab\E+`, `cat{lit{a}plus{lit{b}}}`},
        {`\Q\\E`, `lit{\}`},
        {`\Q\\\E`, `str{\\}`},
 
@@ -479,6 +480,7 @@ var invalidRegexps = []string{
        `a{100000}`,
        `a{100000,}`,
        "((((((((((x{2}){2}){2}){2}){2}){2}){2}){2}){2}){2})",
+       `\Q\E*`,
 }
 
 var onlyPerl = []string{