• Didier Spezia's avatar
    regexp: fix slice bounds out of range panics · f75f2f3f
    Didier Spezia authored
    Regular expressions involving a (x){0} term are
    simplified by removing this term from the
    expression, just before the expression is compiled.
    
    The number of subexpressions is evaluated before
    the simplification. The number of capture instructions
    in the compiled expressions is not necessarily in line
    with the number of subexpressions.
    
    When the ReplaceAll(String) methods are used, a number
    of capture slots (nmatch) is evaluated as 2*(s+1)
    (s being the number of subexpressions).
    
    In some case, it can be higher than the number of capture
    instructions evaluated at compile time, resulting in a
    panic when the internal slices of regexp.machine
    are resized to this value.
    
    Fixed by capping the number of capture slots to the number
    of capture instructions.
    
    I must say I do not really see the benefits of setting
    nmatch lower than re.prog.NumCap using this 2*(s+1) formula,
    so perhaps this can be further simplified.
    
    Fixes #11178
    Fixes #11176
    
    Change-Id: I21415e8ef2dd5f2721218e9a679f7f6bfb76ae9b
    Reviewed-on: https://go-review.googlesource.com/14013Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    f75f2f3f
Name
Last commit
Last update
..
syntax Loading commit data...
testdata Loading commit data...
all_test.go Loading commit data...
backtrack.go Loading commit data...
example_test.go Loading commit data...
exec.go Loading commit data...
exec2_test.go Loading commit data...
exec_test.go Loading commit data...
find_test.go Loading commit data...
onepass.go Loading commit data...
onepass_test.go Loading commit data...
regexp.go Loading commit data...