From a5b230b81d0d23bf3f0681235de6bb90d6a956d0 Mon Sep 17 00:00:00 2001 From: aarzilli Date: Tue, 12 Sep 2017 12:40:19 +0200 Subject: [PATCH] pkg/dwarf/frame: fix parsing of zero length entries Some linkers will sometimes insert a zero length entry between the last FDE of a CIE and the next CIE. --- pkg/dwarf/frame/parser.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/dwarf/frame/parser.go b/pkg/dwarf/frame/parser.go index 9afa5a2f..4fe84f6b 100644 --- a/pkg/dwarf/frame/parser.go +++ b/pkg/dwarf/frame/parser.go @@ -45,11 +45,18 @@ func cieEntry(data []byte) bool { } func parselength(ctx *parseContext) parsefunc { - var data = ctx.buf.Next(8) + binary.Read(ctx.buf, binary.LittleEndian, &ctx.length) - ctx.length = binary.LittleEndian.Uint32(data[:4]) - 4 // take off the length of the CIE id / CIE pointer. + if ctx.length == 0 { + // ZERO terminator + return parselength + } - if cieEntry(data[4:]) { + var data = ctx.buf.Next(4) + + ctx.length -= 4 // take off the length of the CIE id / CIE pointer. + + if cieEntry(data) { ctx.common = &CommonInformationEntry{Length: ctx.length} return parseCIE }