]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: fix crash on bad symbol for TEXT
authorRob Pike <r@golang.org>
Mon, 29 Jan 2018 00:28:17 +0000 (11:28 +1100)
committerRob Pike <r@golang.org>
Tue, 13 Feb 2018 04:38:15 +0000 (04:38 +0000)
Was missing a check in validSymbol.

Fixes #23580.

Can wait for go1.11. Probably safe but the crash is only for
invalid input, so not worth the risk.

Change-Id: I51f88c5be35a8880536147d1fe5c5dd6798c29de
Reviewed-on: https://go-review.googlesource.com/90398
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/asm.go
src/cmd/asm/internal/asm/pseudo_test.go

index bf3545b32fa6a9c1254d665ffc79e0c39bcd9508..19f930d802ea6c8440f2ede5a4107ab54a695905 100644 (file)
@@ -71,7 +71,7 @@ func (p *Parser) append(prog *obj.Prog, cond string, doLabel bool) {
 
 // validSymbol checks that addr represents a valid name for a pseudo-op.
 func (p *Parser) validSymbol(pseudo string, addr *obj.Addr, offsetOk bool) bool {
-       if addr.Name != obj.NAME_EXTERN && addr.Name != obj.NAME_STATIC || addr.Scale != 0 || addr.Reg != 0 {
+       if addr.Sym == nil || addr.Name != obj.NAME_EXTERN && addr.Name != obj.NAME_STATIC || addr.Scale != 0 || addr.Reg != 0 {
                p.errorf("%s symbol %q must be a symbol(SB)", pseudo, symbolName(addr))
                return false
        }
index 9ba9adfcfd647e211ce1d238ed42f221ac5aa536..52c98b4056340036f828a5c4d6ddf591fc31703f 100644 (file)
@@ -36,13 +36,16 @@ func TestErroneous(t *testing.T) {
                {"TEXT", "$\"foo\", 0, $1", "TEXT symbol \"<erroneous symbol>\" must be a symbol(SB)"},
                {"TEXT", "$0É:0, 0, $1", "expected end of operand, found É"}, // Issue #12467.
                {"TEXT", "$:0:(SB, 0, $1", "expected '(', found 0"},          // Issue 12468.
+               {"TEXT", "@B(SB),0,$0", "expected '(', found B"},             // Issue 23580.
                {"FUNCDATA", "", "expect two operands for FUNCDATA"},
                {"FUNCDATA", "(SB ", "expect two operands for FUNCDATA"},
                {"DATA", "", "expect two operands for DATA"},
                {"DATA", "0", "expect two operands for DATA"},
                {"DATA", "(0), 1", "expect /size for DATA argument"},
+               {"DATA", "@B(SB)/4,0", "expected '(', found B"}, // Issue 23580.
                {"GLOBL", "", "expect two or three operands for GLOBL"},
                {"GLOBL", "0,1", "GLOBL symbol \"<erroneous symbol>\" must be a symbol(SB)"},
+               {"GLOBL", "@B(SB), 0", "expected '(', found B"}, // Issue 23580.
                {"PCDATA", "", "expect two operands for PCDATA"},
                {"PCDATA", "1", "expect two operands for PCDATA"},
        }