]> Cypherpunks repositories - gostls13.git/commitdiff
internal/obj: protect against nil addr.Sym
authorRob Pike <r@golang.org>
Tue, 15 Sep 2015 17:59:27 +0000 (10:59 -0700)
committerRob Pike <r@golang.org>
Tue, 15 Sep 2015 20:56:39 +0000 (20:56 +0000)
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>
src/cmd/internal/obj/util.go

index f03eb6943f4b1ffddd43464cdba9525534d5f9e6..73d33666e2777d1f270aeeb0f61bc85ff5cacdac 100644 (file)
@@ -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 {