From d9fdbf48207e24c1d0d771250f2cc811ef97adff Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 26 Jan 2016 23:00:41 -0500 Subject: [PATCH] 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 --- src/runtime/mprof.go | 5 +++++ 1 file changed, 5 insertions(+) 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:] } -- 2.48.1