]> Cypherpunks.ru repositories - gostls13.git/commitdiff
regexp/syntax: replace internal error on unexpected ) w/ ErrUnexpectedParen
authorJan Mercl <befelemepeseveze@gmail.com>
Mon, 14 May 2012 18:50:25 +0000 (11:50 -0700)
committerRob Pike <r@golang.org>
Mon, 14 May 2012 18:50:25 +0000 (11:50 -0700)
Unbalanced extra right parenthesis produced an internal error instead of
a more descriptive one.

Fixes #3406.

R=r, rsc
CC=golang-dev
https://golang.org/cl/6201063

api/go1.txt
src/pkg/regexp/syntax/parse.go
src/pkg/regexp/syntax/parse_test.go

index e6bdd173e92edaac621b2f54621634742d8e7139..f12719fed6daf41bce239516bd6e3beba8e8797d 100644 (file)
@@ -5484,6 +5484,7 @@ pkg regexp/syntax, const ErrMissingBracket ErrorCode
 pkg regexp/syntax, const ErrMissingParen ErrorCode
 pkg regexp/syntax, const ErrMissingRepeatArgument ErrorCode
 pkg regexp/syntax, const ErrTrailingBackslash ErrorCode
+pkg regexp/syntax, const ErrUnexpectedParen ErrorCode
 pkg regexp/syntax, const FoldCase Flags
 pkg regexp/syntax, const InstAlt InstOp
 pkg regexp/syntax, const InstAltMatch InstOp
index 2df77502518b5e4f70312275ea52822eac5260b1..74a9d6c30aed3de25dd96a6588dcadf964db065b 100644 (file)
@@ -46,6 +46,7 @@ const (
        ErrMissingParen          ErrorCode = "missing closing )"
        ErrMissingRepeatArgument ErrorCode = "missing argument to repetition operator"
        ErrTrailingBackslash     ErrorCode = "trailing backslash at end of expression"
+       ErrUnexpectedParen       ErrorCode = "unexpected )"
 )
 
 func (e ErrorCode) String() string {
@@ -1168,13 +1169,13 @@ func (p *parser) parseRightParen() error {
 
        n := len(p.stack)
        if n < 2 {
-               return &Error{ErrInternalError, ""}
+               return &Error{ErrUnexpectedParen, p.wholeRegexp}
        }
        re1 := p.stack[n-1]
        re2 := p.stack[n-2]
        p.stack = p.stack[:n-2]
        if re2.Op != opLeftParen {
-               return &Error{ErrMissingParen, p.wholeRegexp}
+               return &Error{ErrUnexpectedParen, p.wholeRegexp}
        }
        // Restore flags at time of paren.
        p.flags = re2.Flags
index c6e63392c9c2b8f50733a00c323086f0037bd39b..81fd9dc0136a3d73869407da964d7f2991fd906c 100644 (file)
@@ -441,10 +441,18 @@ var invalidRegexps = []string{
        `(`,
        `)`,
        `(a`,
+       `a)`,
+       `(a))`,
        `(a|b|`,
+       `a|b|)`,
+       `(a|b|))`,
        `(a|b`,
+       `a|b)`,
+       `(a|b))`,
        `[a-z`,
        `([a-z)`,
+       `[a-z)`,
+       `([a-z]))`,
        `x{1001}`,
        `x{9876543210}`,
        `x{2,1}`,