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")
+ }
+}