aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/util.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2015-09-15 10:59:27 -0700
committerRob Pike <r@golang.org>2015-09-15 20:56:39 +0000
commit448f84a43ab14a30a6bada6ce22a6dc6e89ea85e (patch)
tree2fb9c2b0adb0400eaae4ac25672a89ffbe3dc784 /src/cmd/internal/obj/util.go
parentdace9397b10e85db15c4760eb283ca43855d87d2 (diff)
downloadgo-448f84a43ab14a30a6bada6ce22a6dc6e89ea85e.tar.xz
internal/obj: protect against nil addr.Sym
This has been the root cause of a number of crashes caused by fuzz throwing modem noise at the assembler, which in turn attempts to print diagnostics but instead just gets crashes. Fixes #12627. Change-Id: I72c2da79d8eb240e1a37aa6140454c552b05e0f1 Reviewed-on: https://go-review.googlesource.com/14595 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/cmd/internal/obj/util.go')
-rw-r--r--src/cmd/internal/obj/util.go18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go
index f03eb6943f..73d33666e2 100644
--- a/src/cmd/internal/obj/util.go
+++ b/src/cmd/internal/obj/util.go
@@ -457,13 +457,25 @@ func Mconv(a *Addr) string {
}
case NAME_EXTERN:
- str = fmt.Sprintf("%s%s(SB)", a.Sym.Name, offConv(a.Offset))
+ if a.Sym != nil {
+ str = fmt.Sprintf("%s%s(SB)", a.Sym.Name, offConv(a.Offset))
+ } else {
+ str = fmt.Sprintf("%s(SB)", offConv(a.Offset))
+ }
case NAME_GOTREF:
- str = fmt.Sprintf("%s%s@GOT(SB)", a.Sym.Name, offConv(a.Offset))
+ if a.Sym != nil {
+ str = fmt.Sprintf("%s%s@GOT(SB)", a.Sym.Name, offConv(a.Offset))
+ } else {
+ str = fmt.Sprintf("%s@GOT(SB)", offConv(a.Offset))
+ }
case NAME_STATIC:
- str = fmt.Sprintf("%s<>%s(SB)", a.Sym.Name, offConv(a.Offset))
+ if a.Sym != nil {
+ str = fmt.Sprintf("%s<>%s(SB)", a.Sym.Name, offConv(a.Offset))
+ } else {
+ str = fmt.Sprintf("<>%s(SB)", offConv(a.Offset))
+ }
case NAME_AUTO:
if a.Sym != nil {