debugger: do not panic if defer location can not be found (#3329)

convertDefers should not try to dereference nil if the deferred
location does not belong to a function.
This commit is contained in:
Alessandro Arzilli 2023-04-24 22:38:19 +02:00 committed by GitHub
parent 64d5ce26d6
commit 83a2555497
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1849,9 +1849,16 @@ func (d *Debugger) convertDefers(defers []*proc.Defer) []api.Defer {
ddf, ddl, ddfn := defers[i].DeferredFunc(d.target.Selected) ddf, ddl, ddfn := defers[i].DeferredFunc(d.target.Selected)
drf, drl, drfn := d.target.Selected.BinInfo().PCToLine(defers[i].DeferPC) drf, drl, drfn := d.target.Selected.BinInfo().PCToLine(defers[i].DeferPC)
if defers[i].Unreadable != nil {
r[i].Unreadable = defers[i].Unreadable.Error()
} else {
var entry uint64 = defers[i].DeferPC
if ddfn != nil {
entry = ddfn.Entry
}
r[i] = api.Defer{ r[i] = api.Defer{
DeferredLoc: api.ConvertLocation(proc.Location{ DeferredLoc: api.ConvertLocation(proc.Location{
PC: ddfn.Entry, PC: entry,
File: ddf, File: ddf,
Line: ddl, Line: ddl,
Fn: ddfn, Fn: ddfn,
@ -1864,10 +1871,8 @@ func (d *Debugger) convertDefers(defers []*proc.Defer) []api.Defer {
}), }),
SP: defers[i].SP, SP: defers[i].SP,
} }
if defers[i].Unreadable != nil {
r[i].Unreadable = defers[i].Unreadable.Error()
} }
} }
return r return r