From adea6a90e361629d20a68400c0c5cdcdfcdf087e Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Thu, 23 Apr 2020 08:43:29 -0400 Subject: [PATCH] [dev.link] cmd/link/internal/loader: fix buglet in section handling Allow for the possibility that a client could call newExtSym(), then ask for the section of the new sym before SetSectSym is called on it (check in SymSect for this case). Change-Id: I7bd78e7b3b7618943705b616f62ea78c4a1b68d0 Reviewed-on: https://go-review.googlesource.com/c/go/+/229603 Reviewed-by: Jeremy Faller --- src/cmd/link/internal/loader/loader.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index 987feeb284..ba0cff3ff6 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -1075,6 +1075,12 @@ func (l *Loader) SetSymAlign(i Sym, align int32) { // SymValue returns the section of the i-th symbol. i is global index. func (l *Loader) SymSect(i Sym) *sym.Section { + if int(i) >= len(l.symSects) { + // symSects is extended lazily -- it the sym in question is + // outside the range of the existing slice, then we assume its + // section has not yet been set. + return nil + } return l.sects[l.symSects[i]] } -- 2.51.0