mirror of
https://github.com/golang/go
synced 2024-09-05 07:54:46 +00:00
cmd/compile: fix array slice expression bounds check
Fixes #20749. Change-Id: Ic6a7edc858575c4cb8b2e2ca97ee0c4b69f22c27 Reviewed-on: https://go-review.googlesource.com/46466 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
3a5f746766
commit
47e659b01f
|
@ -2261,7 +2261,7 @@ func checksliceindex(l *Node, r *Node, tp *types.Type) bool {
|
|||
if r.Int64() < 0 {
|
||||
yyerror("invalid slice index %v (index must be non-negative)", r)
|
||||
return false
|
||||
} else if tp != nil && tp.NumElem() > 0 && r.Int64() > tp.NumElem() {
|
||||
} else if tp != nil && tp.NumElem() >= 0 && r.Int64() > tp.NumElem() {
|
||||
yyerror("invalid slice index %v (out of bounds for %d-element array)", r, tp.NumElem())
|
||||
return false
|
||||
} else if Isconst(l, CTSTR) && r.Int64() > int64(len(l.Val().U.(string))) {
|
||||
|
|
15
test/fixedbugs/issue20749.go
Normal file
15
test/fixedbugs/issue20749.go
Normal file
|
@ -0,0 +1,15 @@
|
|||
// errorcheck
|
||||
|
||||
// Copyright 2017 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package p
|
||||
|
||||
// Verify that the compiler complains even if the array
|
||||
// has length 0.
|
||||
var a [0]int
|
||||
var _ = a[2:] // ERROR "invalid slice index 2"
|
||||
|
||||
var b [1]int
|
||||
var _ = b[2:] // ERROR "invalid slice index 2"
|
Loading…
Reference in a new issue