]> Cypherpunks repositories - gostls13.git/commit
debug/dwarf: fix nil pointer dereference in cyclic type structures
authorAustin Clements <austin@google.com>
Fri, 8 Jan 2016 21:25:29 +0000 (16:25 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 14 Jan 2016 02:05:31 +0000 (02:05 +0000)
commit535741a69a1300d1fe2800778b99c8a1b75d7fdd
tree1e74f282d5c78c6a352576b6abe8087be9f51fc2
parent5f23bc8903c9b7930398c154b884979a1a43946f
debug/dwarf: fix nil pointer dereference in cyclic type structures

Currently readType simultaneously constructs a type graph and resolves
the sizes of the types. However, these two operations are
fundamentally at odds: the order we parse a cyclic structure in may be
different than the order we need to resolve type sizes in. As a
result, it's possible that when readType attempts to resolve the size
of a typedef, it may dereference a nil Type field of another typedef
retrieved from the type cache that's only partially constructed.

To fix this, we delay resolving typedef sizes until the end of the
readType recursion, when the full type graph is constructed.

Fixes #13039.

Change-Id: I9889af37fb3be5437995030fdd61e45871319d07
Reviewed-on: https://go-review.googlesource.com/18459
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/debug/dwarf/testdata/cycle.c [new file with mode: 0644]
src/debug/dwarf/testdata/cycle.elf [new file with mode: 0644]
src/debug/dwarf/type.go
src/debug/dwarf/type_test.go
src/debug/dwarf/typeunit.go