From: Daniel Morsing Date: Sat, 1 Jun 2013 14:33:54 +0000 (+0200) Subject: cmd/gc: fix overflow in array bounds calculation. X-Git-Tag: go1.2rc2~1359 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bf9a00bc8f048e2ca8d9d12d0bcf5dfc41505693;p=gostls13.git cmd/gc: fix overflow in array bounds calculation. Fixes #5609. R=golang-dev, remyoudompheng, r CC=golang-dev https://golang.org/cl/9757045 --- diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 12839009e3..550021de69 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -420,12 +420,12 @@ reswitch: goto error; } t->bound = mpgetfix(v.u.xval); - if(t->bound < 0) { - yyerror("array bound must be non-negative"); - goto error; - } else if(doesoverflow(v, types[TINT])) { + if(doesoverflow(v, types[TINT])) { yyerror("array bound is too large"); goto error; + } else if(t->bound < 0) { + yyerror("array bound must be non-negative"); + goto error; } } typecheck(&r, Etype); diff --git a/test/fixedbugs/issue5609.go b/test/fixedbugs/issue5609.go new file mode 100644 index 0000000000..34619b3418 --- /dev/null +++ b/test/fixedbugs/issue5609.go @@ -0,0 +1,13 @@ +// errorcheck + +// Copyright 2013 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. + +// issue 5609: overflow when calculating array size + +package pkg + +const Large uint64 = 18446744073709551615 + +var foo [Large]uint64 // ERROR "array bound is too large"