• Austin Clements's avatar
    debug/dwarf: fix nil pointer dereference in cyclic type structures · 535741a6
    Austin Clements authored
    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/18459Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    535741a6
type.go 17.4 KB