x/debug/dwarf: don't panic on unsupported type tags Invoking Data.Type on an offset that doesn't correspond to a known type tag should not result in a panic. Ensure that a type tag was matched and exit early if not. Change-Id: I1d490e2e131b5376b3ecedba8d871b513736ad66 Reviewed-on: https://go-review.googlesource.com/61070 Reviewed-by: John Dethridge <jcd@golang.org>
diff --git a/dwarf/type.go b/dwarf/type.go index e501a42..04bbdad 100644 --- a/dwarf/type.go +++ b/dwarf/type.go
@@ -815,6 +815,9 @@ typ = t typeCache[off] = t t.Name, _ = e.Val(AttrName).(string) + + default: + err = DecodeError{name, off, "unsupported type tag"} } if err != nil {
diff --git a/dwarf/type_test.go b/dwarf/type_test.go index 99392ce..aeb954c 100644 --- a/dwarf/type_test.go +++ b/dwarf/type_test.go
@@ -121,3 +121,18 @@ } } } + +func TestTypeForNonTypeEntry(t *testing.T) { + d := elfData(t, "testdata/typedef.elf") + + // The returned entry will be a Subprogram. + ent, err := d.LookupFunction("main") + if err != nil { + t.Fatal("d.LookupFunction:", err) + } + + _, err = d.Type(ent.Offset) + if err == nil { + t.Fatal("nil error for unreadable entry") + } +}