From: Russ Cox Date: Wed, 27 Jan 2016 04:00:41 +0000 (-0500) Subject: runtime: guard against array out of bounds in GoroutineProfile X-Git-Tag: go1.6rc1~20 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d9fdbf48207e24c1d0d771250f2cc811ef97adff;p=gostls13.git runtime: guard against array out of bounds in GoroutineProfile The previous CL is the real fix. This one is just insurance. Fixes #14046 again. Change-Id: I553349504bb1789e4b66c888dbe4034568918ad6 Reviewed-on: https://go-review.googlesource.com/18977 Reviewed-by: Austin Clements --- diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index e45bc7a770..fc73bbfbe1 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -554,6 +554,11 @@ func GoroutineProfile(p []StackRecord) (n int, ok bool) { // Save other goroutines. for _, gp1 := range allgs { if isOK(gp1) { + if len(r) == 0 { + // Should be impossible, but better to return a + // truncated profile than to crash the entire process. + break + } saveg(^uintptr(0), ^uintptr(0), gp1, &r[0]) r = r[1:] }