From: Josh Bleecher Snyder Date: Wed, 3 May 2017 14:45:20 +0000 (-0700) Subject: cmd/compile: avoid panic when printing * X-Git-Tag: go1.9beta1~348 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e41fb5591fa02f69b046a14048215f2d96414f96;p=gostls13.git cmd/compile: avoid panic when printing * When compiling the program: package p func _(){ *;:= } Before: x.go:4:3: syntax error: unexpected semicolon, expecting expression x.go:4:4: non-name *%!v(PANIC=runtime error: invalid memory address or nil pointer dereference) on left side of := x.go:5:1: syntax error: unexpected }, expecting expression After: x.go:4:3: syntax error: unexpected semicolon, expecting expression x.go:4:4: non-name * on left side of := x.go:5:1: syntax error: unexpected }, expecting expression No test because: (1) we don't have a good mechanism to check for the absence of the string "PANIC" in an error message (2) the string "*", while better, is itself ugly enough that I don't want to actively check for it (3) the bug isn't very important, the kind of thing only fuzzers encounter (4) the fix is obvious and trivial Fixes #20220 Change-Id: I35faa986b60b671414ee999d6264b06937f250e3 Reviewed-on: https://go-review.googlesource.com/42498 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Robert Griesemer Reviewed-by: David Crawshaw TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/compile/internal/gc/fmt.go b/src/cmd/compile/internal/gc/fmt.go index 7534effe28..41502268a7 100644 --- a/src/cmd/compile/internal/gc/fmt.go +++ b/src/cmd/compile/internal/gc/fmt.go @@ -1509,16 +1509,10 @@ func (n *Node) exprfmt(s fmt.State, prec int, mode fmtMode) { } mode.Fprintf(s, "make(%v)", n.Type) + case OPLUS, OMINUS, OADDR, OCOM, OIND, ONOT, ORECV: // Unary - case OPLUS, - OMINUS, - OADDR, - OCOM, - OIND, - ONOT, - ORECV: mode.Fprintf(s, "%#v", n.Op) - if n.Left.Op == n.Op { + if n.Left != nil && n.Left.Op == n.Op { fmt.Fprint(s, " ") } n.Left.exprfmt(s, nprec+1, mode)