From a30b172ca0cd34b8f06952e175ac6bc3d0f1f35b Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 11 Jan 2012 08:32:03 -0800 Subject: [PATCH] go/printer: don't crash if AST contains BadXXX nodes R=golang-dev, rsc CC=golang-dev https://golang.org/cl/5535048 --- src/pkg/go/printer/printer.go | 7 ++++++- src/pkg/go/printer/printer_test.go | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go index a78cfc65fc..c720f2e665 100644 --- a/src/pkg/go/printer/printer.go +++ b/src/pkg/go/printer/printer.go @@ -773,8 +773,13 @@ func (p *printer) print(args ...interface{}) { next = p.fset.Position(x) // accurate position of next item } tok = p.lastTok + case string: + // incorrect AST - print error message + data = x + isLit = true + tok = token.STRING default: - fmt.Fprintf(os.Stderr, "print: unsupported argument type %T\n", f) + fmt.Fprintf(os.Stderr, "print: unsupported argument %v (%T)\n", f, f) panic("go/printer type") } p.lastTok = tok diff --git a/src/pkg/go/printer/printer_test.go b/src/pkg/go/printer/printer_test.go index 45477d40f6..525fcc1595 100644 --- a/src/pkg/go/printer/printer_test.go +++ b/src/pkg/go/printer/printer_test.go @@ -204,3 +204,18 @@ func init() { panic("got " + s + ", want " + name) } } + +// Verify that the printer doesn't crash if the AST contains BadXXX nodes. +func TestBadNodes(t *testing.T) { + const src = "package p\n(" + const res = "package p\nBadDecl\n" + f, err := parser.ParseFile(fset, "", src, parser.ParseComments) + if err == nil { + t.Errorf("expected illegal program") + } + var buf bytes.Buffer + Fprint(&buf, fset, f) + if buf.String() != res { + t.Errorf("got %q, expected %q", buf.String(), res) + } +} -- 2.50.0