]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix a panic when growing zero-width-element slices.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Sat, 6 Oct 2012 10:05:52 +0000 (12:05 +0200)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Sat, 6 Oct 2012 10:05:52 +0000 (12:05 +0200)
Fixes #4197.

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

src/pkg/runtime/slice.c
test/fixedbugs/bug457.go [new file with mode: 0644]

index d2cc1684ee9bf69ac25eb0dc08de136d021418d5..b977f458243c86a53f08c8ca1036eab223debe90 100644 (file)
@@ -114,7 +114,7 @@ runtime·growslice(SliceType *t, Slice old, int64 n, Slice ret)
 
        cap = old.cap + n;
 
-       if((intgo)cap != cap || cap < old.cap || cap > MaxMem / t->elem->size)
+       if((intgo)cap != cap || cap < old.cap || (t->elem->size > 0 && cap > MaxMem/t->elem->size))
                runtime·panicstring("growslice: cap out of range");
 
        growslice1(t, old, cap, &ret);
diff --git a/test/fixedbugs/bug457.go b/test/fixedbugs/bug457.go
new file mode 100644 (file)
index 0000000..ee70489
--- /dev/null
@@ -0,0 +1,15 @@
+// run
+
+// Copyright 2012 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 4197: growing a slice of zero-width elements
+// panics on a division by zero.
+
+package main
+
+func main() {
+       var x []struct{}
+       x = append(x, struct{}{})
+}