aboutsummaryrefslogtreecommitdiff
path: root/src/debug/dwarf
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2022-06-23 14:11:59 -0400
committerThan McIntosh <thanm@google.com>2022-06-23 19:05:29 +0000
commitde5329f1de4cd4a938323012910310e548b2d936 (patch)
tree32685844faf4dfa1419b20cf8eef413834f9f631 /src/debug/dwarf
parent15605ca827723d568f780402d03b29842fd20eec (diff)
downloadgo-de5329f1de4cd4a938323012910310e548b2d936.tar.xz
debug/dwarf: handle malformed line table with bad program offset
Touch up the line table reader to ensure that it can detect and reject an invalid program offset field in the table header. Fixes #53329. Change-Id: Ia8d684e909af3aca3014b4a3d0dfd431e3f5a9f0 Reviewed-on: https://go-review.googlesource.com/c/go/+/413814 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/debug/dwarf')
-rw-r--r--src/debug/dwarf/line.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/debug/dwarf/line.go b/src/debug/dwarf/line.go
index bb281fbdd9..4df4a1751f 100644
--- a/src/debug/dwarf/line.go
+++ b/src/debug/dwarf/line.go
@@ -215,7 +215,11 @@ func (r *LineReader) readHeader(compDir string) error {
} else {
headerLength = Offset(buf.uint32())
}
- r.programOffset = buf.off + headerLength
+ programOffset := buf.off + headerLength
+ if programOffset > r.endOffset {
+ return DecodeError{"line", hdrOffset, fmt.Sprintf("malformed line table: program offset %d exceeds end offset %d", programOffset, r.endOffset)}
+ }
+ r.programOffset = programOffset
r.minInstructionLength = int(buf.uint8())
if r.version >= 4 {
// [DWARF4 6.2.4]