regexp/syntax: add and use ErrInvalidDepth

The fix for #51112 introduced a depth check but used
ErrInternalError to avoid introduce new API in a CL that
would be backported to earlier releases.

New API accepted in proposal #51684.

This CL adds a distinct error for this case.

For #51112.
Fixes #51684.

Change-Id: I068fc70aafe4218386a06103d9b7c847fb7ffa65
Reviewed-on: https://go-review.googlesource.com/c/go/+/384617
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Russ Cox 2022-02-02 16:44:35 -05:00
parent 492c85ab84
commit 1af60b2f49
2 changed files with 7 additions and 3 deletions

3
api/next/regexpdepth.txt Normal file
View File

@ -0,0 +1,3 @@
pkg regexp/syntax, const ErrInvalidDepth = "invalid nesting depth" #0
pkg regexp/syntax, const ErrInvalidDepth ErrorCode #0

View File

@ -43,6 +43,7 @@ const (
ErrMissingRepeatArgument ErrorCode = "missing argument to repetition operator"
ErrTrailingBackslash ErrorCode = "trailing backslash at end of expression"
ErrUnexpectedParen ErrorCode = "unexpected )"
ErrInvalidDepth ErrorCode = "invalid nesting depth"
)
func (e ErrorCode) String() string {
@ -133,7 +134,7 @@ func (p *parser) checkHeight(re *Regexp) {
}
}
if p.calcHeight(re, true) > maxHeight {
panic(ErrInternalError)
panic(ErrInvalidDepth)
}
}
@ -756,8 +757,8 @@ func parse(s string, flags Flags) (_ *Regexp, err error) {
panic(r)
case nil:
// ok
case ErrInternalError:
err = &Error{Code: ErrInternalError, Expr: s}
case ErrInvalidDepth:
err = &Error{Code: ErrInvalidDepth, Expr: s}
}
}()