cmd/compile: prevent panic while formatting func(...T) with unknown T

Compile:

package p

var f = func(...A)


Before this CL:

x.go:3:13: type %!v(PANIC=runtime error: invalid memory address or nil pointer dereference) is not an expression
x.go:3:17: undefined: A


After this CL:

x.go:3:13: type func(...<T>) is not an expression
x.go:3:17: undefined: A


Found with go-fuzz.

Fixes #20233

Change-Id: Ibb232b3954c4091071440eba48b44c4022a8083f
Reviewed-on: https://go-review.googlesource.com/42610
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Josh Bleecher Snyder 2017-05-03 16:37:03 -07:00
parent 25db5d1a87
commit f2c5f57a87
2 changed files with 16 additions and 1 deletions

View file

@ -1754,7 +1754,11 @@ func fldconv(f *types.Field, flag FmtFlag, mode fmtMode, depth int) string {
var typ string
if f.Isddd() {
typ = "..." + tmodeString(f.Type.Elem(), mode, depth)
var et *types.Type
if f.Type != nil {
et = f.Type.Elem()
}
typ = "..." + tmodeString(et, mode, depth)
} else {
typ = tmodeString(f.Type, mode, depth)
}

View file

@ -0,0 +1,11 @@
// errorcheck
// Copyright 2017 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 20233: panic while formatting an error message
package p
var f = func(...A) // ERROR "type func(....*) is not an expression" ERROR "undefined: A"