From 56b24bf83e566cce893b40d0d02f7d67aeb8eb3f Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 29 May 2020 00:11:54 +0300 Subject: [PATCH] capability: prevent panic on wrong capabilities receival panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xad7b95] goroutine 134 [running]: github.com/nspcc-dev/neo-go/pkg/network/capability.(*Capability).DecodeBinary(0xc00024a300, 0xc00015c900) /home/rik/dev/neo-go/pkg/network/capability/capability.go:69 +0x85 github.com/nspcc-dev/neo-go/pkg/io.(*BinReader).ReadArray(0xc00015c900, 0xd54880, 0xc00018ecd8, 0xc00071fbe0, 0x1, 0x1) /home/rik/dev/neo-go/pkg/io/binaryReader.go:141 +0x22f github.com/nspcc-dev/neo-go/pkg/network/capability.(*Capabilities).DecodeBinary(0xc00018ecd8, 0xc00015c900) /home/rik/dev/neo-go/pkg/network/capability/capability.go:17 +0x6d github.com/nspcc-dev/neo-go/pkg/network/payload.(*AddressAndTime).DecodeBinary(0xc00018ecc0, 0xc00015c900) /home/rik/dev/neo-go/pkg/network/payload/address.go:34 +0x59 github.com/nspcc-dev/neo-go/pkg/io.(*BinReader).ReadArray(0xc00015c900, 0xcb9e00, 0xc00024a2a0, 0x0, 0x0, 0x0) /home/rik/dev/neo-go/pkg/io/binaryReader.go:141 +0x22f github.com/nspcc-dev/neo-go/pkg/network/payload.(*AddressList).DecodeBinary(0xc00024a2a0, 0xc00015c900) /home/rik/dev/neo-go/pkg/network/payload/address.go:78 +0x54 github.com/nspcc-dev/neo-go/pkg/network.(*Message).decodePayload(0xc000277890, 0xc000292020, 0xc0003da000) /home/rik/dev/neo-go/pkg/network/message.go:158 +0x31a github.com/nspcc-dev/neo-go/pkg/network.(*Message).Decode(0xc000277890, 0xc00071ff48, 0xc00036e090, 0xc000276e40) /home/rik/dev/neo-go/pkg/network/message.go:114 +0x19b github.com/nspcc-dev/neo-go/pkg/network.(*TCPPeer).handleConn(0xc00036e090) /home/rik/dev/neo-go/pkg/network/tcp_peer.go:154 +0x244 created by github.com/nspcc-dev/neo-go/pkg/network.(*TCPTransport).Dial /home/rik/dev/neo-go/pkg/network/tcp_transport.go:40 +0x1ad --- pkg/network/capability/capability.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/network/capability/capability.go b/pkg/network/capability/capability.go index ff5380aa7..7b489ef3a 100644 --- a/pkg/network/capability/capability.go +++ b/pkg/network/capability/capability.go @@ -65,6 +65,7 @@ func (c *Capability) DecodeBinary(br *io.BinReader) { c.Data = &Server{} default: br.Err = errors.New("unknown node capability type") + return } c.Data.DecodeBinary(br) }