This patch to libgo lets it report "len out of range" when making a
slice with a very large length. This is not strictly necessary as it
already check for a very large capacity, but since the capacity is often
implicit this patch gives a better error. Bootstrapped and ran Go
testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Will
commit to 4.8 branch when it is open.
Ian
diff -r cdf7917ba5bf libgo/runtime/go-make-slice.c
--- a/libgo/runtime/go-make-slice.c Wed Oct 09 20:50:33 2013 -0700
+++ b/libgo/runtime/go-make-slice.c Thu Oct 10 17:44:40 2013 -0700
@@ -34,7 +34,10 @@
std = (const struct __go_slice_type *) td;
ilen = (intgo) len;
- if (ilen < 0 || (uintptr_t) ilen != len)
+ if (ilen < 0
+ || (uintptr_t) ilen != len
+ || (std->__element_type->__size > 0
+ && len > MaxMem / std->__element_type->__size))
runtime_panicstring ("makeslice: len out of range");
icap = (intgo) cap;